SQOOP MySQLからHiveにデータをインポート

7469 ワード

一、Hiveテーブルのインポート時に自動的にテーブル1を作成し、sqoop文を実行する
sqoop import \
--connect jdbc:mysql://hadoop001:3306/sqoop \
--username root \
--password 123456 \
--table emp_etl \
-m 1 \
--hive-import \
--create-hive-table  \
--hive-table  emp_mysql

-hive-import説明sqoopここでインポートするのはhiveで他ではありません-create-hive-table自動作成テーブル(エラーが発生した場合)-hive-table自動作成テーブルの名前を指定します
2、上記の文を実行するのはエラーです
ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

解決策は、Hive libの下のjarパケットをSQOOPのlibの下にコピーすることです.
cp hive-common-1.1.0-cdh5.7.0.jar $SQOOP_HOME/lib
cp hive-shims* $SQOOP_HOME/lib

3、再実行すれば間違いなく、Hiveにemp_があるかどうかを確認するmysqlテーブル、emp_を表示mysqlテーブルでは、データのインポートに成功しました
hive (default)> show tables;
OK
tab_name
emp
emp_mysql
testhivedrivertable

4、弊害–create-hive-tableパラメータを使用してテーブルを自動的に作成する方法では、テーブル内のフィールドタイプが予想と異なることがわかりますので、生産上は一般的にHiveを作成してからインポートします.
二、手動でHiveテーブルを作成してHiveテーブルを作成するときの区切り文字は、インポート時に指定した分割と同じでなければならない1、Hiveでempテーブルを作成し、区切り文字をtとする
create table emp(
empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int
)row format delimited fields terminated by '\t'

2、SQOOPインポート文必須行指定区切り文字–fields-terminated-by
sqoop import \
--connect jdbc:mysql://hadoop001:3306/sqoop \
--username root \
--password 123456 \
--table emp_etl \
-m 1 \
--hive-import \
--hive-table  emp \
--fields-terminated-by '\t' 

3、emp表にデータがある
hive (default)> select * from emp;
OK
emp.empno       emp.ename       emp.job emp.mgr emp.hiredate    emp.sal emp.comm        emp.deptno
7369    SMITH   CLERK   7902    1980-12-17      800.0   NULL    20
7499    ALLEN   SALESMAN        7698    1981-2-20       1600.0  300.0   30
7521    WARD    SALESMAN        7698    1981-2-22       1250.0  500.0   30
7566    JONES   MANAGER 7839    1981-4-2        2975.0  NULL    20
7654    MARTIN  SALESMAN        7698    1981-9-28       1250.0  1400.0  30

4、–hive-overwriteパラメータは上書きデータ
三、パーティションテーブル1、Hiveにデータをインポートしてパーティションテーブルemp_を作成するpart
create table emp_part(
empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int
)partitioned by (event_month string) 
row format delimited fields terminated by '\t';

2、パーティションデータのインポート
sqoop import \
--connect jdbc:mysql://hadoop001:3306/sqoop \
--username root \
--password 123456 \
--table emp_etl \
-m 1 \
--hive-import \
--hive-table  emp_part \
--fields-terminated-by '\t' \
--hive-partition-key 'event_month' \
--hive-partition-value '2018-08-08'

-hive-partition-keyパーティションフィールド-hive-partition-valueパーティション値