MR的相关配置
mapred-site.xml
set mapreduce.jobhistory.done-dir=存放已经运行完的作业目录
set mapreduce.jobhistory.intermediate-done-dir=存放正在运行的作业目录
set mapreduce.jobhistory.joblist.cache.size=200 # web ui上显示的作业个数
set yarn.app.mapreduce.am.staging-dir=缓存目录
mr的 container 配置. 参考
# mapred-site.xml
set mapreduce.map.java.opts=-Xmx1024m -Xms512M # container 执行map任务 上的java进程的内存大小 mx 最大 ,ms 最小
set mapreduce.reduce.java.opts=-Xmx1024m -Xms512M # 同上 reduce 任务
set mapreduce.map.memory.mb=1024 # container 总分配给map 程序的内存
set mapreduce.reduce.memory.mb=1024 # container 总分配给 reduce 的内存
# yarn-site.xml
set yarn.scheduler.maximum-allocation-mb=2048 # 分配给 container 的最大内存
set yarn.scheduler.minimum-allocation-mb=1024 # 分配给 container 的最小内存
set yarn.nodemanager.vmem-pmem-ratio=5 # 虚拟内存比率
set yarn.nodemanager.vmem-check-enabled=true # 是否检查虚拟内存
使用python 执行 MR
Python版本需要通过hadoop stearm 的支持,通过标准输入输出流来执行
执行
hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar <-D key=value> -input /input/ncdc/1901 -output output -mapper "max_temperature_map.py" -reducer "max_temperature_reduce.py" -file /Users/alen/WorkSpace/hadoop-project/python/ncdc/*
参数解释:
- jar 指定hadoop额外加载的扩展包
- -D 指定参数
- mapreduce.map.maxattempts 指定 map 的最大重试次数
- mapreduce.reduce.maxattempts 指定 reduce 的最大重试次数
- mapreduce.output.fileoutputformat.compress 指定reduce 输出是否需要压缩 true / false
- mapreduce.output.fileoutputformat.compress.codec 指定 reduce 输出压缩的类名
- mapreduce.map.output.compress 指定 map 输出是否需要压缩
- mapreduce.map.output.compress.codec 执行 map 输出压缩类名
- mapred.job.name 执行 作业名称
- mapred.map.tasks / mapreduce.job.maps 每个job运行map task 的数量
- mapred.reduce.tasks / mapreduce.job.reduces 每个Job运行reduce task的数量,如果指定为0,则意味着提交了一个map only的任务
- stream.map.input.field.separator 指定map输入时的分隔符,默认为"
- stream.map.output.field.separator 指定map输出时使用的key/value分隔符,默认为"
- stream.reduce.input.field.separator 指定reduce输入时的分隔符,默认为"
- stream.reduce.output.field.separator 指定reduce输入时的分隔符,默认为"
- stream.num.map.output.key.fields 指定map输出中第几个分隔符作为key和value的分隔点,默认为1
- stream.num.reduce.output.fields 指定reduce输出中第几个分隔符作为key和value的分隔点,默认为1
- stream.non.zero.exit.is.failure=false/true 指定当mapper和reducer未返回0时,hadoop是否该认为此任务执行失败。默认为true。当mapper和reducer的返回值不是0或没有返回值时,hadoop将认为该任务为异常任务,将被再次执行,默认尝试4次都不是0,整个job都将失败。因此,如果我们在编写mapper和reducer未返回0时,则应该将该参数设置为false,否则hadoop streaming任务将报出异常。
- -input 储存在HDFS中的输入数据源
- -output 指定输出的路径。默认会输出在HDFS当前用户的目录上,如 /user/alen/output
- -mapper 指定处理mapper 的python文件。必须使用引号包起来,切具备执行权限
- -reducer 指定处理reducer 的python文件,同上
- -file 指定mapper 和 reducer的文件所在,在运行时将会从本地目录拷贝到HDFS中
- -partitioner 自定义的partitionerjava类