加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?

发布时间:2018-09-21 21:45:03 所属栏目:教程 来源:赵钰莹
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 在本章的第一章节先容中,我们简朴相识了Mapreduce数据序列化的观念,以及其对付XML和JSON名目并不友爱。本节作为《Hadoop从入门到能干》大型专题的第三章第二节将教各人如安在Mapreduce中行使XML和JSON两
副问题[/!--empirenews.page--] 【新品产上线啦】51CTO播客,随时随地,碎片化进修

在本章的第一章节先容中,我们简朴相识了Mapreduce数据序列化的观念,以及其对付XML和JSON名目并不友爱。本节作为《Hadoop从入门到能干》大型专题的第三章第二节将教各人如安在Mapreduce中行使XML和JSON两大常见名目,并说明较量最得当Mapreduce大数据处理赏罚的数据名目。

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?

3.2.1 XML

XML自1998年降生以来就作为一种数据名目来暗示呆板和人类都可读的数据。它成为体系之间数据互换的通用说话,此刻被很多尺度所回收,譬喻SOAP和RSS,而且被用作Microsoft Office等产物的开放数据名目。

MapReduce和XML

MapReduce绑缚了与文本一路行使的InputFormat,但没有支持XML,也就是说,原生Mapreduce对XML异常不友爱。在MapReduce中并行处理赏罚单个XML文件很棘手,由于XML不包括其数据名目标同步标志。

题目

但愿在MapReduce中行使大型XML文件,并可以或许并行拆分和处理赏罚。

办理方案

Mahout的XMLInputFormat可用于MapReduce处理赏罚HDFS中的XML文件。 它读取由特定XML开始和竣事标志脱离的记录,此技能还表明白如安在MapReduce中将XML作为输出发送。

MapReduce不包括对XML的内置支持,因此我们转向另一个Apache项目——Mahout,一个提供XML InputFormat的呆板进修体系。 要相识XML InputFormat,你可以编写一个MapReduce功课,该功课行使Mahout的XML输入名目从Hadoop的设置文件(HDFS)中读取属性名称和值。

第一步是对功课举办设置:

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?

Mahout的XML输入名目很简略,我们必要指定文件搜刮简直切开始和竣事XML标志,并行使以下要领拆分文件(并提取记录):

  • 文件沿着HDFS块界线分成不持续的部门,用于数据当地化。
  • 每个map使命都在特定的输入拆分上运行,map使命寻求输入拆分的开始,然后继承处理赏罚文件,直到第一个xmlinput.start。
  • 一再发出xmlinput.start和xmlinput.end之间的内容,直到输入拆分的末端。

接下来,你必要编写一个映射器来行使Mahout的XML输入名目。Text表单已提供XML元素,因此必要行使XML理会器从XML中提取内容。

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?
表3.1 行使Java的STAX理会器提取内容

该map具有一个Text实例,该实例包括start和end标志之间数据的String暗示。在此代码中,我们可以行使Java的内置Streaming API for XML(StAX)理会器提取每个属性的键和值并输出。

假如针对Cloudera的core-site.xml运行MapReduce功课并行使HDFS cat呼吁表现输出,将看到以下内容:

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?

此输出表现已乐成行使XML作为MapReduce的输入序列化名目。不只云云,还可以支持庞大的XML文件,由于输入名目支持拆分XML。

写XML

当可以正常读XML之后,我们要办理的就是怎样写XML。 在reducer中,挪用main reduce要领之前和之后城市产生回调,可以行使它来发出开始和竣事标志,如下所示。

MapReuce中对大数据处理赏罚最吻合的数据名目是什么?
MapReuce中对大数据处理赏罚最吻合的数据名目是什么?
表3.2 用于发出开始和竣事标志的reducer

这也可以嵌入到OutputFormat中。

Pig

假如想在Pig中行使XML,Piggy Bank library(用户孝顺的Pig代码库)包括一个XMLLoader。其事变方法与此技能很是相似,可捕捉开始和竣事标志之间的全部内容,并将其作为Pig元组中的单字节数组字段提供。

Hive

今朝没有步伐在Hive中行使XML,必需写一个自界说SerDe。

总结

Mahout的XmlInputFormat可辅佐行使XML,但它对开始和竣事元素名称的准确字符串匹配很敏感。假如元素标志包括具有变量值的属性,无法节制元素天生可能也许导致行使XML定名空间限制符,则此要领不行用。

假如可以节制输入中的XML,则可以通过在每行行使单个XML元向来简化此操练。这应承行使内置的MapReduce基于文本的输入名目(譬喻TextInputFormat),它将每一行视为记录并拆分。

值得思量的另一个选择是预处理赏罚步调,可以将原始XML转换为每个XML元素的单独行,可能将其转换为完全差异的数据名目,譬喻SequenceFile或Avro,这两种名目都办理了拆分题目。

此刻,你已经相识怎样行使XML,让我们来处理赏罚另一种风行的序列化名目JSON。

3.2.2 JSON

JSON共享XML的呆板和人类可读特性,而且自21世纪初以来就存在。它比XML简捷,可是没有XML中富厚的范例和验证成果。

假若有一些代码正在从流式REST处事中下载JSON数据,而且每小时城市将文件写入HDFS。因为下载的数据量很大,因今天生的每个文件巨细为数千兆字节。

假如你被要求编写一个MapReduce功课,必要将大型JSON文件作为输入。你可以将题目分为两部门:起首,MapReduce没有与JSON一路行使的InputFormat; 其次,怎样支解JSON?

图3.7表现了拆分JSON题目。 想象一下,MapReduce建设了一个拆分,如图所示。对此输入拆分举办操纵的map使命将执行对输入拆分的搜刮,以确定下一笔记录的开始。对付诸如JSON和XML之类的文件名目,因为穷乏同步标志或任何其他标识记录开头,因此知道下一笔记录何时开始是很有挑衅性的。

JSON比XML等名目更难支解成差异的段,由于JSON没有token(如XML中的竣事标志)来暗示记录的开头或末了。

题目

但愿在MapReduce中行使JSON输入,并确保可觉得并发读取分区输入JSON文件。

办理方案

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读