python 实现Hadoop的partitioner和二次排序
来源:互联网 发布:淘宝手机店铺装修尺寸 编辑:程序博客网 时间:2024/06/06 19:58
我们有以下应用场景:
a.txt,b.txt两个文件,其中,由于两个文件的数据量非常庞大,导致我们使用一个reduce任务搞不定,因此需要设定为2个reduce任务。
但业务部提出的要求是要对两个文件进行排序。这样的话,对于多reduce任务,使用原有的排序方式是不可用的。因此,
我们进行对Partitioner二次排序。
我们采用python 来实现mapreduce :
map.py:
#!/usr/bin/python
import sys
base_count = 10000
for line in sys.stdin:
key,val = line.strip().split('\t')
new_key=base_count + int(key)
red_idx=1
if new_key < (10100+10000)/2:
red_idx = 0
print "%s\t%s\t%s" % (red_idx,new_key,val)
red.py:
#!/usr/bin/python
import sys
base_value=10000
for line in sys.stdin:
red_idx,key,val = line.strip().split('\t')
print "%s\t%s\t%s" % red_idx,(str(int(key) - base_value),val)
使用shell脚本调用我们的map,reduce:
#!/usr/bin/bash
HADOOP_CMD="/usr/java/hadoop/bin/hadoop"
STREAM_JAR_PATH="/usr/java/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.2.0.
jar"
INPUT_FILE_PATH_1="/user/hadoop/a.txt"
INPUT_FILE_PATH_2="/user/hadoop/b.txt"
OUTPUT_PATH="/user/hadoop/output"
$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH
$HADOOP_CMD jar $STREAM_JAR_PATH \
-input $INPUT_FILE_PATH_1,$INPUT_FILE_PATH_2 \
-output $OUTPUT_PATH \
-mapper "python map.py " \
-reducer "python red.py " \
-jobconf "mapred.reduce.tasks=2" \
-jobconf "stream.num.map.output.key.fields=2" \
-jobconf "num.key.fields.for.partition=1" \
-jobconf "mapred.job.name=sortfile_demo" \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-file ./map.py \
-file ./red.py \
这里为了保证二次排序,需要设定如下参数:
-jobconf "mapred.reduce.tasks=2" ###设定reduce的任务数量
-jobconf "stream.num.map.output.key.fields=2" ####设定map输出的前两个字段作为key
-jobconf "num.key.fields.for.partition=1" ####在设定的key的字段中,我们把第一个字段作为partition
-jobconf "mapred.job.name=sortfile_demo" ####设定job的名字
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner ###引入包
- python 实现Hadoop的partitioner和二次排序
- python 实现Hadoop的partitioner和二次排序
- python 实现Hadoop的partitioner和二次排序
- c++&&python实现Hadoop Streaming的partitioner和模块化
- MapReduce里面的二次排序、组排序和Partitioner
- 【hadoop二次排序】Partitioner, SortComparator and GroupingComparator
- Hadoop和Spark分别实现二次排序
- Hadoop和Spark分别实现二次排序
- 使用Hadoop和Spark实现二次排序
- Hadoop 二次排序实现
- hadoop 二次排序join的实现
- hadoop的二次排序
- hadoop二次排序实现join
- hadoop二次排序、分组、排序和分区
- hadoop的partitioner
- Hadoop的Partitioner
- Hadoop里的Partitioner
- Hadoop:Partitioner的应用
- numpy 常用基本库
- spark性能优化
- Android apk安全监测及加固方案
- SSH 在本地执行远程机器上的命令
- solr6.6环境搭建
- python 实现Hadoop的partitioner和二次排序
- SpringMVC的拦截器问题
- android 自定义纯数字键盘输入
- 瀑布流
- struts2学习中遇到的坑之${pageContext.request.contextPath}错误
- myeclipse用ctrl+点击不能查看servlet源码
- tomcat 基于maven plugins实现热部署
- 从服务器下载资源一
- ScrollView上拉加载实现