使用cacheArchive的方式优化hadoop job

一个hadoop job 有很多失败的task


经查,该job依赖于很大的外部配置文件,大概有200MB左右的分词词典及其他配置文件。该job的启动方式为:

/home/work/software/hadoop/bin/hadoop jar /home/work/software/hadoop/contrib/streaming/hadoop-streaming.jar -D mapred.reduce.tasks=0 -D mapred.job.priority=VERY_HIGH -D mapred.job.name='user:description' -input /home/user/input  -output /home/user/output -mapper 'sh run.sh' -file /home/user/run.sh -file /home/user/bin.tar.gz -file /home/user/Conf.tar.gz -file /home/user/data.tar.gz

run.sh脚本里面负责对/home/user/Conf.tar.gz 和 /home/user/data.tar.gz 进行解压缩




红线标识的文件为该job依赖的大数据配置文件。使用这种方式启动job存在的问题如下:
比如1台机器上有N个map槽,如果是-file的话,那么每个map槽都会下载/home/user/Conf.tar.gz 和 /home/user/data.tar.gz ,会造成1台机器多次下载相同的数据,效率低下。

而cacheArchive方式是1台机器只下载一次,然后每个map槽用软链接 链接到/home/user/Conf.tar.gz 和 /home/user/data.tar.gz ,因此,就可以避免多次重复下载数据,提高了效率,而且,如果是tgz之类的文件,上传到hdfs后,-cacheArchive方式框架会自动解压数据。

因此,上面的job启动方式可以优化为如下方式:

第一步,上传大文件到HDFS
hadoop fs -put /home/user/data.tar.gz hdfs://host:fs_port/user/data.tar.gz
hadoop fs -put /home/user/Conf.tar.gz hdfs://host:fs_port/user/Conf.tar.gz

第二步,修改启动shell命令
/home/work/software/hadoop/bin/hadoop jar /home/work/software/hadoop/contrib/streaming/hadoop-streaming.jar -D mapred.reduce.tasks=0 -D mapred.job.priority=VERY_HIGH -D mapred.job.name='user:description' -input /home/user/input  -output /home/user/output -mapper 'sh run.sh'    -file /home/user/run.sh -file /home/user/bin.tar.gz -cacheArchive hdfs://host:fs_port/user/Conf.tar.gz#Conf -cacheArchive hdfs://host:fs_port/user/data.tar.gz#data

第三步:修改解压缩脚本:



搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值