【问题标题】:Insert JSON into Hadoop将 JSON 插入 Hadoop
【发布时间】:2018-11-28 03:17:44
【问题描述】:

我每天有很多数据(JSON 字符串)(大约 150-200B)。

我想将 JSON 插入 Hadoop,最好的方法是什么(我需要对 JSON 字段进行快速插入和快速查询)?

我是否需要使用 hive 并为我的 JSON 创建 Avro 方案?还是我需要将 JSON 作为字符串插入特定列?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 到目前为止我们还没有尝试过,在开始之前我们正在寻找最好的方法

标签: json apache-spark hadoop hive bigdata


【解决方案1】:

如果您想让数据在 Hive 中可用以在其之上执行大部分聚合,我建议使用以下方法之一使用 spark。

如果你有多行 json 文件

var df =  spark.read.json(sc.wholeTextFiles("hdfs://ypur/hdfs/path/*.json").values)
df.write.format("parquet").mode("overwrite").saveAsTable("yourhivedb.tablename")

如果你有单行 json 文件

val df = spark.read.json("hdfs://ypur/hdfs/path/*.json")
df.write.format("parquet").mode("overwrite").saveAsTable("yourhivedb.tablename")

Spark 会自动为您推断表架构。如果您使用的是 cloudera 发行版,您将能够使用 impala 读取数据(取决于您的 cloudera 版本,它可能不支持复杂的结构)

【讨论】:

  • 谢谢,如果我有 JSON 作为字符串(来自 kafka)我需要改变什么?
  • 这取决于您要实现的目标......如果您想要实时摄取,与 Hive 结构保持同步会更加复杂。我建议设置一个修复布局来加载它......但这在很大程度上取决于你的用例和你需要什么,如果你想让它以有效的方式用于分析,实时摄取数据要复杂得多跨度>
  • 是的,我需要实时注入数据
【解决方案2】:

我想将 JSON 插入 Hadoop

您只需将其放在 HDFS 中...由于您有一段时间内的数据,您需要创建分区以供 Hive 读取

jsondata/dt=20180619/foo.json
jsondata/dt=20180620/bar.json

我是否需要使用 hive 并为我的 JSON 创建 Avro 方案?

不。不确定您在 Avro 和 JSON 之间混淆的地方。现在,如果您可以使用模式将 JSON 转换为定义的 Avro,那么这将有助于改进 Hive 查询,因为查询结构化二进制文件比解析 JSON 文本更好。

是否需要将 JSON 作为字符串插入特定列?

不推荐。你可以,但你不能通过 Hive 的 JSON Serde support 查询它

不要忘记上面的结构你需要PARTITIONED BY (dt STRING)。为了在表上为现有文件创建分区,您需要手动(并且每天)运行MSCK REPAIR TABLE 命令

我有 JSON 作为字符串(来自 kafka)

不要为此使用 Spark(至少不要重新发明轮子)。我的建议是使用带有 Hive 表创建支持的 Confluent 的 HDFS Kafka Connect。

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2016-10-25
    • 2019-11-20
    • 2014-02-26
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多