MR进阶实践1:  -file 分发多个文件

【-file 适合场景】分发文件在本地,小文件

-file分发原理
run.sh文件: 通过多个-file, 将多个本地文件分发到Hadoop集群中的compute node
HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
OUTPUT_PATH="/02_filedistribute_output"
$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
# job1: use -file to distribute 3 local file to cluster
# these 3 files will bestored in the same directory in each datanode
$HADOOP_CMD jar$STREAM_JAR_PATH \-input $INPUT_FILE_PATH \-output $OUTPUT_PATH \-mapper "python map.py mapper_funcwhite_list" \-reducer "python red.pyreducer_func" \-file ./map.py \-file ./red.py \-file ./white_list

修改reducer个数为三个 (第一种 -jobconf)
HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
OUTPUT_PATH="/02_filedistribute_output"
$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
# job1: use -file todistribute 3 files
# these 3 files will be stored in the same directory in each datanode
$HADOOP_CMD jar$STREAM_JAR_PATH \-input $INPUT_FILE_PATH \-output $OUTPUT_PATH \-mapper "python map.py mapper_funcwhite_list" \
    -reducer "pythonred.py reducer_func" \
    -jobconf “mapred.reduce.tasks=3” \  # deprecated option, not suggested-file ./map.py \-file ./red.py \-file ./white_list

修改reducer为3个(第二种  -D)
HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
OUTPUT_PATH="/02_filedistribute_output"
$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
# job1: use -file todistribute 3 files
# these 3 files will bestored in the same directory in each datanode
$HADOOP_CMD jar$STREAM_JAR_PATH \-D mapred.reduce.tasks=3 \-input $INPUT_FILE_PATH \-output $OUTPUT_PATH \-mapper "python map.py mapper_funcwhite_list" \
    -reducer "pythonred.py reducer_func" \-file ./map.py \-file ./red.py \-file ./white_list

datanode上观察分发的文件
1、作业专属目录
作业开始后,会创建专属目录, taskTracker/root/jobcache/job_xxxxxxxx
2、分发给作业的文件
被放置在同一目录,taskTracker/root/jobcache/job_xxxx/jars
3、每一个正在运行的mapper, reducer构建attempt目录
每一个运行的mapper, reducer会构建一个attempt目录,taskTracer/root/jobcache/job_xxx/attempt_yyyyy/work ,  生成符号链接文件,指向jars中的具体文件

MR进阶实践2: -cacheFile 将放在HFDS上的文件分发给计算节点

1、将mapreduce程序运行时需要的某一个辅助文件提前上传到HDFS
例如:将实践1中的white_list上传到HDFS,本地文件在上传后直接删除
# hadoop fs -put ./white_list /
# rm -rf ./white_list

2、修改run.sh, 设置-cacheFile
HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH="/03_cachefiledistribute_input/The_Man_of_Property.txt"
OUTPUT_PATH="/03_cachefiledistribute_output"
$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
# job2: use -cacheFileto distribute HDFS file to compute node
$HADOOP_CMD jar$STREAM_JAR_PATH \-input $INPUT_FILE_PATH \-output $OUTPUT_PATH \
    -mapper "python map.py mapper_func WH" \#这里也一定要用WH符号链接,因为作业开始运行后创建的attemps目录中只能看到WH,和map.py符号链接位于同一目录
    -reducer "pythonred.py reducer_func" \
    -cacheFile “hdfs://master:9000/white_list#WH” #WH一定要,每个attemp中要生成该符号链接,指向Tasktracer/distcache中的whitelist-file ./map.py \-file ./red.py

3、运行run.sh,提交任务,观察数据节点上的文件分发
运行结束后, jobcache下的所有内容,以及distcache下的所有内容,将全部清空

MR进阶实践3: -cacheArchive 将位于HFDS上的压缩文件分发给计算节点

【使用场景】
假定有多个white_list文件,如果一个个通过-file方式上传就不太合理,可以将多个white_list文件,打包压缩为1个tar.gz文件,上传到HDFS,然后通过-cacheArchive方式,将HDFS压缩将件分发给各个compute node.  同时框架会自动将分发到各个compute node上的压缩文件进行解压
1、将本地多个white_list文件,打包为一个压缩文件w.tar.gz
目录结构:map.py,  red.py, white_list_dir
|_white_list_1
|_white_list_2
注意:gzip打包后的文件,上传到HDFS,通过-cacheArchive分发到计算节点后,会自动解压为同名文件夹
打包完成后的目录结构为:map.py,  red.py, white_list_dir
|_white_list_1
|_white_list_2
|_w.tar.gz
2、打包后的压缩文件上传到HDFS
# hadoop fs –put ./w.tar.gz  /# hadoop fs –ls /
查看是否已经上传成功

3、修改run.sh,-cacheArchive选项
HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
INPUT_FILE_PATH="/03_cachefiledistribute_input/The_Man_of_Property.txt"
OUTPUT_PATH="/03_cachefiledistribute_output"
$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
# job3: use -cacheArchive to distribute HDFS compressed file to compute node
$HADOOP_CMD jar$STREAM_JAR_PATH \-input $INPUT_FILE_PATH \-output $OUTPUT_PATH \
    -mapper "python map.py mapper_func WLDIR" \#这里也一定要用WH.gz符号链接名,因为attemps中只能看到WH.gz
    -reducer "pythonred.py reducer_func" \
    -cacheArchive “hdfs://master:9000/w.tar.gz#WLDIR”#WLDIR一定要,每个attemp中要生成该符号链接,指向Tasktracer/distcache中已经自动解压的文件夹,文件夹中有white_list_1,white_list_2-file ./map.py \-file ./red.py

