sqoop從Hive同步數據到Oracle

    最近工作中需要對Hive工單數據和oracle數據業務數據合起來出報表,所以需要從hive把工單數據同步到oracle中,這就用到了sqoop。
    sqoop是sql to Hadoop, 關係型數據庫(mysql,oracle)與hadoop(hdfs,hive,hbase)之間的數據ETL工具, 支持全量和增量更新。sqoop 的本質是一個命令行工具,將導入或導出命令翻譯成MapReduce程序來實現。
在這裏插入圖片描述

安裝sqoop

    由於我們是用的Ambari進行HDP的管理安裝,所以只要在Ambari控制檯中安裝即可(當然也可以自己下包在主機上安裝),sqoop就是一個工具, 只需要在Hadoop集羣的一臺主機上進行安裝即可。我這裏安裝的版本是sqoop1.4.6,安裝完如下圖所示:
在這裏插入圖片描述
    sqoop1版本只支持JDBC連接方式,安裝完了之後需要添加mysql和oracle數據庫廠商的Jdbc驅動包到lib下。可以連接mysql數據庫測試下是否正常,查詢下數據庫下的表,如下:

sqoop list-tables --connect 'jdbc:mysql://localhost:3306/test' --username 'test' --password '123456'

sqoop導入

導入腳本模板說明:

sqoop export
#oracle數據庫連接
--connect jdbc:oracle:jdbc:oracle:thin:@locallhost:1521/testdb
--username test
--password 123456
--table t_test
# hive表數據文件在hdfs上的路徑
--export-dir '/apps/hive/warehouse/dbi.db/t_test/pdt=20191229'
# 指定表的列名,不寫會默認全部列
--columns ID,data_date,data_type,c1,c2,c3 
# 列分隔符(根據hive的表結構定義指定分隔符)
--input-fields-terminated-by '\001'
# 行分隔符
--input-lines-terminated-by '\n' 
# 如果hive表中存在null字段,則需要添加參數,否則無法導入
--input-null-string '\\N' 
--input-null-non-string '\\N'  > sqoop_oracle.log 2>&1 &

導入腳本實例如下:

sqoop export \
--connect 'jdbc:oracle:thin:@locallhost:1521/testdb' \
--username 'test' \
--password "123456" \
--table 'TEST_ORDER' \
--export-dir '/apps/hive/warehouse/dbi.db/test_order/pdt=20200308' \
--input-fields-terminated-by '\001' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N'  > sqoop_oracle.log 2>&1 &

腳本執行日誌如下:
在這裏插入圖片描述
    從日誌中可以看出,sqoop的數據導入背後是一個個mapreduce任務執行的。查看導入的oracle庫表的數量也和日誌中數量相同,執行了不到3分鐘,導入3000多萬條記錄,可以看出sqoop導入速度還是很快的。
在這裏插入圖片描述

官網參考文檔傳送門!

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