Sqoop使用總結——導入數據到大數據集羣import

目錄

 

RDBMS到HDFS

RDBMS到Hive

RDBMS到Hbase


RDBMSHDFS

1) 確定Mysql服務開啓正常

2) 在Mysql中新建一張表並插入一些數據

$ mysql -uroot -proot

mysql> create database company;

mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));

mysql> insert into company.staff(name, sex) values('Thomas', 'Male');

mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');

3) 導入數據

 

其中有報錯信息與解決,在報錯import報錯中有例子

 

1)全部導入

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--table staff \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t"

 

delete-target-dir:該文件如果有的話就刪除

導入成功圖:

 

 

2)查詢導入

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--query 'select name,sex from staff where id <=1 and $CONDITIONS;'

提示:must contain '$CONDITIONS' in WHERE clause.  所以後面必須加  $CONDITIONS

如果query後使用的是雙引號,則$CONDITIONS前必須加轉義符,防止shell識別爲自己的變量。

如:

--query "select name,sex from staff where id <=1 and \$CONDITIONS;"

3)導入指定列

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--columns id,sex \

--table staff

提示:columns中如果涉及到多列,用逗號分隔,分隔時不要添加空格

4)使用sqoop關鍵字篩選查詢導入數據

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--target-dir /user/company \

--delete-target-dir \

--num-mappers 1 \

--fields-terminated-by "\t" \

--table staff \

--where "id=1"

 

 

 

注意:跟query跟table一起使用會有問題

 

RDBMSHive

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--table staff \

--num-mappers 1 \

--hive-import \

--fields-terminated-by "\t" \

--hive-overwrite \

--hive-table staff_hive

提示:該過程分爲兩步,第一步將數據導入到HDFS,第二步將導入到HDFS的數據遷移到Hive倉庫,第一步默認的臨時目錄是/user/用戶/表名,我的是/user/hadoop/staff

注意:導入hive成功後,會將該表名的整個臨時目錄刪除掉。

其中出現過一些報錯有記錄->在筆記的"報錯解決"下->import到hive過程中報錯,但是中間結果已經寫入到了hdfs,再次執行報文件已存在

import到hive過程中報錯,但是中間結果已經寫入到了hdfs,再次執行報文件已存在

 

在項目生產上,用sqoop導入時候一般先判斷文件是否存在,存在的話先刪除舊文件再執行導入腳本。

添加這個參數

--delete-target-dir \

20/04/01 22:34:15 WARN security.UserGroupInformation: PriviledgedActionException as:hadoop (auth:SIMPLE) cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop000:8020/user/hadoop/staff already exists

20/04/01 22:34:15 ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop000:8020/user/hadoop/staff already exists

成功日誌:

 

RDBMSHbase

啓動HBase之前要把HDFSYARNzookeeper開啓

$ bin/sqoop import \

--connect jdbc:mysql://hadoop000:3306/company \

--username root \

--password root \

--table staff \

--columns "id,name,sex" \

--column-family "info" \

--hbase-create-table \

--hbase-row-key "id" \

--hbase-table "hbase_company" \

--num-mappers 1 \

--split-by id

 

提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自動創建HBase表的功能

 

不過我用的sqoop-1.4.6-cdh5.7.0、hbase-1.2.0-cdh5.7.0是可以自動創建的 !!

 

解決方案:手動創建HBase表

hbase> create 'hbase_company,'info'

(5) HBasescan這張表得到如下內容

hbase> scan ‘hbase_company’

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章