一、导入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 分区值