您的位置:首页 > 数据库 > SQL

SQOOP从MySQL导入数据到Hive

2017-10-22 22:31 459 查看
一、导入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 分区值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqoop