sqoop讀取postgresql資料庫表格匯入到hdfs中的實現
最近再學習spark streaming做實時計算這方面內容,過程中需要從後臺資料庫匯出資料到hdfs中,經過調研發現需要使用sqoop進行操作,本次操作環境是Linux下。
首先確保環境安裝了Hadoop和sqoop,安裝只需要下載 ,解壓 以及配置環境變數,這裡不多說了,網上教程很多。
一、配置sqoop以及驗證是否成功
切換到配置檔案下:cd $SQOOP_HOME/conf
建立配置環境檔案: cp sqoop-env-template.sh sqoop-env.sh
修改配置檔案:conf/vi sqoop-env.sh:修改內容如下
配置完成後,執行命令sqoop-version ,檢查是否成功,如圖顯示sqoop 1.4.7即成功。
二、新增postgresql驅動jar包
因為這裡使用sqoop讀取postgresql的資料,所以需要將資料庫驅動包放到$SQOOP_HOME/lib 下即可 。
三、匯入pg資料庫中表到hdfs中
1、首先要啟動Hadoop叢集,不然會報錯
執行語句 $HADOOP_HOME/sbin/./start-all.sh
2、執行sqoop語句進行資料匯入到hdfs
sqoop import \ --connect jdbc:postgresql:localhost:5432/test(資料庫的名稱) --username postgres (填自己的資料庫使用者名稱) --password 888888 (填自己資料庫的密碼) --table company (自己建立表的名稱) --m 1 (mapreduce的個數)
執行結果如圖:
3、檢查hdfs上是否成功儲存到表資料
$HADOOP_HOME/bin hdfs dfs -cat /sqoop/part-m-00000(資料目錄改成自己的)
結果如圖所示:
顯示使用sqoop 將 postgreql上的表格資料成功匯入到hdfs中,這算今天也有點收穫了!
補充:利用Sqoop從PostgreSQL匯入資料時遇到的坑
sqoop import \ --connect "jdbc:postgresql://10.101.70.169:5432/db_name" \ --username "postgres" \ --password "123456" \ --table "test_user"\ --target-dir "/user/hive/warehouse/test.db/test_user" \ --fields-terminated-by '\t' \ --lines-terminated-by '\n' \ --hive-drop-import-delims \ --incremental lastmodified \ --merge-key id \ --check-column update_time \ --last-value "2019-03-25" \ --m 1 \ -- --schema "schema_name" \ --null-string '\\N' \ --null-non-string '\\N'
1、-- --schema
一定要放在後面,否則可能導致無執行日誌或無法匯入資料到指定目錄且無法重新執行(報目錄已存在)
2、PostgreSQL
須設定SET standard_conforming_strings = on;
,否則--null-string和--null-non-string
不起作用;
3、--null-string
和--null-non-string
放在-- --schema
後面,否則執行時報Can't parse input data: '\N'
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。