我每天都有很多数据(JSON字符串)(大约150-200B)。
我想将JSON插入到Hadoop中,最好的方法是什么(我需要快速插入和快速查询JSON字段)?
我是否需要使用hive并为我的JSON创建Avro方案?或者,我是否需要将JSON作为字符串插入到特定列中?
发布于 2018-06-19 20:49:08
如果你想使数据在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版本,它可能不支持复杂的结构)
发布于 2018-06-19 21:01:16
我想把JSON插入Hadoop
你只要把它放到HDFS中...由于您拥有一段时间内的数据,因此您需要创建分区以供Hive读取
jsondata/dt=20180619/foo.json
jsondata/dt=20180620/bar.json我是否需要使用hive并为我的
创建Avro方案?
不是的。不知道你在哪里混淆了Avro和JSON。现在,如果您可以将JSON转换为具有模式的已定义Avro,那么这将有助于改进Hive查询,因为查询结构化二进制比解析JSON文本更好。
是否需要将JSON作为字符串插入到特定列中?
不推荐使用。你可以,但是你不能通过蜂窝的JSON Serde support查询它
别忘了上面的结构,你需要用到PARTITIONED BY (dt STRING)。为了在表中为现有文件创建分区,您需要手动(每天)运行一个MSCK REPAIR TABLE命令
JSON有
作为字符串(来自kafka)
不要使用Spark来解决这个问题(至少不要重复发明轮子)。我的建议是使用Confluent的HDFS Kafka Connect,它支持Hive表的创建。
https://stackoverflow.com/questions/50923658
复制相似问题