最近再學習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'
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- 在Hadoop集群環境中為MySQL安裝配置Sqoop的教程
- sqoop export導出 map100% reduce0% 卡住的多種原因及解決
- 解決sqoop從postgresql拉數據,報錯TCP/IP連接的問題
- 解決sqoop import 導入到hive后數據量變多的問題
- sqoop 實現將postgresql表導入hive表
- 使用shell腳本執行hive、sqoop命令的方法
- Sqoop的安裝與使用詳細教程