2014-12-02 45 views
0

我有一個用於生產服務器的postgresql數據庫。我想設置一個Hadoop/Spark集羣來運行mapreduce作業。爲了做到這一點,我需要從我的postgres數據庫加載數據到hdfs。天真的做法是有一個批量作業,每天一次將數據庫內容(120GB)轉儲到HDFS。這將是浪費和昂貴的。由於大多數數據不會從一天到下一天發生變化,因此從理論上講,每天只發送差異可以更便宜,更高效。這可能嗎?如何加載將PostgresSQL中的數據逐步遷移到HDFS?

我讀過一些關於sqoop,它似乎提供我想要的功能,但它需要在更改數據庫和應用程序。有沒有辦法不需要對數據庫進行任何更改?

+0

無法添加觸發器來記錄更改,您無法從版本9.4之前的PostgreSQL中獲取增量更改。在PostgreSQL 9.4中,這可以使用[邏輯解碼](http://www.postgresql.org/docs/9.4/static/logicaldecoding.html),但是您必須編寫獲取邏輯解碼更改流的代碼並將其調整爲供Hadoop使用。 – 2014-12-02 02:34:48

回答

0
  • Apache Sqoop可以連接到postgreSQL數據庫。

    Sqoop提供了一個可用於檢索行只比一些以前導入的行集更新,即增量導入模式,就可以得到上次運行和當前運行之間發生的表的更新。

  • 數據庫不需要更改。

使用Sqoop PostgreSQL的連接器,你可以Sqoop連接到數據庫並獲得增量進口沒有任何數據庫更改。

+0

根據這裏的sqoop文檔:http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_incremental_imports我需要在每個表中有一列表明它是否被修改。我沒有那個。有沒有辦法讓sqoop自動檢測到這一點,類似於從屬數據庫如何更新? – gilsho 2014-12-02 19:38:50