在Mapreduce 的程序设计中,有时候会遇到多文件输出的使用。job 定义的FileOutputFormat 默认只有一个输出,如果是多机实现,该目录下包含多个类似part-000xx 的文件。在mapreduce中一个reducer对一个recordwriter,recordwriter只负责最后数据的写入,因此文件的个数与job指定的reduce个数一致。
但是我们需要多文件输出怎么处理,目前总结为两种方法:
第一种方法:使用MultipleOutputFormat
MultipleOutputFormat 只是一个抽象的类,MultipleTextOutputFormat 和MultpleSequenceFileOutputFormat 是它的两个具体实现。顾名思义,MultipleTextOutputFormat 的多个文件输出都是TextOutputFormat,即一行一对的文本格式,而MultpleSequenceFileOutputFormat 的多个文件输出都是SequenceFile,即二进制文件格式。
具体实现方法如下:
实现方式可以直接继承MultipleOutputFormat 抽象累,也可直接继承MultipleTextOutputFormat类重写generateFileNameForKeyValue方法,如果输出文件为二进制格式则直接继承MultpleSequenceFileOutputFormat 类。我这里输出为text格式,所以直接继承MultipleTextOutputFormat类,代码如下:
最后在jobconfig中配置输出格式:
这种方式实现其实是通过实现输出文件指定目录,如果直接按照key输出在同一个文件,则generateFileNameForKeyValue 返回值直接修改为return key。
第二种方式:使用MultipleOutputs
MultipleOutputs 是在job 指定的output 输出的基础上,新增加一些额外的输出,与MulitpleOutputFormat 相比,它才是真正意义上的多文件输出。分两种情况:
附加单个输出文件,调用MultipleOutputs 的addNamedOutput 方法, 则是添加一个附加文件OutputFormat 格式及key, value 类型都可以自定义;代码实现如下:
另一种方式是多个文件输出,在reduce阶段增加一些输出:
在mapreduce中设计了Speculator接口作为推断执行的统一规范,DefaultSpeculator作为一种服务在实现了Speculator的同时继承了AbstractService,DefaultSpeculator是mapreduce的默认实现。
据测试结果得知,在使用了206个EC2节点的情况下,Spark将排序用时缩短到了23分钟。这意味着在使用十分之一计算资源的情况下,相同数据的排序上,Spark比MapReduce快3倍!
这篇文章将介绍基于物品的协同过滤推荐算法案例在TDWSpark与MapReudce上的实现对比,相比于MapReduce,TDWSpark执行时间减少了66%,计算成本降低了40%。
过去两年,Hadoop社区对MapReduce做了很多改进,但关键的改进只停留在了代码层,Spark作为MapReduce的替代品,发展很快,其拥有来自25个国家超过一百个贡献者,社区非常活跃,未来可能取代MapReduce。
YARN本质上是Hadoop的新操作系统,突破了MapReduce框架的性能瓶颈。Murthy认为Hadoop和YARN的组合是企业大数据平台致胜的关键。
【聚焦搜索,数智采购】2021第一届百度爱采购数智大会即将于5月28日在上海盛大开启!
本次大会上,紫晶存储董事、总经理钟国裕作为公司代表,与中国—东盟信息港签署合作协议
XEUS统一存储已成功承载宣武医院PACS系统近5年的历史数据迁移,为支持各业务科室蓬勃扩张的数据增量和访问、调用乃至分析需求奠定了坚实基础。
大兆科技全方面展示大兆科技在医疗信息化建设中数据存储系统方面取得的成就。
双方相信,通过本次合作,能够使双方进一步提升技术实力、提升产品品质及服务质量,为客户创造更大价值。