【mapreduce】hadoop2.x—mapreduce实战和总结
来源:互联网 发布:进销存数据库设计 编辑:程序博客网 时间:2024/05/01 08:39
转自:http://blog.csdn.net/u012749168/article/details/52809278
在eclipse上编写程序,运行在hadoop上。网上很多的例子都是1.x的mr代码,而1.x的代码和2.x的代码是有些区别的。在hadoop官网上可以下载到hadoop的源码包,源码包里面有很多的源代码,hadoop安装包里面的都是些jar文件,jar可以执行,但是无法看里面的源码。接下来详细分析两个案例的代码,并附带个人的hadoop学习总结与大家分享,希望大家给点意见。一个是hadoop源码,一个是hadoop实战的例子。希望大家给点意见.....
第一:hadoop-2.7.3的wordcount的源码文件
现在还有一些问题需要处理。
1、在map之前,hadoop就进行了一次key,value的划分,按行划分的。但是,如果一个文件里面,给的格式是一个key后面跟着一个value的话,怎么处理?这里,默认是text类型,这个类型是以行\n分割,它的键值是<int(行偏移),text(行的文本)>,在处理wordcount,这种划分的比较适合。而例如文本中给定了key,value的数据,使用keyvalueinputformat的类型进行文本分割比较好。这里默认的分隔符是\t。使用下面的命令显示指定预处理的方法。
job.setInputFormatClass(KeyValueTextInputFormat.class);
2、接着上面的,如果分隔符不是/t,而是逗号,这些预处理怎么处理。hadoop提供了解决方案,设置分隔符就可以了。命令要在job实例化之前。
conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ",");
3、新版本使用的是iteratable来收集键值对集而不是 iterator,旧版本使用的是output.collect()的方法来实现键值对的写入传递,新版本使用的context来负责写入。这里就不列出1.x的代码了,网上很多很多的例子。
第二:hadoop实战专利引用代码解析
第一个例子说完,就可以自己比较容易的去修改hadoop实战中的例子了。hadoop实战中专利数据的处理用到的是hadoop1.x的。这是部分数据的截取,第一列是专利列,第二列是第一列专利所引用到的其它专利。接下来我们要统计,第二列的每个专利,都有那些在第一列中的专利引用了,value采用逗号分隔并追加的方法。key和value以空格隔开。
资源地址:http://www.nber.org/patents/ 下的cite75_99.txt
输入文件
输出文件
我们把它的代码改成2.x的,1.x的代码不说了,直接上2.x的。
额外的说明
1、这里说一下输入的参数,这个是在eclipse里面设置的。如果你愿意可以吧args[]直接替换成路径。
/user/root/test/cite75_99.txt /user/root/output
输入和输出之间有个空格。因为hadoop2.x使用的是/user/username/file的格式,这里就在hdfs里面创建了/user/root/的目录。
2、扯一下文件分片的问题。文件大小是251M,默认的datanode一个片的大小是128M,1.x是64M吧,因此250M的文件会被分成2片。可以通过http://localhost:50070/的utilities菜单栏的browse the file system,输入/user/root/test-----这是我存放文件的目录,可以看到文件的详细信息。存放也是按块均匀的(我的集群是2个datanode,因此一个128,一个122,它显示大小是以字节为单位的*1024*1024)存放在各个datanode上,mapred.min.split.size可以设定大小。
3、eclipse运行的时候需要复制配置文件到src目录下,例如log4j.properties就是用来显示日志的.关于日志文件。有两种,一个是log一个是out。log是通过log4j记录,记录大部分的日志信息。out是标准输出和标准错误日志,少量记录。
日志的命名规则=框架名称-用户名-进程名-主机名-日志格式后缀
可以开一个终端使用命令:tail -f 日志名-----------会停顿在结尾,当有新日志刷新的时候,会滚动显示
MapReduce程序日志分为历史作业日志和container日志
历史作业日志
包含多少个Map,用了多少个Reduce,作业提交时间,作业启动时间,作业完成时间等
container日志---yarn
ApplicationMaster日志和普通的task日志 ${HADOOP_HOME}/logs/userlogs
Application Master的路径是/tmp/hadoop-yarn/staging下,这里的/tmp/是hdfs文件系统的目录,通过web可以查看
/tmp/hadoop-yarn/staging/history/done/年/月/日/ 按日期存放的
4、静态内部map和reduce类
好处是简化代码管理,这些内部类与主类独立,不交互,在执行时,采用不同的jvm的各类节点复制并运行map reduce,其它作业类在客户机上执行。
5、 Job job_local1970859078_0001 running in uber mode : false
打印的日志会有这么一句话,uber mode如果设置为true则使用一台jvm执行,伪分布测试小数据的话会非常的快,毕竟,开的JVM太多会有额外的开销,实际运行是在不同节点开启多个jvm同时运行的。通过把mapreduce.job.ubertask.enable设置为true可以开启。
6、 我们常说namenode存储的是元数据,hadoop的fsimage元数据存放在namenode定义的目录中,用来联系datanode
fsimage保存了最新的元数据检查点。
edits保存自最新检查点后的命名空间的变化,secondNamenode的协助作用体现在,会周期性的合并为fsimage
默认这两文件都放在namenode文件夹下面,可以分开设置并存放。
dfs.namenode.name.dir和dfs.namenode.edits.dir是设置存放目录的
dfs.namenode.checkpoint.dir是设置secondarynamenode进行合并的目录
7、 aggregation日志聚合
日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上。日志聚合的目录是/tmp/logs
yarn-site.xml可以进行配置。
开启的话是yarn.log-aggregation-enable-------true
聚合的默认日期 yarn.log-aggregation.retain-seconds----------------默认是以S为单位
8、 eclipse运行hadoop
我的出现了几个问题。在把core、hdfs和log配置文件拷到src目录下的时候,是可以运行在Hadoop上的。运行在yarn上需要四个配置文件都拷贝,但是还是出现了找不到内部类的错误。后来直接将工程导出为jar包,使用/bin/yarn命令运行是没有问题的。好像是eclipse缺失yarn的jar,暂时未解决。
0 0
- hadoop2.x—mapreduce实战和总结
- 【mapreduce】hadoop2.x—mapreduce实战和总结
- hadoop2.x MapReduce过程
- hadoop2.x MapReduce过程
- Hadoop2.x的MapReduce改进
- 命令行编译MapReduce程序 Hadoop2.X.X
- hadoop2.x配置 - MapReduce相关参数
- hadoop2.x之IO:MapReduce压缩
- mapreduce数据统计实战总结
- hadoop1.x与hadoop2.x在HDFS和MapReduce上的区别
- 【mapreduce】 Hadoop2.6.0 mapreduce 例子
- Hadoop2.X中Mapreduce,YARN等配置,启动和常见错误解决办法
- hadoop2.x入门:编写mapreduce对气象数据集求每日最高气温和最低气温
- Hadoop2-MapReduce(1)
- Hadoop2-MapReduce(2)
- Hadoop2.2.0 mapreduce 例子
- Hadoop2.6.0 mapreduce 例子
- 配置Hadoop2.x的HDFS、MapReduce来运行WordCount程序
- Android 自定义加载框
- OC当中的深拷贝和浅拷贝
- 圈子金融的weex领悟 - weex-start
- Analysis of 【Dropout】
- java虚拟机
- 【mapreduce】hadoop2.x—mapreduce实战和总结
- Java高并发,如何解决,什么方式解决
- 使用swoole实现生产者消费者模型(2)
- poj1751
- Android ADB命令的使用
- HDU1010 Tempter of the Bone (DFS & 奇偶剪枝)
- 【PAT】1096. Consecutive Factors
- android studio 自定义皮肤主题 ColorThemes
- MySQL中select * for update锁表的问题