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

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

-file分发原理
 
 
 
 
run.sh文件: 通过多个-file, 将多个本地文件分发到Hadoop集群中的compute node
  1. HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
  2. STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
  3. INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
  4. OUTPUT_PATH="/02_filedistribute_output"
  5. $HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
  6. # job1: use -file to distribute local file to cluster
  7. # these files will bestored in the same directory in each datanode
  8. $HADOOP_CMD jar$STREAM_JAR_PATH \
  9. -input $INPUT_FILE_PATH \
  10. -output $OUTPUT_PATH \
  11. -mapper "python map.py mapper_funcwhite_list" \
  12. -reducer "python red.pyreducer_func" \
  13. -file ./map.py \
  14. -file ./red.py \
  15. -file ./white_list
 
修改reducer个数为三个 (第一种 -jobconf)
  1. HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
  2. STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
  3. INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
  4. OUTPUT_PATH="/02_filedistribute_output"
  5. $HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
  6. # job1: use -file todistribute files
  7. # these files will be stored in the same directory in each datanode
  8. $HADOOP_CMD jar$STREAM_JAR_PATH \
  9. -input $INPUT_FILE_PATH \
  10. -output $OUTPUT_PATH \
  11. -mapper "python map.py mapper_funcwhite_list" \
  12. -reducer "pythonred.py reducer_func" \
  13. -jobconf mapred.reduce.tasks=” \ # deprecated option, not suggested
  14. -file ./map.py \
  15. -file ./red.py \
  16. -file ./white_list
 
修改reducer为3个(第二种  -D)
  1. HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
  2. STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
  3. INPUT_FILE_PATH="/02_filedistribute_input/The_Man_of_Property.txt"
  4. OUTPUT_PATH="/02_filedistribute_output"
  5. $HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
  6. # job1: use -file todistribute files
  7. # these files will bestored in the same directory in each datanode
  8. $HADOOP_CMD jar$STREAM_JAR_PATH \
  9. -D mapred.reduce.tasks= \
  10. -input $INPUT_FILE_PATH \
  11. -output $OUTPUT_PATH \
  12. -mapper "python map.py mapper_funcwhite_list" \
  13. -reducer "pythonred.py reducer_func" \
  14. -file ./map.py \
  15. -file ./red.py \
  16. -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,本地文件在上传后直接删除

  1. # hadoop fs -put ./white_list /
  2. # rm -rf ./white_list
2、修改run.sh, 设置-cacheFile
  1. HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
  2. STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
  3. INPUT_FILE_PATH="/03_cachefiledistribute_input/The_Man_of_Property.txt"
  4. OUTPUT_PATH="/03_cachefiledistribute_output"
  5. $HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
  6. # job2: use -cacheFileto distribute HDFS file to compute node
  7. $HADOOP_CMD jar$STREAM_JAR_PATH \
  8. -input $INPUT_FILE_PATH \
  9. -output $OUTPUT_PATH \
  10. -mapper "python map.py mapper_func WH" \
  11. #这里也一定要用WH符号链接,因为作业开始运行后创建的attemps目录中只能看到WH,和map.py符号链接位于同一目录
  12. -reducer "pythonred.py reducer_func" \
  13. -cacheFile hdfs://master:9000/white_list#WH”
  14. #WH一定要,每个attemp中要生成该符号链接,指向Tasktracer/distcache中的whitelist
  15. -file ./map.py \
  16. -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
  1. # hadoop fs –put ./w.tar.gz /
  2.  
  3. # hadoop fs –ls /
  4. 查看是否已经上传成功
3、修改run.sh,-cacheArchive选项
  1. HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop"
  2. STREAM_JAR_PATH="/usr/local/src/hadoop-1.2.1/contrib/streaming/hadoop-streaming-1.2.1.jar"
  3. INPUT_FILE_PATH="/03_cachefiledistribute_input/The_Man_of_Property.txt"
  4. OUTPUT_PATH="/03_cachefiledistribute_output"
  5. $HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH
  6. # job3: use -cacheArchive to distribute HDFS compressed file to compute node
  7. $HADOOP_CMD jar$STREAM_JAR_PATH \
  8. -input $INPUT_FILE_PATH \
  9. -output $OUTPUT_PATH \
  10. -mapper "python map.py mapper_func WLDIR" \
  11. #这里也一定要用WH.gz符号链接名,因为attemps中只能看到WH.gz
  12. -reducer "pythonred.py reducer_func" \
  13. -cacheArchive hdfs://master:9000/w.tar.gz#WLDIR”
  14. #WLDIR一定要,每个attemp中要生成该符号链接,指向Tasktracer/distcache中已经自动解压的文件夹,文件夹中有white_list_1,white_list_2
  15. -file ./map.py \
  16. -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. 201521123074 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...

  2. 201521123019 《java程序设计》 第13周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? 访问cec ...

  3. ThreadLocal原理及使用示例

    简介:本文已一个简要的代码示例介绍ThreadLocal类的基本使用方式,在此基础上结合图片阐述它的内部工作原理. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblog ...

  4. Activiti-05-.Deployment and MN 2.0 Introduction

    Business archives (业务归档) 为了部署流程,业务档案必须被封装,业务档案是activiti 引擎部署的单元,它相当于zip文件,它包含BPMN 2.0 processes, tas ...

  5. Java 异常机制

    Java 异常机制 什么是异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程 为什么要有异常 什么出错了 哪里出错了 ...

  6. JavaScript基礎知識

    JavaScript基礎知識 1.標籤組使用 <script charset='utf-8' //設置字元集 defet //使腳本延遲到文檔解析完成,Browser已忽略 language=' ...

  7. javascript插入before(),after()新DOM方法

    随着web的技术突飞猛进的发展.HTML5 ES6等新技术的发展,与此同时DOM等标准也在悄悄的进步,各大浏览器也在悄悄的发展适配新的属性和方法,今天我们来看看Javascript新的DOM的方法 二 ...

  8. Linux脚本入门(1)

    1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例 ...

  9. Python中map()函数浅析

    MapReduce的设计灵感来自于函数式编程,这里不打算提MapReduce,就拿python中的map()函数来学习一下. 文档中的介绍在这里: map(function, iterable, .. ...

  10. Java面向对象 GUI 补录

     Java面向对象 GUI 补录 知识概要:(1)GUI和CLI                   (2)AWT和SWING                   (3)AWT继承关系图      ...