• 1. 三 、MapReduce详解及Eclipse连接Hadoop开发MapReduce讲师:Cloudy[www.langsin.com]浪曦网版权所有
  • 2. 第2页2018年10月23日Hadoop 命令类Linux shell 的命令 用法: hadoop fs -[ls/cat/mkdir/rmr …] hadoop fs -help 帮助 hadoop fs –ls hadoop fs –cat ls/cat/mkdir/rmr/cp/mv/ copyFromLocal/copyToLoacl
  • 3. Hadoop 命令hadoop fs : [-ls ] [-lsr ] [-mv ] [-cp ] [-rm [-skipTrash] ] [-rmr [-skipTrash] ] [-cat ] [-help [cmd]] 第3页2018年10月23日
  • 4. Hadoop 命令 [-copyFromLocal ... ] [-moveFromLocal ... ] [-copyToLocal [-ignoreCrc] [-crc] ] [-moveToLocal [-crc] ] [-mkdir ] 创建目录 [-touchz ] 创建文件 [-tail [-f] ] [-chmod [-R] PATH...]第4页2018年10月23日
  • 5. 分布式概念分布式存储 64M 分布式计算 全国人口普查第5页2018年10月23日
  • 6. Eclipse 远程连接Hadoop1 、hadoop文件夹中\contrib\eclipse-plugin插件 复制到eclipse\plugins文件夹中,重启Eclipse 2、查看首选项会出现 Hadoop Map/Reduce,修改本地Hadoop路径第6页2018年10月23日
  • 7. Eclipse 远程连接Hadoopmap/reduce master: host:就是jobtracker 所在的集群机器,192.168.1.102 port:就是jobtracker 的port 9001  这两个参数就是 mapred-site.xml里面mapred.job.tracker里面的ip和port 。 DFS master: host:就是namenode所在的集群机器, 192.168.1.102 port:就是namenode的port 9000  这两个参数就是 core-site.xml里fs.default.name里面的ip和port第7页2018年10月23日
  • 8. Eclipse 远程连接Hadoophadoop.job.ugi : 用户名/密码 dfs.replication : 和hdfs-site.xml里面设置一致 1 hadoop.tmp.dir : core-site.xml 里hadoop.tmp.dir设置 Windows设置 C:\WINDOWS\system32\drivers\etc文件中的hosts中加入两句: 192.168.1.102 master 192.168.1.101 slave1 第8页2018年10月23日
  • 9. MapReduce详解MapReduce 是现今一个非常流行的分布式计算框架,它被设计用于并行计算海量数据。第一个提出该技术框架的是Google 公司,而Google 的灵感则来自于函数式编程语言,如LISP,Scheme,ML 等。 MapReduce 框架的核心步骤主要分两部分:Map 和Reduce。 当你向MapReduce 框架提交一个计算作业时,它会首先把计算作业拆分成若干个Map 任务,然后分配到不同的节点上去执行,每一个Map 任务处理输入数据中的一部分,当Map 任务完成后,它会生成一些中间文件,这些中间文件将会作为Reduce 任务的输入数据。Reduce 任务的主要目标就是把前面若干个Map 的输出汇总到一起并输出。第9页2018年10月23日
  • 10. MapReduce详解Map-Reduce模型 第10页2018年10月23日
  • 11. MapReduce详解 用户可以配置和向框架提交MapReduce任务。 一个MapReduce作业包括Map任务,混淆过程,排序过程和一套Reduce任务。然后框架会管理作业的分配和执行,收集输出和向用户传递作业结果。 MapReduce Job 的构成要素: 第11页2018年10月23日
  • 12. MapReduce详解第12页2018年10月23日
  • 13. 第13页2018年10月23日
  • 14. Hadoop API主要包几种主要的包: org.apache.hadoop.conf    Configuration系统参数的配置类 org.apache.hadoop.fs      文件系统API。 org.apache.hadoop.hdfs    分布式文件系统(HDFS)模块的实现 org.apache.hadoop.io      通用的I/O ,用于针对数据库,文件等数据对象做读写操作 org.apache.hadoop.mapred   旧包,已经不建议使用 org.apache.hadoop.mapreduce Hadoop分布式计算系统(MapReduce)模块的实现,包括任务的分发调度等 org.apache.hadoop.tools    定义了一些通用的工具 org.apache.hadoop.util       定义了一些公用的API 第14页2018年10月23日
  • 15. Hadoop Job所有的Hadoop作业有一个用来配置MapReduce任务和提交它到Hadoop框架的主程序。 org.apache.hadoop.mapred.JobConf对象是用来处理这些配置的,新版本(0.20以后)是类org.apache.hadoop.conf.Configuration ,其实前者也是后者的子类。 创建JobConf对象: JobConf conf = new JobConf(Class  class); 配置作业参数: 包含输入和输出目录位置,输入和输出格式,mapper和reducer类等第15页2018年10月23日
  • 16. Map相关配置作业都需要一个map阶段,map阶段负责处理作业输入。 map阶段的配置需要你指定输入位置和mapper类,输入格式,输出类型,还可能有推荐的Map任务的数量,每个Map任务需要的线程数。 conf.setInputFormat(TextInputFormat.class) ; FileInputFormat.addInputPath(jobConf, new Path(" ")); conf.setMapOutputKeyClass(LongWritable.class); conf.setMapOutputValueClass(Text.class); conf.setMapperClass(JMapper.class);第16页2018年10月23日
  • 17. Reduce相关配置配置Reduce: Reduce任务的数量,如果是0,则没有Reduce阶段。 Reduce任务的输出键值对类型,输出文件类型,Reducer类。 conf.setOutputKeyClass(LongWritable.class); conf.setOutputValueClass(Text.class); conf.setReducerClass(JReducer.class); FileOutputFormat.setOutputPath(conf, new Path(“”)); 第17页2018年10月23日
  • 18. Map 和 Reduce方法public void map(Object key, Text value, OutputCollector out,Reporter reporter) ; public void reduce(Text key, Iterator texts, OutputCollector out,Reporter reporter) ;第18页2018年10月23日
  • 19. 作业输入格式作业输入格式 : TextInputFormant: 关键字是行数,数据值是行本身。 MultiFileInputFormat: 可以让用户把多个文件结合成为一个输入分割的抽象类。 SequenceFIleInputFormat: 以Hadoop序列文件作为输入,包含序列化的键值对,二进制文件 KeyValueTextInputFormat: 每行一个键值对。 DBInputFormat 数据库格式 如:jobConf.setInputFormat(KeyValueTextInputFormat.class); 第19页2018年10月23日
  • 20. hadoop jar 执行: hadoop jar /home/hadoop/test.jar  Com.test.Main inpath outpath 第20页2018年10月23日
  • 21. HDFS负载均衡器——BalancerHadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。 在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下: sh $HADOOP_HOME/bin/start-balancer.sh –t 10% 这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。 第21页2018年10月23日
  • 22. 感谢您对浪曦网的支持!http://www.langsin.com