3、重大变动:修改map.py程序
-mapper "python map.py mapper_func WLDIR" \
可以看出map.py开始运行时,传入参数只能是WLDIR,表示压缩的HDFS文件分发到compute node后自动解压得到的目录
因此map.py要修改程序为遍历WLDIR字符串代表的目录,找到每个文件,然后再对每个文件做处理
4、运行run.sh,提交任务,观察数据节点上的文件分发
运行结束后, jobcache下的所有内容,以及distcache下的所有内容,将全部清空

转载于:https://www.cnblogs.com/shay-zhangjin/p/7739849.html

MapReduce-实践1相关推荐

  1. 简单的MapReduce实践

    简单的MapReduce实践 文章目录 简单的MapReduce实践 操作环境 实现文件合并和去重操作 新建项目 新建Java程序 打包程序 运行程序 实现文件的倒排索引 第一步,Map 第二步,Co ...

  2. [MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题

    用户在DataWorks上执行MapReduce作业的时候,文件大于10M的JAR和资源文件不能上传到Dataworks,导致无法使用调度去定期执行MapReduce作业. 解决方案: 第一步:大于1 ...

  3. 第五章-分布式并行编程框架MapReduce

    第五章-分布式并行编程框架MapReduce 文章目录 第五章-分布式并行编程框架MapReduce MapReduce概述 分布式并行编程 MapReduce模型和函数 MapReduce体系结构 ...

  4. mapreduce编程规范_大数据之MapReduce详解

    今天要讲的是MapReduce 目录 今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle.mr与yarn的联系.以及mr的join操作的等知识.以下内容全是个人学习后的见 ...

  5. 大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)

    目录 前言: 1.MapReduce原理 2.mapreduce实践(WordCount实例) 目录 今天先总体说下MapReduce的相关知识,后续将会详细说明对应的shuffle.mr与yarn的 ...

  6. 分布式计算模式:MapReduce

    分布式计算模式:MapReduce 前言 什么是分而治之? 分治法的原理 抽象模型 MapReduce 工作原理 MapReduce 实践应用 知识扩展:Fork-Join 计算模式是什么意思呢? 总 ...

  7. 为什么Spark这么牛逼?

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  8. 大数据入门学习之环境搭建

    一:环境搭建:VM.CentOS7安装及网络配置 大数据入门首先需要搭建环境,接下来的三篇文章均是环境搭建部分的内容. 首先我们要安装虚拟机及linux系统 一.安装虚拟机VM 官网下载VM虚拟机:这 ...

  9. 分布式技术原理(七):分布式计算

    目录 分布式计算 什么是分而治之? 分治法的原理 MapReduce 工作原理 MapReduce 实践应用 总结 分布式计算模式之Stream Stream 工作原理 分布式计算 Hadoop 这个 ...

  10. 大数据系列之数据仓库Hive命令使用及JDBC连接

    Hive系列博文,持续更新~~~ 大数据系列之数据仓库Hive原理 大数据系列之数据仓库Hive安装 大数据系列之数据仓库Hive中分区Partition如何使用 大数据系列之数据仓库Hive命令使用 ...

最新文章

  1. Golang访问Redis初体验
  2. Java Web学习总结(22)——使用kaptcha生成验证码
  3. 下c语言按q退出_Linux vim编辑器怎么退出?第一次用都会问的问题
  4. 李沐《动手学深度学习》中文版PDF和视频免费领!!!
  5. Oracle 19c和20c新特性最全解密
  6. Android的第一个工程,Android Things:撸起袖子来创建第一个Things工程
  7. python抽取数据库元数据_0797-使用HDP或CDP的Atlas采集CDH6的元数据和血缘
  8. java左右连接sql写法,join用不了了 sql语句写法,不用join
  9. java编程思想读书笔记二(对象的创建)
  10. 利用numpy.gradient计算图像梯度
  11. 启用 Windows 审核模式(Audit Mode),以 Administrator 账户来设置电脑的开箱体验
  12. 研究生的生活原来是酱紫的……
  13. 三、Solr管理控制台(二)
  14. 解决电脑无法通过网线直连海康摄像机的问题
  15. cmd 批量命名,批量删除
  16. 谷歌浏览器打不开12306
  17. C# .NET想要另存一个项目,sln文件丢了怎么办
  18. ie6 sp1出现“重定向到不安全的连接”的解决放案
  19. 操作系统之 吸烟者问题
  20. rpa转java_RPA机器人流程自动化的简单介绍

热门文章

  1. QQ帐户的申请与登陆 (25 分)(map映射)
  2. hibernate教程笔记7
  3. Java常量不能二次赋值与常量不能修改值意思一样吗?
  4. printline在C语言中的作用,iswprint - [ C语言中文开发手册 ] - 在线原生手册 - php中文网...
  5. python setuptools 打包 发布
  6. C++ std::pair<,> 是什么怎么用
  7. kubectl apply -f weave.yaml之后dns没有启动起来 weave-net CrashLoopBackOff
  8. php float转int 元转分
  9. php字符串怎么判断是否相等,php判断两个字符串是否相等
  10. 正则式转化nfa 代码_从0到1打造正则表达式执行引擎(二)