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

使用java代码将数据从postgresql迁移到hdfs,java,hadoop,hdfs,sqoop,Java,Hadoop,Hdfs,Sqoop,我是Hadoop的新手,被赋予了使用java代码将结构化数据迁移到HDFS的任务。我知道Sqoop也可以实现这一点,但这不是我的任务 有人能解释一下可能的方法吗 我确实试过这么做。我所做的是使用jdbc驱动程序从psql服务器复制数据,然后将其以csv格式存储在HDFS中。这样做对吗 我读到Hadoop有自己的数据类型来存储结构化数据。你能解释一下这是怎么发生的吗 谢谢。Sqoop是一个执行以下操作的简单工具 1连接到RDBMS postgresql,获取表的元数据,并创建表的pojoa Jav

我是Hadoop的新手,被赋予了使用java代码将结构化数据迁移到HDFS的任务。我知道Sqoop也可以实现这一点,但这不是我的任务

有人能解释一下可能的方法吗

我确实试过这么做。我所做的是使用jdbc驱动程序从psql服务器复制数据,然后将其以csv格式存储在HDFS中。这样做对吗

我读到Hadoop有自己的数据类型来存储结构化数据。你能解释一下这是怎么发生的吗


谢谢。

Sqoop是一个执行以下操作的简单工具

1连接到RDBMS postgresql,获取表的元数据,并创建表的pojoa Java类。 2使用java类通过mapreduce程序导入和导出

如果需要编写简单的java代码,那么需要控制并行性以提高性能

请执行以下操作:

1创建一个Java类,该类使用Java JDBC连接到RDBMS 2创建一个Java类,该类接受从resultset获取的输入字符串,并将HDFS服务写入文件

换一种方式

使用DBInputFormat创建MapReduce将TextOutputFormat作为输出目录的输入拆分数传递给HDFS

有关hadoop和spark的任何问题,请访问

谢谢
Sainagaraju Vaduka

您最好使用Sqoop。因为如果您自己构建Sqoop,您可能会完全按照Sqoop的方式来完成

无论哪种方式,从概念上讲,您都需要一个具有自定义输入格式的自定义映射器,该格式能够从源中读取分区数据。在这种情况下,需要对数据进行分区的表列才能利用并行性。分区源表是理想的

DBInputFormat不会优化对源数据库的调用。完整的数据集被InputFormat分割成配置数量的分割。 每个映射器将执行相同的查询,并仅加载与split对应的数据部分。这将导致每个映射器发出相同的查询,并对数据集进行排序,以便它可以选择其数据部分

此类似乎没有利用分区源表。您可以扩展它以更有效地处理分区表

Hadoop从AVRO、ORC和Parquet等结构化文件格式开始


如果您的数据不需要以主要用于OLAP用例的列格式存储,在OLAP用例中,只需要选择几列大型列集,请使用AVRO

您尝试的方法不是一种好方法,因为您将在开发代码、测试等方面浪费大量时间,而不是使用sqoop将数据从任何RDBMS导入到配置单元。我们想到的第一个工具是SqoopSQL到Hadoop。

最先进的技术是使用pull ETL sqoop作为常规批处理过程从RDBMs获取数据。但是,这种方法既消耗了RDBMS的资源,也占用了sqoop运行多线程和多个jdbc连接的时间,而且往往需要很长时间在RDBMS上运行顺序提取,并导致数据损坏—当这个长sqoop过程总是处于后期时,动态RDBMS会被更新


然后,一些替代范式存在并正在成熟。背后的想法是构建监听RDBMS的变更数据捕获流。然后,您可以构建一个实时ETL,在hadoop或其他平台上同步RDBMS和数据仓库。

不确定这比其他答案增加了什么