MapReuce中对大数据处理最合适的数据格式是什么?
Elephant Bird(https://github.com/kevinweil/elephant-bird)是一个开源项目,包含用于处理LZOP压缩的有用程序,它有一个可读取JSON的LzoJsonInputFormat,尽管要求输入文件是LZOP-compressed。,但可以将Elephant Bird代码用作自己的JSON InputFormat模板,该模板不具有LZOP compression要求。 此解决方案假定每个JSON记录位于单独的行上。JsonRecordFormat很简单,除了构造和返回JsonRecordFormat之外什么也没做,所以我们将跳过该代码。JsonRecordFormat向映射器发出LongWritable,MapWritable key/value,其中MapWritable是JSON元素名称及其值的映射。 我们来看看RecordReader的工作原理,它使用LineRecordReader,这是一个内置的MapReduce读取器。要将该行转换为MapWritable,读取器使用json-simple解析器将该行解析为JSON对象,然后迭代JSON对象中的键并将它们与其关联值一起放到MapWritable。映射器在LongWritable中被赋予JSON数据,MapWritable pairs可以相应地处理数据。 ![]() 以下显示了JSON对象示例: ![]() ![]() 该技巧假设每行一个JSON对象,以下代码显示了在此示例中使用的JSON文件: ![]() 现在将JSON文件复制到HDFS并运行MapReduce代码。MapReduce代码写入每个JSON key/value对并输出: ![]() 写JSON 类似于3.2.1节,编写XML的方法也可用于编写JSON。 Pig Elephant Bird包含一个JsonLoader和LzoJsonLoader,可以使用它来处理Pig中的JSON,这些加载器使用基于行的JSON。每个Pig元组都包含该行中每个JSON元素的chararray字段。 Hive Hive包含一个可以序列化JSON的DelimitedJSONSerDe类,但遗憾的是无法对其进行反序列化,因此无法使用此SerDe将数据加载到Hive中。 总结 此解决方案假定JSON输入的结构为每个JSON对象一行。那么,如何使用跨多行的JSON对象?GitHub上有一个项目( https://github.com/alexholmes/json-mapreduce)可以在单个JSON文件上进行多个输入拆分,此方法可搜索特定的JSON成员并检索包含的对象。 你可以查看名为hive-json-serde的Google项目,该项目可以同时支持序列化和反序列化。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |