MapReduce 1 程序开发
2016-12-04 00:18
162 查看
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/MapReduce
1 程序开发/
1、 主JobTracker:负责总任务的调度和分配工作,控制其他的TaskTracker的执行,发现其中的TaskTracker无法执行就分配其他TaskTracker接着执行相应的任务,总调度作用,若任务中的JobTracker只有一个,通常运行在Master节点上。
2、 从TaskTracker:主动与JobTracker通信,接收JobTracker分配的任务并执行,为了较少网络负担,通常运行在DataNode节点上(和数据在一起,减少数据网络拷贝次数);
3、 MapReduce搭建配置过程:
A、 选择一台负责JobTracker的机器,修改mapred-site.xml文件,指定JobTracker的机器;并把配置文件同步到其他所有节点机器上;
B、 其他的TaskTracker默认分配在DataNode节点上,执行start-all.sh启动整个系统;
C、 浏览器访问:http://namenode:50030访问MapReduce管理界面
4、 编写分布式程序:
A、 继承org.apache.hadoop.mapreduce.Mapper;编写mapper方法,对输入数据进行分割并封装成特定键值对
B、 继承org.apache.hadoop.mapreduce.Reducer;编写reduce方法,对上面的Map的输出键值对进行合并操作,这个时候reduce方法收到的已经是Map的所有相同key下的键值对集合(一个key对应这个key的所有value的集合),对这个集合的操作相当于最后的统计工作;
C、 编写任务类:
org.apache.hadoop.conf.Configuration;///Hadoop的MapReduce执行配置
org.apache.hadoop.mapreduce.Job;///任务实体
设置好Job的相关参数,封装成分布式系统可识别的jar包,如下:
//根据配置创建一个任务
Job job = new Job(configuration);
//设置任务main入口
job.setJarByClass(JobRun.class);
//设置map的class类
job.setMapperClass(QQFriendMapper.class);
//设置reduce 的class类
job.setReducerClass(QQFriendReducer.class);
//设置map的输出数据的key类型
job.setMapOutputKeyClass(Text.class);
//设置map的输出数据的value类型
job.setMapOutputValueClass(Text.class);
//设置执行任务的reduce的数量,和程序运行效率有关
job.setNumReduceTasks(2);// 设置Reduce任务个数,默认为1
D、 设置好这个程序的输入数据和输出数据的文件来源(HDFS文件系统中)
// 设置程序执行输入数据目录或文件
FileInputFormat.addInputPath(job, new Path("/test1/qq.txt"));
// 设置程序执行结果输出目录
FileOutputFormat.setOutputPath(job, new Path("/test1/qqresult"));
// job执行完成就返回0,程序退出,否则返回1表示有错
E、 设置程序退出状态:
System.exit(job.waitForCompletion(true) ? 0 : 1);
5、 将这个程序打成jar包上传到NameNode节点服务器中即可执行。
6、 执行过程分析:
A、 NameNode节点使用命令执行相应的jar,执行main函数入口;
B、 程序在指定的JobTracker节点开始运行,根据Job设置的Mapper和Reducer类分配好Map和Reduce节点;
C、 根据Job设置的输入输出文件来源设置好程序的运行过程所需的文件数据;
D、 执行Mapper,将数据输入文件Split,并把每个Split调用一次mapper方法去执行,Map结果写入HDFS;
E、 所有Map执行结束,将所有结果按照键值分组,每个分组为一个相同key的集合,每个集合调用一次reduce方法;
F、 在reduce方法中,对相同key的集合做最后的统计工作(与业务逻辑相关),并把执行结果按照键值对写入最后的输出文件中;
G、 所有reduce运行结束,正常退出exit(0);
注:
A、 整个过程:从Job设置的输入文件读取了大数据,进行分布式运算之后,再将执行结果输出到Job设置的输出文件当中,其他需要这个输出结果的程序可以直接在HDFS当中获得这个执行结果数据。
B、 分布式程序的执行结果其实是存在于一个文件夹中的:
_SUCCESS:这个空文件表示执行成功
part-r-00000:part结果文件,会有多个, Job中设定执行这个任务的reduce节点机器数量,一个节点就会产生一个part文件,所有这些文件的集合就是这个分布式程序的总执行结果。
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/MapReduce
1 程序开发/
1 程序开发/
1、 主JobTracker:负责总任务的调度和分配工作,控制其他的TaskTracker的执行,发现其中的TaskTracker无法执行就分配其他TaskTracker接着执行相应的任务,总调度作用,若任务中的JobTracker只有一个,通常运行在Master节点上。
2、 从TaskTracker:主动与JobTracker通信,接收JobTracker分配的任务并执行,为了较少网络负担,通常运行在DataNode节点上(和数据在一起,减少数据网络拷贝次数);
3、 MapReduce搭建配置过程:
A、 选择一台负责JobTracker的机器,修改mapred-site.xml文件,指定JobTracker的机器;并把配置文件同步到其他所有节点机器上;
B、 其他的TaskTracker默认分配在DataNode节点上,执行start-all.sh启动整个系统;
C、 浏览器访问:http://namenode:50030访问MapReduce管理界面
4、 编写分布式程序:
A、 继承org.apache.hadoop.mapreduce.Mapper;编写mapper方法,对输入数据进行分割并封装成特定键值对
B、 继承org.apache.hadoop.mapreduce.Reducer;编写reduce方法,对上面的Map的输出键值对进行合并操作,这个时候reduce方法收到的已经是Map的所有相同key下的键值对集合(一个key对应这个key的所有value的集合),对这个集合的操作相当于最后的统计工作;
C、 编写任务类:
org.apache.hadoop.conf.Configuration;///Hadoop的MapReduce执行配置
org.apache.hadoop.mapreduce.Job;///任务实体
设置好Job的相关参数,封装成分布式系统可识别的jar包,如下:
//根据配置创建一个任务
Job job = new Job(configuration);
//设置任务main入口
job.setJarByClass(JobRun.class);
//设置map的class类
job.setMapperClass(QQFriendMapper.class);
//设置reduce 的class类
job.setReducerClass(QQFriendReducer.class);
//设置map的输出数据的key类型
job.setMapOutputKeyClass(Text.class);
//设置map的输出数据的value类型
job.setMapOutputValueClass(Text.class);
//设置执行任务的reduce的数量,和程序运行效率有关
job.setNumReduceTasks(2);// 设置Reduce任务个数,默认为1
D、 设置好这个程序的输入数据和输出数据的文件来源(HDFS文件系统中)
// 设置程序执行输入数据目录或文件
FileInputFormat.addInputPath(job, new Path("/test1/qq.txt"));
// 设置程序执行结果输出目录
FileOutputFormat.setOutputPath(job, new Path("/test1/qqresult"));
// job执行完成就返回0,程序退出,否则返回1表示有错
E、 设置程序退出状态:
System.exit(job.waitForCompletion(true) ? 0 : 1);
5、 将这个程序打成jar包上传到NameNode节点服务器中即可执行。
6、 执行过程分析:
A、 NameNode节点使用命令执行相应的jar,执行main函数入口;
B、 程序在指定的JobTracker节点开始运行,根据Job设置的Mapper和Reducer类分配好Map和Reduce节点;
C、 根据Job设置的输入输出文件来源设置好程序的运行过程所需的文件数据;
D、 执行Mapper,将数据输入文件Split,并把每个Split调用一次mapper方法去执行,Map结果写入HDFS;
E、 所有Map执行结束,将所有结果按照键值分组,每个分组为一个相同key的集合,每个集合调用一次reduce方法;
F、 在reduce方法中,对相同key的集合做最后的统计工作(与业务逻辑相关),并把执行结果按照键值对写入最后的输出文件中;
G、 所有reduce运行结束,正常退出exit(0);
注:
A、 整个过程:从Job设置的输入文件读取了大数据,进行分布式运算之后,再将执行结果输出到Job设置的输出文件当中,其他需要这个输出结果的程序可以直接在HDFS当中获得这个执行结果数据。
B、 分布式程序的执行结果其实是存在于一个文件夹中的:
_SUCCESS:这个空文件表示执行成功
part-r-00000:part结果文件,会有多个, Job中设定执行这个任务的reduce节点机器数量,一个节点就会产生一个part文件,所有这些文件的集合就是这个分布式程序的总执行结果。
本文为博主原创,允许转载,但请声明原文地址:http://www.coselding.cn/article/2016/05/31/MapReduce
1 程序开发/
相关文章推荐
- 图解全分布模式下eclipse开发MapReduce程序
- Hadoop之MapReduce程序开发流程
- MapReduce程序开发
- MapReduce程序的3种集群提交运行模式详解---基于Windows与Linux两种开发环境
- MapReduce开发程序,运行环境配置
- 图解全分布模式下eclipse开发MapReduce程序
- 开发Mapreduce程序
- MapReduce程序开发中的Partitioner
- MapReduce程序开发中的Combiner
- MapReduce程序开发之流量求和(八)
- windows环境下Eclipse开发MapReduce程序遇到的四个问题及解决办法
- 如何在开发环境中创建mapreduce程序
- eclipse下开发mapreduce程序设置reduce个数无效的问题及解决
- mapreduce程序开发及伪分布式调试小结
- 004 开发mapreduce程序对用户行为日志加强
- 用 Eclipse 开发MapReduce程序的问题(1)
- 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
- 基于Hbase数据的Mapreduce程序环境开发
- 开发MapReduce程序 实验1
- 用 Eclipse 开发MapReduce程序的问题(1)