hadoop—将数据存储在hdfs中而不是消息队列中

pokxtpni  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(386)

我正在尝试更改在应用程序中处理数据的方法。数据首先从数据库接收并存储在消息队列中。我想把数据直接放到hdfs中。我不希望数据写入文件并移动到hdfs。我将从hdfs处理数据并将结果放入hdfs。我可以从java程序将数据写入hdfs而不是向hdfs发出copy命令吗?

tcbh2hod

tcbh2hod1#

根据当前设置,您有几个选项。
斯库普-http://sqoop.apache.org/ -设计用于结构化数据存储(关系数据库)和hdfs之间的批量传输。在不了解更多有关设置的信息的情况下,这可能适用于您,也可能不适用于您。
ApacheSpark-https://spark.apache.org/ -可以读取多种源代码,包括zeromq、kafka、hdfs等。它还支持自定义输入(源代码)。您也许可以从队列中以流式方式对所需的数据进行任何处理,并直接输出到hdfs。同样,这取决于您的设置。
Apache·Kafka/mapreduce-http://kafka.apache.org/ -这可能不是一个选项,但是使用apachekafka作为“队列”将允许您对其运行mapreduce,直接输出到hdfs。
webhdfs/httpfs-https://hadoop.apache.org/docs/r1.0.4/webhdfs.html -rest接口到hdfs。您可以将从数据库中提取的任何内容与直接将数据发布到hdfs。这确实有一些警告,但我不会建议它不小心。
选项2和3似乎并不完全是你想要的,但可能是一个妥协。

nx7onnlm

nx7onnlm2#

你的方法不可取有几个原因。
将每条消息写入hdfs将是一项代价高昂的操作。
不能将消息直接写入hdfs,必须先将其写入文件,然后再将其放入hdfs。
方法2,将在hdfs中生成大量小文件,增加name节点跟踪该文件的每个块的负担。
我建议,为消息队列设置一个阈值,一旦达到该阈值,就将所有消息移动到一个文件,然后移动到hdfs。

相关问题