Hadoop2-MapReduce(2)

新的API:


//Mapper

MyMapper extends Mapper<....>

map(LongWritable key,Text value,Context context) throws ...{

....

context.write(new Text(year),new IntWriteable(..));

}


//Reducer

MyReducer extends Reducer<....>

context.write(key,new IntWritable(..));


//main

Job job=new Job();

job.setJarByClass(XX.class)


横向扩展  scaling out

数据分布存储在HDFS中,允许Hadoop将MapReduce计算移到存储有部

分数据的各台机器上。


Hadoop将Job分成若干个小任务task来执行。包括两类任务:map,reduce


两类节点控制作业执行过程:

1.jobtracker

通过调度tasktracker运行的任务,协调所有运行在系统上的作业。


2.tasktracker

运行任务同时将运行进度报告发给jobtracker,jobtracker记录没想作业

任务的整体进度情况。如果一个任务失败,jobtracker可以在另外一个tasktracker

节点重新调度任务。


输入分片 input slit: Hadoop将MapReduce输入数据划分成等长的小数据块。

Hadoop为每个分片构建一个map任务,map任务处理分片中记录。


分片为了实现负载均衡,更快的处理,获得最佳性能。(数据本地化优化 data locality optimization)


合理的分片趋向于HDFS一个块大小,默认64MB。


map将输出(中间)结果写入本地硬盘,而非HDFS。


单个Reduce任务的输入通常来自于所有mapper的输出。

map输出通过网络传输发送到运行reduce任务的节点。

数据在reduce端合并,然后reduce函数处理,输出通常

存储在HDFS中以实现可靠存储。

对于reduce输出的HDFS块,第一个复本存储在本地节点,

其他复本存在其他节点。


多个reduce任务时,每个map任务都会为其输出进行分区 partition,

为每个reduce任务简历一个分区,键对应的值都在同一个分区中。

分区函数控制分区。


map和reduce之间的数据流成为shuffle


也有可能没有任务reduce任务,唯一非本地节点的数据传输时map任务将结果写入HDFS。


combiner:

针对map任务的输出制定一个合并函数 combiner。合并函数的输出作为

reduce任务的输入。(map任务端预处理部分数据)

jobConf.setCombinerClass(XX.class);


Hadoop的Streaming

使用Unix标准流作为Hadoop和应用程序之间的接口。



Hadoop的Pipes

是MapReduce的C++接口代称。使用套接字作为tasktracker与C++版本的

map函数或reduce函数的进程之间的通道。未使用JNI。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值