# MR_python
**Repository Path**: francisdu/MR_python
## Basic Information
- **Project Name**: MR_python
- **Description**: 利用Hadoop Streaming 编写 Python脚本 实现mapreduce任务
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-04-26
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 项目结构
|hdfs
|____hdfs.py 使用python连接HDFS
|wordcount
|____map.py map阶段
|____reduce.py reduce阶段
|____reduce_iter.py 迭代的方式实现reduce
|____run.sh 提交job的脚本
|____README.md
### 生产环境:
python 2.7
hadoop 2.7.6
pycharm 2018.1
## Hadoop Streaming
- Hadoop Streaming:
Hadoop Streaming最大的好处是让任何语言编写的map, reduce程序能够在hadoop集群上运行;
map / reduce程序只要遵循从标准输入stdin读,写出到标准输出stdout即可;
其次,Hadoop Streaming容易进行单机调试,通过管道前后相接的方式就可以模拟streaming,
在本地完成map/reduce程序的调试
本地测试:
cat word/* |
python map.py |
sort |
python reduce.py
- hadoop Streaming的局限 :/usr/local/src/hadoop-1.2.1/bin/hadoop jar hadoop-streaming.jar \
###### 普通选项:
-- 修改本地临时目录 :
-D dfs.data.dir=/tmp
-- 指定额外的本地临时目录
-D mapred.local.dir=/tmp/local
-D mapred.system.dir=/tmp/system
-D mapred.tmp.dir=/tmp/tmp
-- 指定作业名
-D mapred.job.name=”Test001”
-- 指定只有map的作业
-D mapred.reduce.tasks=0
-- 指定reducer个数
-D mapred.reduce.tasks=2
-- 指定mapper个数
-D mapred.map.tasks=2
-- 指定Mapper输出的key,value分隔符
-D stream.map.output.field.separator=.
-D stream.num.map.output.key.fields=4
-- 指定reducer输出的value, key分隔符
-D stream.reduce.output.field.seperator=.
-D stream.num.reduce.output.key.fields=4
-- Inputformat如何分行,默认'\n'
-D stream.map.input.field.seperator
-- 作业优先级
-D mapred.job.priority=HIGH
-- 最多同时运行的map任务数
-D mapred.job.map.capacity=5
-- 最多同时运行的reduce任务数
-D mapred.job.reduce.capacity=3
-- Task没有响应(输入输出)的最大时间
-D mapred.task.timeout=6000
-- Map的输出是否压缩
-D mapred.compress.map.output=True
-- Map的输出的压缩方式
-D mapred.map.output.comression.codec=
--Reduce的输出是否压缩
-D mapred.output.compress=True
-- Reducer的输出的压缩方式
-D mapred.output.compression.codec=