大數據面試之Sqoop


說明,感謝亮哥長期對我的幫助,此處多篇文章均爲亮哥帶我整理。以及參考諸多博主的文章。如果侵權,請及時指出,我會立馬停止該行爲;如有不足之處,還請大佬不吝指教,以期共同進步。

1.Sqoop

1.1 Sqoop架構?如何啓動訪問?

Sqoop是一個用來將Hadoop和關係型數據庫中的數據相互轉移的工具,可以將一個關係型數據庫(例如 : MySQL ,Oracle 等)中的數據導入到Hadoop的HDFS中,也可以將HDFS的數據導入到關係型數據庫中。

image

1.2 導入數據

1.2.1 MySQL=> Hive

MySQL=> Hive (MySQL數據導入進Hive)
1.將指定的mysql表遷移到Hive中
sqoop import --hive-import --connect jdbc:mysql://192.168.1.1/dbname --table ${tablename} --username ${username} --password ${password} --hive-database${dbname} -m 1 --as-parquetfile
例如:
sqoop import --hive-import --connect jdbc:mysql://172.16.16.15/test --table person --username mdba --password dsf0723 --hive-database test -m 1 --as-parquetfile

2.將mysql指定庫中的所有表遷移到Hive中
sqoop import-all-tables --hive-import --connect jdbc:mysql://192.168.1.1/dbname --username ${username} --password ${password} --hive-database ${dbname} -m 1  --hive-database anhui --as-parquetfile

1.2.2 Oracle=> Hive

-Oracle => Hbase  將上述命令中的jdbc:mysql:改爲jdbc:oracle:thin
例如:
sqoop import --hive-import --connect jdbc:oracle:thin:@172.16.16.16:1523:orcl --table test --username cq2017 --password cq2017 --hive-database chongqing_2017 --hive-table test_20170505 -m 1 --as-parquetfile

1.2.3 Sqoop import原理

從傳統數據庫獲取元數據信息(schema、table、field、field type),把導入功能轉換爲只有Map的Mapreduce作業,在mapreduce中有很多map,每個map讀一片數據,進而並行的完成數據的拷貝

Sqoop 在 import 時,需要制定 split-by 參數。
Sqoop 根據不同的 split-by參數值 來進行切分, 然後將切分出來的區域分配到不同 map 中。每個map中再處理數據庫中獲取的一行一行的值,寫入到 HDFS 中。同時split-by 根據不同的參數類型有不同的切分方法,如比較簡單的int型,Sqoop會取最大和最小split-by字段值,然後根據傳入的 num-mappers來確定劃分幾個區域。

1.3 導出數據

1.3.1 Hive(HDFS)=>MySQL

從Hive(HDFS)=>MySQL  (從Hive導入進MySQL)
sqoop export --connect jdbc:mysql://192.168.1.1:3306/dbname --username root
--password 123 --export-dir ‘hive表hdfs文件文件存放路徑’ --table mysqltablename  -m 1 --fields-termianted-by '\t'
--MysqlTableName 必須是提前創建好的,且數據字段和字段類型,分隔符的設定與Hive中一致
--Hive中沒有特殊的分隔符要求的話,默認分隔符是/u0001 不用加命令項 --fields-termianted-by ‘\t’ 
-- hive表hdfs文件文件存放路徑  /user/hive/warehouse/庫名/表名

1.3.2 Sqoop export 原理

獲取導出表的schema、meta信息,和Hadoop中的字段match;多個map only作業同時運行,完成hdfs中數據導出到關係型數據庫中介紹Hadoop業務的開發流程以及Sqoop在業務當中的實際地位
在實際的業務當中,我們首先對原始數據集通過MapReduce進行數據清洗,然後將清洗後的數據存入到Hbase數據庫中,而後通過數據倉庫Hive對Hbase中的數據進行統計與分析,分析之後將分析結果存入到Hive表中,然後通過Sqoop這個工具將我們的數據挖掘結果導入到MySql數據庫中,最後通過Web將結果展示給客戶。
![image](https://img-blog.csdnimg.cn/20190709110009266.png)

參考
參考
參考

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