【问题标题】:Java Hadoop inserting and query large data in JSON FormatJava Hadoop以JSON格式插入和查询大数据
【发布时间】: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。

标签: java hadoop


【解决方案1】:

我建议你使用 HDFS/HIVE/JSONSerde 方法。

解决方案大纲如下所示。

  1. 将您的 JSON 数据存储在 HDFS 上。
  2. 使用 hive 创建外部表并使用 jsonSerde 将 json 数据映射到表的列。
  3. 使用 hiveQL 查询您的数据。

在上面的解决方案中,由于hive是schema-on-read,所以每次查询表时都会解析你的json数据。

但是,如果您想解析一次数据,并且有批量(每周、每月)到达的数据,那么最好解析一次数据并创建一个临时表。可用于频繁查询,避免serde重复解析。

我在 :Hadoopgig 创建了一个示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2022-07-30
    • 2011-09-26
    • 2018-11-28
    相关资源
    最近更新 更多