【发布时间】:2017-02-19 01:44:49
【问题描述】:
我需要使用 Java 和 Hadoop 构建一个系统来处理大型数据处理(JSON 格式)。我要创建的系统是将数据插入文件存储(无论是HDFS还是数据库)并查询处理后的数据
我有一个使用 Hadoop MapReduce 来查询用户想要的数据的大图。 但是让我感到困惑的一件事是我应该如何插入数据。我应该使用 HDFS 并使用带有 Hadoop API 的 Java 插入文件吗?还是使用其他工具(例如 HBase、关系数据库、NoSQL 数据库)插入数据更好,以便 Hadoop MapReduce 从我将使用的其他工具获取输入数据?
请指教。
非常感谢
【问题讨论】:
-
这取决于您的“处理数据”来自哪里?如果只是一些文件,那么您可以使用
hadoop fs -put <local-file> <dest-file>。如果它来自另一个系统,那么您可以使用其他工具,例如 Kafka/Flume/Spark/etc -
其实,大局是我的 java 应用程序会以 JSON 格式写入日志文件(wep 应用程序的服务器端,大约 200 个日志进程/秒)。减少记录文件的地图将单独完成,即手动(不是通过应用程序中的某些功能)。我读过有关使用 java 和 hadoop API 写入 HDFS 的信息,但是使用 hadoop API 同时写入一个文件是否是线程安全的?还是应该用其他工具来写日志文件?
-
不,它不会是线程安全的,多个进程写入一个文件会带来痛苦。您可以 1) 管理您自己的线程。 2) 看看Apache Flume。它有一个HTTP Source 或 3) 写出 200 个文件然后减少它们
-
感谢您的解释。非常清楚。我想请教您的意见,使用 HBase 作为替代方案怎么样?非常感谢
-
完全没问题。 TBH 我没有 HBase 的经验,但我认为 HBase 更多地映射到数据库用例(虽然我可能错了)。我目前使用的架构是一个 REST webservice 向 RabbitMQ 发送消息,然后使用 Flume 发送消息并写入 HDFS。