SQOOP从MySQL导入数据到Hive

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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值