1.如何在Hadoop上编写MapReduce程序用户配置并将一个Hadoop作业提到Hadoop框架中 , Hadoop框架会把这个作业分解成一系列map tasks 和reduce tasks 。
Hadoop框架负责task分发和执行 , 结果收集和作业进度监控 。在编写MapReduce程序时 , 用户分别通过InputFormat和OutputFormat指定输入和输出格式 , 并定义Mapper和Reducer指定map阶段和reduce阶段的要做的工作 。
在Mapper或者Reducer中 , 用户只需指定一对key/value的处理逻辑 , Hadoop框架会自动顺序迭代解析所有key/value , 并将每对key/value交给Mapper或者Reducer处理 。表面上看来 , Hadoop限定数据格式必须为key/value形式 , 过于简单 , 很难解决复杂问题 , 实际上 , 可以通过组合的方法使key或者value(比如在key或者value中保存多个字段 , 每个字段用分隔符分开 , 或者value是个序列化后的对象 , 在Mapper中使用时 , 将其反序列化等)保存多重信息 , 以解决输入格式较复杂的应用 。
2.2 用户的工作 用户编写MapReduce需要实现的类或者方法有:(1) InputFormat接口 用户需要实现该接口以指定输入文件的内容格式 。该接口有两个方法 public interface InputFormat
getRecordReader函数提供一个用户解析split的迭代器对象 , 它将split中的每个record解析成key/value对 。Hadoop本身提供了一些InputFormat:(2)Mapper接口 用户需继承Mapper接口实现自己的Mapper,Mapper中必须实现的函数是 void map(K1 key, V1 value, OutputCollector
Hadoop本身提供了一些Mapper供用户使用:(3)Partitioner接口 用户需继承该接口实现自己的Partitioner以指定map task产生的key/value对交给哪个reduce task处理 , 好的Partitioner能让每个reduce task处理的数据相近 , 从而达到负载均衡 。Partitioner中需实现的函数是 getPartition( K2 key, V2 value, int numPartitions) 该函数返回
用户如果不提供Partitioner,Hadoop会使用默认的(实际上是个hash函数) 。(4)Combiner Combiner使得map task与reduce task之间的数据传输量大大减小 , 可明显提高性能 。
大多数情况下 , Combiner与Reducer相同 。(5)Reducer接口 用户需继承Reducer接口实现自己的Reducer,Reducer中必须实现的函数是 void reduce(K2 key, Iterator
每个reduce task将其数据写入自己的文件 , 文件名为part-nnnnn , 其中nnnnn为reduce task的ID 。Hadoop本身提供了几个OutputFormat:3. 分布式缓存 Haoop中自带了一个分布式缓存 , 即DistributedCache对象 , 方便map task之间或者reduce task之间共享一些信息 , 比如某些实际应用中 , 所有map task要读取同一个配置文件或者字典 , 则可将该配置文件或者字典放到分布式缓存中 。
【mapreduce怎么写】
- 175000元大写怎么写
- 英语f的四线三格怎么写
- 网页介绍ppt怎么写
- 怎么写季度市盈率公式
- 货拉拉叫车怎么叫 怎么叫货拉拉拉货
- 骁怎么读 陆霆骁的骁怎么读
- lol位置英文缩写 LOL位置缩写
- 闽南返亲宴喜帖怎么写
- 蘑菇的音标怎么写
- 冷艳英语怎么写