赞
踩
处理文件较大时候,我们一般会对文件进行压缩,有时候需要输入或者输出为压缩文件格式。
当输入为lzo格式时候需要加入参数:
-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat
注意的是在hadoop中使用lzo的话,偏移位需要加1。
当需要输出一个压缩文件的时候加入参数:
-jobconf mapred.output.compress=true
-jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec
有时候我们数据量太大,设计一个reduce就会执行很慢很慢(几个小时),但是我们如果改为多个reduce,比如10个,在分数据的时候就会随机分,这样就不能实现全局排序,咋办呢??
如果我们知道数据的一个大致分布,就可以设计一个if else组合去根据数据的值分给reduce模块。
方法:只需要在map输出数据加一列给shuffle就可以,加一个参数选择reduce参考的列:
-jobconf num.key.fields.for.partition=1
同时你要选定一下,sort参考的列:
-jobconf stream.num.map.output.key.fields=2
这里还要加一个必备插件:
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
默认hadoop是按照字符方式排序
这里我们可以改为数字方式排序
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D mapred.text.key.comparator.options=-n \
这里-n代表数字方式排序,从小到大,如果你想从大到小,可以自己写一个做差的方法。
-D mapreduce.reduce.shuffle.input.buffer.percent=0.12\
-D mapreduce.job.reduce.slowstart.completedmaps=0.95\
语法错误,code为1就是语法错误~~自己线下测试下,可能是hadoop上没有你调用的包。
出现以下错误:
Timed out after 600 secs
大概意思就是超时了,mapreduce长时间没有输出东西,或者读入下一行信息,可能有以下原因:
1、逻辑错误,出现死循环,导致一直没有输出或者返回~~~
2、mapreduce脚本里有预处理数据,比如需要加载一些文件,加载这些文件时超时了,这个简单,可以通过改变参数mapreduce.task.timeout即可。
注意单位是毫秒(1200000为1200s)
-D mapreduce.task.timeout=1200000\
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.
内存设置不足,看看是map失败还是red失败,我red设置的是4GB,这样的话改高一点就行了。
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#3
at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
几种解决方法:
1、改reduce数量
把reduce设计的大一些…一般就可以了
2、限制shuffle 比例
*-D mapreduce.reduce.shuffle.memory.limit.percent=0.15 *
3、增加combinear
-combiner red_site_doc.py \
可能内存满了
清除一下内存空间把
hadoop fs rmr -rmTrash /user/authrank_offline_z/.Trash/*
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。