hadoop进阶2_2.x

HDFS是Hadoop分布式文件系统的简称,由若干台计算机组成,用于存放PB、TB数量级以上的文件,每份文件可以有多个副本,所以HDFS是一个具有高冗余、高容错的文件系统。

Hadoop系统架构图

hadoop2.0以后的版本移除了原有的JobTracker和TaskTracker,改由Yarn平台的ResourceManager负责集群中所有资源的统一管理和分配,NodeManager管理Hadoop集群中单个计算节点。

YARN的设计减少了JobTracker的资源消耗,减少了Hadoop1.0中发生单点故障的风险。我们还可以在YARN平台上运行Spark和Storm作业,充分利用资源。

MapReduce作业是一种大规模数据集的并行计算的编程模型。我们可以将HDFS中存放的海量数据,通过MapReduce作业进行计算,得到目标数据!

MapReduce 的四个阶段:


Split阶段:分片

Map阶段(需要编码)

Shuffle阶段

Reduce阶段(需要编码)


理想的输入文件:

由于NameNode内存有限,大量的小文件会给hdfs带来性能上的问题。故Hdfs适合存放大文件,对于大量小文件,可以采用压缩、合并小文件的优化策略。例如,设置文件输入类型为CombineFileInputFormat格式


本地优化——combine

数据经过Map端输出后会进行网络混淆,经Shuffle后进行Reduce,在大量数据量的情况下可能会造成巨大的网络开销。故可以在本地先按照KEY先行一轮排序与合并,再进行网络混淆,这个过程就是






一个MapReduce作业中,以下三者的数量总是相等的:


Partitionerd的数量

Reduce任务的数量

最终输出文件(part -r-00000)


在一个Reducer中,所有数据都会被按照key值升序排序,故如果part输出文件中包含key值,则这个文件一定是有序的。



Reducer任务数量

在大多数的情况下,如果只设置1个reduce任务,那么在reduce阶段,整个集群只有该节点在运行reduce任务,其他节点都将被闲置,效率十分低下。故建议将reduce任务数量设置成一个较大的值(最大值是72)


一个节点上的reduce任务数并不像Map任务数那样受多个因素制约。

可以通过调节参数mapred.reduce.tasks

可以在代码中调用job.setNumReduceTasks(int n)


总结:

分片输入——split

由于NameNode内存限制,hdfs适合存放大文件

对于小文件可采用压缩输入格式CombineFileInputFormat\

dfs.block.size可调节块大小

Map任务数量和mapred.map.tasks和mapred.min.split.size参数有关


本地合并Combine:数据在Mapper输出后会进行和Reduce相似的操作,减少网络开销

job.setCombinerClass(MyReduce.class)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值