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 local file to cluster
# these 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 files
# these 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=” \ # 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 files
# these files will bestored in the same directory in each datanode
$HADOOP_CMD jar$STREAM_JAR_PATH \
-D mapred.reduce.tasks= \
-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下的所有内容,将全部清空

MapReduce-实践1的更多相关文章

  1. 大数据系列之分布式计算批处理引擎MapReduce实践-排序

    清明刚过,该来学习点新的知识点了. 上次说到关于MapReduce对于文本中词频的统计使用WordCount.如果还有同学不熟悉的可以参考博文大数据系列之分布式计算批处理引擎MapReduce实践. ...

  2. 大数据系列之分布式计算批处理引擎MapReduce实践

    关于MR的工作原理不做过多叙述,本文将对MapReduce的实例WordCount(单词计数程序)做实践,从而理解MapReduce的工作机制. WordCount: 1.应用场景,在大量文件中存储了 ...

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

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

  4. Hadoop MapReduce开发最佳实践(上篇)

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  5. 化繁为简(三)—探索Mapreduce简要原理与实践

    目录-探索mapreduce 1.Mapreduce的模型简介与特性?Yarn的作用? 2.mapreduce的工作原理是怎样的? 3.配置Yarn与Mapreduce.演示Mapreduce例子程序 ...

  6. MapReduce 原理与 Python 实践

    MapReduce 原理与 Python 实践 1. MapReduce 原理 以下是个人在MongoDB和Redis实际应用中总结的Map-Reduce的理解 Hadoop 的 MapReduce ...

  7. 【原创 Hadoop&Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践

    开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  8. Hadoop化繁为简(三)—探索Mapreduce简要原理与实践

    目录-探索mapreduce 1.Mapreduce的模型简介与特性?Yarn的作用? 2.mapreduce的工作原理是怎样的? 3.配置Yarn与Mapreduce.演示Mapreduce例子程序 ...

  9. [转] Hadoop MapReduce开发最佳实践(上篇)

    前言 本文是Hadoop最佳实践系列第二篇,上一篇为<Hadoop管理员的十个最佳实践>. MapRuduce开发对于大多数程序员都会觉得略显复杂,运行一个WordCount(Hadoop ...

  10. Mapreduce简要原理与实践

    探索Mapreduce简要原理与实践 目录-探索mapreduce 1.Mapreduce的模型简介与特性?Yarn的作用? 2.mapreduce的工作原理是怎样的? 3.配置Yarn与Mapred ...

随机推荐

  1. 201521123022 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 2. 书面作业 Q1.将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示 ...

  2. Java并发之synchronized关键字

         上篇文章我们主要介绍了并发的基本思想以及线程的基本知识,通过多线程我们可以实现对计算机资源的充分利用,但是在最后我们也说明了多线程给程序带来的两种典型的问题,针对它们,synchronize ...

  3. Struts2第十三篇【防止表单重复提交】

    回顾防止表单重复提交 当我们学习Session的时候已经通过Session来编写了一个防止表单重复提交的小程序了,我们来回顾一下我们当时是怎么做的: 在Servlet上生成独一无二的token,保存在 ...

  4. Oracle--新建用户以及赋予的权限

    1, 以dba方式登录Oracle 2, 创建用户,Users-->New ... 输入用户名和密码 3, 赋予connect/resource角色 4, 赋予该用户 对视图操作的相关权限 以下 ...

  5. 小甲鱼:Python学习笔记003_函数

    >>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...

  6. 实现一个简单的虚拟DOM

    现在的流行框架,无论React还是Vue,都采用虚拟DOM. 好处就是,当我们数据变化时,无需像Backbone那样整体重新渲染,而是局部刷新变化部分,如下组件模版: <ul class=&qu ...

  7. pytorch实现VAE

    一.VAE的具体结构 二.VAE的pytorch实现 1加载并规范化MNIST import相关类: from __future__ import print_function import argp ...

  8. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...

  9. Glide 这样用,更省内存!!!

    一.前言 Glide 是 Google 官方推荐的一款图片加载库,使用起来也非常的简单便利,Glide 它帮我们完成了很多很重要,但是却通用的功能,例如:图片的加载压缩.展示.加载图片的内存管理等等. ...

  10. Angular JS中的路由

      前  言            本章节将为大家介绍 AngularJS 路由.AngularJS 路由允许我们通过不同的 URL 访问不同的内容.通过 AngularJS 可以实现多视图的单页We ...