hadoop—使用java代码将数据从postgresql迁移到hdfs

mqxuamgl  于 2021-05-29  发布在  Hadoop
关注(0)|答案(4)|浏览(710)

我是hadoop的新手,并且被赋予了使用java代码将结构化数据迁移到hdfs的任务。我知道sqoop也可以实现这一点,但这不是我的任务。
有人能解释一下可能的方法吗。
我确实试过这么做。我所做的是使用jdbc驱动程序从psql服务器复制数据,然后将其以csv格式存储在hdfs中。这样做对吗?
我听说hadoop有自己的数据类型来存储结构化数据。你能解释一下这是怎么发生的吗。
谢谢您。

chhkpiq4

chhkpiq41#

sqoop是一个执行以下操作的简单工具。
1) 连接到rdbms(postgresql)并获取表的元数据并创建表的pojo(java类)。2) 使用java类通过mapreduce程序导入和导出。
如果您需要编写纯java代码(需要控制并行性以获得性能)
执行以下操作:
1) 创建一个使用javajdbc连接到rdbms的java类2)创建一个接受输入字符串(从resultset获取)并将hdfs服务写入文件的java类。
换一种方式。
使用dbinputformat创建mapreduce将textoputformat作为输出目录的输入分割数传递给hdfs。
请访问https://bigdatatamer.blogspot.com/ 任何与hadoop和spark相关的问题。
谢谢sainagaraju vaduka

xv8emn3q

xv8emn3q2#

最先进的技术是使用(pull-etl)sqoop作为常规的批处理过程从rdbms获取数据。但是,这种方法既消耗rdbms的资源(通常sqoop使用多个jdbc连接运行多个线程),又需要很长时间(通常在rdbms上运行顺序获取),而且会导致数据损坏(当这个长的sqoop进程“总是很晚”时,会更新活动的rdbms)。
然后一些替代的范例存在(push-etl)并且正在成熟。背后的想法是构建监听rdbms的变更数据捕获流。debezium就是一个例子。然后可以构建一个实时etl,在hadoop或其他地方同步rdbms和数据仓库。

vybvopom

vybvopom3#

最好使用sqoop。因为如果您自己构建sqoop的话,您最终可能会完全按照sqoop所做的去做。
无论哪种方式,从概念上讲,您都需要一个具有自定义输入格式的自定义Map器,该Map器能够从源中读取分区数据。在这种情况下,需要对数据进行分区的表列利用并行性。分区源表是理想的。
dbinputformat不会优化对源数据库的调用。完整的数据集被inputformat分割成配置的分割数。每个Map器将执行相同的查询,并只加载与split对应的数据部分。这将导致每个Map器发出相同的查询,并对数据集进行排序,以便它可以选择其数据部分。
这个类似乎没有利用分区源表。您可以扩展它以更有效地处理分区表。
hadoop从avro、orc和parquet等结构化文件格式开始。
如果您的数据不需要以列格式存储(主要用于olap用例,在这种情况下,只需要选择几列大型列集),那么可以使用avro。

bsxbgnwa

bsxbgnwa4#

您尝试的方法并不好,因为您将在开发代码、测试等方面浪费大量时间,而使用sqoop将数据从任何rdbms导入hive。我们想到的第一个工具是sqoop(sql到hadoop)。

相关问题