1. 程式人生 > 資料庫 >解決sqoop從postgresql拉資料,報錯TCP/IP連線的問題

解決sqoop從postgresql拉資料,報錯TCP/IP連線的問題

問題:

sqoop從postgresql拉資料,在執行到mapreduce時報錯Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections

問題定位過程:

1、postgresql 5432埠已開放,執行任務的節點能telnet通,並且netcat測試通過

2、sqoop list-tables命令可正常執行,sqoop import報錯Connection refused. Check that the hostname and port are correct and that the

3、從其它伺服器叢集跑同樣指令碼正常

解決:

叢集中有node不能訪問5432,sqoop import命令一定要叢集中所有起nodemanager服務的節點有訪問資料庫埠的許可權,所以保證所有節點訪問5432後解決

備註:

sqoop list-tables能執行就說明肯定不是postgresql端的問題,sqoop list-tables執行命令的這臺伺服器能訪問5432即可

補充:使用Sqoop從PostgreSQL向Hive中遷移資料遇到的問題

postgreSQL的介面

解決sqoop從postgresql拉資料,報錯TCP/IP連線的問題

跟mysql不同之處就是,多了一個 2 ,這也是導致資料遷移錯誤原因

1.資料庫名稱 2.schema 3.表名

PostgreSQL中的物件屬於三層模型,即database->schema->table。PostgreSQL中一般包含多個database,每個database包含多個schema,schema下包含多個表。因此使用sqoop抽取資料時有時需要指定表是屬於哪個schema。

解決方案:

在程式碼最後指定--schema

-- --schema 上圖2的名稱

整個程式碼如下

./sqoop import --connect jdbc:postgresql://***.***.***.***:38888/bigdata --username test --password test123 --table tb_ecar_gps_zhengzhou_standard --fields-terminated-by '\t' -m 1 --target-dir '/sqoop/postgresql123' -- --schema benchmark_data;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。