SQOOP從MySQL匯入資料到Hive

2021-08-09 16:19:53 字數 3162 閱讀 5417

一、匯入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;

oktab_name

empemp_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;

okemp.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

307521 ward salesman 7698

1981-2-22

1250.0

500.0

307566 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將資料從Mysql匯入Hive中

hive匯入引數 hive home 重寫 hive home hive import 插入資料到hive當中,使用hive的預設分隔符 hive overwrite 重寫插入 create hive table 建表,如果表已經存在,該操作會報錯!hive table table 設定到hive當...

sqoop 從mysql 匯入資料到hbase

首先我們在mysql有一張表test.tohdfs 我們在hbase中也建立一張表,執行匯入 bin sqoop import connect jdbc mysql username root password 123456 table tohdfs hbase table hbase tohdfs...

sqoop 增量mysql匯入hive資料

1.實現過程包括兩步。第一步將mysql的資料通過條件語句增量匯入匯入到hive的乙個臨時表中。第二步將臨時表中的資料通過動態分割槽的方式匯入到最終的結果表。增量匯入hive臨時表 可以不使用分割槽表,需要設定了資源佇列 sqoop import d mapred.job.queue.name ro...