我需要从postgres数据库到acumulo数据库获取数据。我们希望使用序列文件来运行map/reduce作业来实现这一点,但不确定如何启动。由于内部技术原因,我们需要避免sqoop。
如果没有sqoop,这可能吗?再说一次,我真的不知道从哪里开始。我是否编写了一个java类来将所有记录(数百万条)读入jdbc并以某种方式输出到hdfs序列文件?
谢谢你的意见!
p、 我应该提到使用分隔文件是我们现在面临的问题。有些字段是包含分隔符的长字符字段,因此无法正确解析。字段中甚至可能有一个选项卡。我们想从postgres直接转到hdfs而不需要解析。
3条答案
按热度按时间qncylg1j1#
可以将数据库中的数据导出为csv或制表符分隔、管道分隔或ctrl-a(unicode 0x0001)分隔的文件。然后,您可以将这些文件复制到hdfs中,并运行一个非常简单的mapreduce作业,甚至可能只包含一个Map器,并配置为读取所使用的文件格式并输出序列文件。
这将允许在hadoop集群的服务器之间分配创建序列文件的负载。
而且,这很可能不是一次性交易。您必须定期将postgres数据库中的数据加载到hdfs中。它们使您能够调整mapreduce作业以合并新数据。
dddzy1tm2#
您可以使用avro序列化您的数据,尽管它的速度不是很快(尤其是在示例中使用python时),然后将其加载到hdfs中。
假设您有数据库foo:
您可以创建如下avro模式:
然后逐行序列化数据:
或者,您可以使用纯json序列化数据。
jrcvhitl3#
有http://sqoop.apache.org/ 你要怎么做就怎么做。