好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

hadoop本地运行模式深入理解.doc

13页
  • 卖家[上传人]:今***
  • 文档编号:105634107
  • 上传时间:2019-10-12
  • 文档格式:DOC
  • 文档大小:77.50KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Hadoop本地运行模式深入理解Hadoop的运行模式分为3种:本地运行模式,伪分布运行模式,集群运行模式,相应概念如下: 1、独立模式即本地运行模式(standalone或local mode) 无需运行任何守护进程(daemon),所有程序都在单个JVM上执行由于在本机模式下测试和调试MapReduce程序较为方便,因此,这种模式适宜用在开发阶段 2、伪分布运行模式 伪分布:如果Hadoop对应的Java进程都运行在一个物理机器上,称为伪分布运行模式,如下图所示:[root@hadoop20 dir2]# jps8993 Jps7409 SecondaryNameNode7142 NameNode7260 DataNode8685 NodeManager8590 ResourceManager3、集群模式 如果Hadoop对应的Java进程运行在多台物理机器上,称为集群模式.[集群就是有主有从] ,如下图所示:[root@hadoop11 local]# jps18046 NameNode30927 Jps18225 SecondaryNameNode[root@hadoop22 ~]# jps9741 ResourceManager16569 Jps[root@hadoop33 ~]# jps12775 DataNode20189 Jps12653 NodeManager[root@hadoop44 ~]# jps10111 DataNode17519 Jps9988 NodeManager[root@hadoop55 ~]# jps11563 NodeManager11686 DataNode19078 Jps[root@hadoop66 ~]# jps10682 DataNode10560 NodeManager18085 Jps注意:伪分布模式就是在一台服务器上面模拟集群环境,但仅仅是机器数量少,其通信机制与运行过程与真正的集群模式是一样的,hadoop的伪分布运行模式可以看做是集群运行模式的特殊情况。

      为了方便文章的后续说明,先介绍一下hadoop的体系结构: 这里写图片描述 从Hadoop的体系结构可以看出,HDFS与MapReduce分别是Hadoop的标配文件系统与标配计算框架,但是呢?–我们完全可以选择别的文件系统(如Windows的NTFS,Linux的ext4)与别的计算框架(如Spark、storm等)为Hadoop所服务,这恰恰说明了hadoop的松耦合性在hadoop的配置文件中,我们是通过core-site.xml这个配置文件指定所用的文件系统的 fs.defaultFS hdfs://hadoop11:9000下面将基于Linux与Windows两种开发环境详细说明hadoop的本地运行模式,其中核心知识点如下: Hadoop的本地执行模式: 1、在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行 —-输入输出数据可以放在本地路径下(c:/wc/srcdata/) —-输入输出数据也可以放在hdfs中(hdfs://hadoop20:9000/dir)2、在linux的eclipse里面直接运行main方法,但是不要添加yarn相关的配置,也会提交给localjobrunner执行 —-输入输出数据可以放在本地路径下(/usr/local/) —-输入输出数据也可以放在hdfs中(hdfs://hadoop20:9000/dir) 首先先基于Linux的开发环境进行介绍: 这里写图片描述 以WordCount程序为例,输入输出文件都放在本地路径下,代码如下:package MapReduce;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner;public class WordCount{ public static String path1 = "file:///usr/local/word.txt"; //file:///代表本地文件系统中路径的意思 public static String path2 = "file:///usr/local/dir1"; public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); FileSystem fileSystem = FileSystem.get(conf); if(fileSystem.exists(new Path(path2))) { fileSystem.delete(new Path(path2), true); } Job job = Job.getInstance(conf); job.setJarByClass(WordCount.class); FileInputFormat.setInputPaths(job, new Path(path1)); job.setInputFormatClass(TextInputFormat.class); job.setMapperClass(MyMapper.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); job.setNumReduceTasks(1); job.setPartitionerClass(HashPartitioner.class); job.setReducerClass(MyReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); job.setOutputFormatClass(TextOutputFormat.class); FileOutputFormat.setOutputPath(job, new Path(path2)); job.waitForCompletion(true); } public static class MyMapper extends Mapper { protected void map(LongWritable k1, Text v1,Context context)throws IOException, InterruptedException { String[] splited = v1.toString().split("\t"); for (String string : splited) { context.write(new Text(string),new LongWritable(1L)); } } } public static class MyReducer extends Reducer { protected void reduce(Text k2, Iterable v2s,Context context)throws IOException, InterruptedException { long sum = 0L; for (LongWritable v2 : v2s) { sum += v2.get(); } context.write(k2,new LongWritable(sum)); } }}在程序的运行过程中,相应的java进程如下:[root@hadoop20 local]# jps7621 //对应的是启动的eclipse9833 Jps9790 WordCount //对应的是WordCount程序下面我们在本地查看运行结果:[root@hadoop20 dir]# pwd/usr/local/dir1[root@hadoop20 dir1]# more part-r-00000 hello 2me 1you 1接下来我们将输入路径选择HDFS文件系。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.