Hadoop Mapreduce 一些常见问题 (python用户~~)

1 啥是mapreduce

2 基本用法

3 Hadoop一些常用技巧

3.1 lzo压缩文件作为输入或者输出

处理文件较大时候,我们一般会对文件进行压缩,有时候需要输入或者输出为压缩文件格式。
当输入为lzo格式时候需要加入参数:

-inputformat com.hadoop.mapred.DeprecatedLzoTextInputFormat

注意的是在hadoop中使用lzo的话,偏移位需要加1。

当需要输出一个压缩文件的时候加入参数:

-jobconf mapred.output.compress=true 
-jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec

3.2 自定义renduce方向

有时候我们数据量太大,设计一个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

3.3 按数字方式排序

默认hadoop是按照字符方式排序
这里我们可以改为数字方式排序

-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D mapred.text.key.comparator.options=-n \

这里-n代表数字方式排序,从小到大,如果你想从大到小,可以自己写一个做差的方法。

3.4

    -D mapreduce.reduce.shuffle.input.buffer.percent=0.12\
    -D mapreduce.job.reduce.slowstart.completedmaps=0.95\

4报错

4.1 错误代码1

语法错误,code为1就是语法错误~~自己线下测试下,可能是hadoop上没有你调用的包。

4.2 提示超时

出现以下错误:

Timed out after 600 secs

大概意思就是超时了,mapreduce长时间没有输出东西,或者读入下一行信息,可能有以下原因:
1、逻辑错误,出现死循环,导致一直没有输出或者返回~~~
2、mapreduce脚本里有预处理数据,比如需要加载一些文件,加载这些文件时超时了,这个简单,可以通过改变参数mapreduce.task.timeout即可。
注意单位是毫秒(1200000为1200s)

-D mapreduce.task.timeout=1200000\

4.3 内存不够

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,这样的话改高一点就行了。

4.4 error in shuffle in fetcher#3

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 \

4.5 断开的管道

可能内存满了
(https://img-blog.csdnimg.cn/6296f5a6f9cb49f181ba8c7a85811050.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ2xvdWRDdmVy,size_20,color_FFFFFF,t_70,g_se,x_16)

清除一下内存空间把
hadoop fs rmr -rmTrash /user/authrank_offline_z/.Trash/*

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值