共计 2597 个字符,预计需要花费 7 分钟才能阅读完成。
在 Hadoop 的 2.x 中我们引入了一个资源管理器,一个分布式应用的管理框架,同时 MRv2 仍然是一个纯净的分布式计算框架。
总的来讲,以前的 MR 应用 (MRv1) 仍然支持不需要做任何修改。因此 MRv2 仍然大部分支持 MRv1 的应用,不过仍然需要代码改进和重构,一些 api 将被不推荐使用。
余下部分将会讨论 MRv2 的向后兼容能力。
————————————– 分割线 ————————————–
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
————————————– 分割线 ————————————–
二进制兼容
首先基于旧 mapred api 的二进制程序兼容意思是说这些应用程序是基于 MRv1 的 api 编译构建的,那么他们不需要做任何修改就可以在 MRv2 上运行。仅仅需要指明 hadoop2.x 的配置文件。
源文件兼容
我们不能确定基于 mapreduce 构建的二进制文件是否能兼容,毕竟这些 api 基于 MRv1 变化很大。不过我们可以肯定的是基于 mapreduce 从新构建二进制文件是兼容的,换句话说用户可以基于 mapreduce 重新构建他们的二进制文件,一个需要注意的不兼容地方是 Counter 和 CounterGroup。
不支持
MRAdmin 在 MRv2 中已经被删除。因为 mradmin 命令已经不存在了。他被 rmadmin 替换掉了,我们不支持二进制直接使用了此类。
MRv1 用户和 MRv2 早期用户权衡
不幸的是保持 MRv1 二进制兼容问题会导致 MRv2 早期用户 (hadoop 0.23 用户) 二进制不兼容问题。对于 mapred api 我们选择兼容 MRv1 应用,因为他们的用户比较庞大。对于 mapreduce api 用户没有采用 hadoop 0.23 的应用我们仍然让他们兼容 MRv1 的应用,如下罗列的是 MapReduce api 不兼容 hadoop 0.23:
Problematic Function | Incompatibility Issue |
org.apache.hadoop.util.ProgramDriver#drive | Return type changes from void to int |
org.apache.hadoop.mapred.jobcontrol.Job#getMapredJobID | Return type changes from String to JobID |
org.apache.hadoop.mapred.TaskReport#getTaskId | Return type changes from String to TaskID |
org.apache.hadoop.mapred.ClusterStatus#UNINITIALIZED_MEMORY_VALUE | Data type changes from long to int |
org.apache.hadoop.mapreduce.filecache.DistributedCache#getArchiveTimestamps | Return type changes from long[] to String[] |
org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestamps | Return type changes from long[] to String[] |
org.apache.hadoop.mapreduce.Job#failTask | Return type changes from void to boolean |
org.apache.hadoop.mapreduce.Job#killTask | Return type changes from void to boolean |
org.apache.hadoop.mapreduce.Job#getTaskCompletionEvents | Return type changes from o.a.h.mapred.TaskCompletionEvent[] too.a.h.mapreduce.TaskCompletionEvent[] |
蓄意
用户在 YARN 上运行 hadoop-examples-1.x.x.jar,需要注意的是 hadoop -jar hadoop-examples-1.x.x.jar 仍然采用的是 hadoop-mapreduce-examples-2.x.x.jar,他跟其他 MRv2 安装在一起。默认 hadoop 的 jar 优先于用户的 jar 加载也就是说 2.x.x 的会优先执行。用户需要在所有的 hadoop 节点上移除 hadoop-mapreduce-examples-2.x.x.jar。用户需要设置 HADOOP_USER_CLASSPATH_FIRST=true and HADOOP_CLASSPATH=…:hadoop-examples-1.x.x.jar 去执行他们想执行的例子,同时需要在 mapred-site.xml 配置文件中加入如下信息以便 YARN 加载此 jar:
<property>
<name>mapreduce.job.user.classpath.first</name>
<value>true</value>
</property
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13