2014-12-02 44 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