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项目,该项目可以同时支持序列化和反序列化。 正如你所看到的,在MapReduce中行使XML和JSON长短常糟糕的,而且对怎样机关数据有严酷要求。MapReduce对这两种名目标支持也很伟大且轻易堕落,由于它们不得当拆分。显然,必要查察具有内部支持且可拆分的更换文件名目。 下一步是研究更得当MapReduce的伟大文件名目,譬喻Avro和SequenceFile。 3.3 大数据序列化名目 当行使scalar或tabular数据时,非布局化文本名目很有用。诸如XML和JSON之类的半布局化文本名目可以对包罗复合字段或分层数据的伟大数据布局举办建模。可是,当处理赏罚较大数据量时,我们更必要具有紧凑序列化表单的序列化名目,这些名目自己支持分区并具有模式演变成果。 在本节中,我们将较量最得当MapReduce大数据处理赏罚的序列化名目,并跟进怎样将它们与MapReduce一路行使。 3.3.1 较量SequenceFile,Protocol Buffers,Thrift和Avro 按照履历,在选择数据序列化名目时,以下特性很是重要:
表3.1较量了风行的数据序列化框架,以相识它们怎样彼此叠加。以下接头提供了有关这些技能的其他配景常识。 ![]() 表3.1数据序列化框架的成果较量 让我们更具体地看一下这些名目。 SequenceFile 建设SequenceFile名目是为了与MapReduce、Pig和Hive一路行使,因此可以很好地与全部器材集成。弱点首要是缺乏代码天生和版本节制支持,以及有限的说话支持。 Protocol Buffers (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |