文章目錄
- 前言
- 1.Sqoop簡介(1.4.6)
- 2.原理
- 3.JDBC驅動
- 4.SqoopDemo
- 4.1 MySQL->HDFS
- 4.2 RDBMS -> HIVE
- 4.3 RDBMS -> HBase
- 4.3 HIVE / HDFS -> RDBMS
- 5.腳本撰寫
- 總結
前言
本文分享本菜鳥的Sqoop學習筆記,Sqoop能夠實作Hadoop(hive)與傳統資料庫之間的資料傳遞,主要用于數倉(Hive)與資料庫之間的資料傳輸,
本菜鳥QQ:599903582
笨鳥先飛,熟能生巧 ~
比心心 ~
提示:以下是本篇文章正文內容,下面案例可供參考
1.Sqoop簡介(1.4.6)
開源工具,主要用戶在Hadoop(Hive)與傳統的資料庫之間進行資料的傳遞,
可以將一個關系型資料庫中的資料到進到Hadoop的HDFS中,也可以將HDFS的資料倒進到關系型資料庫中,
注意:Sqoop2不打算應用于生產環境,Sqoop1可以,
2.原理
Sqoop,將匯入匯出的命令翻譯成MapReduce程式來實作. (其實只有map),
在翻譯出的mapreduce中主要是對inputformat和outputformat進行定制,
3.JDBC驅動
拷貝jdbc驅動到sqoop的lib目錄下
$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
4.SqoopDemo
4.1 MySQL->HDFS
全部匯入:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /company \ //指定要發送到的HDFS 的路徑,路徑不存在自動創建
--delete-target-dir \ //因為是通過Mapreduce程式來實作的,如果目標檔案存在會報錯,所有如果有就將其洗掉
--num-mappers 1 \ //設定Map的個數
--fields-terminated-by "\t" \ //元素之間使用什么分割
--split-by id; //磁區按照id來磁區
注意:
- –target-dir的默認路徑是: /user/用戶名/表名
- —split-by 默認值是主鍵
查詢匯入:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
//根據查詢陳述句來進行匯入,must contain
//'$CONDITIONS' in WHERE clause. 必須有
--query 'select id,name,sex from staff where id <= 10 and $CONDITIONS' \
--split-by id
//注意:使用query,必須制定target-dir和split-by,因為這是沒有默認值
//如果query后面使用的是創引號,則$CONDITIONS前必須加轉移符,放置shell識別為自己的變數
匯入指定列:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
--columns id,name \ //指定要上傳的指定列
--split-by id
//注意:columns中如果涉及到多列,用逗號分割,分割時不要添加空格
通過sqoop關鍵字篩選查詢指定資料
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1" //指定查詢規則
4.2 RDBMS -> HIVE
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--delete-target-dir \
--num-mappers 2 \
--hive-import \ //宣告hive
--fields-terminated-by "\t" \
--hive-overwrite \ //寫入選項
--hive-table staff_hive //傳入后的表名
注意:程序分兩步,
- 1.將資料匯入到HDFS,
- 2.HDFS到hive
第一步默認的臨時目錄是**/user/用戶名/表名**
4.3 RDBMS -> HBase
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--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
注意:
- 匯入到HBase不會自動創建表(sqoop1.4.6只支持HBase1.0.1之前的版本的自動創建HBase表的功能),
- sqoop1.4.6只支持HBase1.0.1之前的版本的自動創建HBase表的功能
4.3 HIVE / HDFS -> RDBMS
bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--num-mappers 2 \
--export-dir /user/hive/warehouse/staff_hive \ //指定要輸出的檔案的路徑
--input-fields-terminated-by "\t"
注意:
- 匯入到HBase不會自動創建表(sqoop1.4.6只支持HBase1.0.1之前的版本的自動創建HBase表的功能),
- 匯出到Mysql不會自動創建表,
5.腳本撰寫
touch opt/job_HDFS2RDBMS.opt
vi opt/job_HDFS2RDBMS.opt
export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
執行:
$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt
總結
Sqoop的內容相對來說比較少,也比較簡單,主要也是用于數倉(Hive)與資料庫之間的資料傳輸,
本菜鳥QQ:599903582
笨鳥先飛,熟能生巧 ~
比心心 ~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248070.html
標籤:其他
上一篇:博客之星,有你的鼓勵更精彩
