`
nopower
  • 浏览: 6974 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hack Hadoop编译脚本突破版本兼容性限制

阅读更多
我们都知道Hadoop在内部各个节点通信的时候, 必须保证两者版本是一致的(0.19是这样, 0.20以上的不知道). 也就是说JobTracker和TaskTracker必须使用相同的编译版本, 如果不一致, 可能会出现如下错误:
2010-06-07 23:24:10,863 ERROR org.apache.hadoop.mapred.TaskTracker: Shutting down. Incompatible buildVersion.
JobTracker's: 0.19.1-tmp from 79483 by dangyuan on Mon Jan 25 10:49:47 CST 2010
TaskTracker's: 0.19.1-tmp from 79483 by dangyuan on Mon Jan 25 10:50:12 CST 2010

大家看到build version包括了版本, svn revision, 编译者, 编译日期. 如果其中有一个不一致, hadoop就认为是不同的Hadoop版本, 两种禁止进行通信.

但实际情况是, Hadoop集群运行过程中master节点是很少重启的, 而少数几个slave节点重启不会影响到集群的可用性. 有时候, 我们只是修改了TaskTracker的几行代码, JobTracker代码不变, 这些代码并不影响到TT和JT之间的通信. 但是当我们改完代码, 重新编译, 产生的hadoop包却被认为是一个新的版本. 所以如果你想让这个更新生效, 你必须把新生成的包分发到集群所有的节点(包括master), 并重启JT和TT. 甚至你还需要重启NameNode和DataNode, 因为DataNode和TaskTracker一般是在同一台机器上的, 并且使用同一份代码, 所以TT的代码修改还影响到了HDFS的可用性.

其实我们是有办法绕过这个限制的, 方法就是修改Hadoop的编译脚本. 步骤如下:
1. 先用ant编译一下
2. 编辑生成的 build/src/org/apache/hadoop/package-info.java 文件, version, user, date等变量随便填(只要填的和上次编译时的变量一致)
/*
 * Generated by src/saveVersion.sh
 */
@HadoopVersionAnnotation(version="0.19.1-tmp", revision="79483",
                         user="dangyuan", date="Mon Jan 25 10:49:47 CST 2010", url="http://svn.dangyuan.com/repos/trunk/hadoop-core")
package org.apache.hadoop;

3. 编辑 src/saveVersion.sh 文件, 把最后几行注释掉:
...
mkdir -p build/src/org/apache/hadoop
#cat << EOF | \
#  sed -e "s/VERSION/$version/" -e "s/USER/$user/" -e "s/DATE/$date/" \
#      -e "s|URL|$url|" -e "s/REV/$revision/" \
#      > build/src/org/apache/hadoop/package-info.java
#/*
# * Generated by src/saveVersion.sh
# */
#@HadoopVersionAnnotation(version="VERSION", revision="REV",
#                         user="USER", date="DATE", url="URL")
#package org.apache.hadoop;
#EOF

4. 再次用ant编译, 这样你会发现新生成的jar包就能和老的jar包通信了.

本实验只在0.19版本下测试通过, 请谨慎使用. 如果造成数据不兼容, 集群崩溃, 后果自负.
分享到:
评论

相关推荐

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    本文将介绍Hadoop、HBase、Hive以及ZooKeeper的版本整合兼容性,以及如何根据版本找到兼容性信息。 首先,Hadoop是一个开源的分布式存储和计算框架,它由HDFS和MapReduce两部分组成。HDFS用于存储大数据,而...

    hadoop,hbase,hive版本兼容性说明.zip

    本文件“hadoop,hbase,hive版本兼容性说明.zip”显然提供了关于这三个组件之间如何协同工作的详细信息,特别是它们的版本兼容性。以下是对这些关键知识点的深入解析: **Hadoop**: Hadoop是Apache基金会的一个开源...

    hadoop-2.7.4编译版本

    预编译的Hadoop 2.7.4版本可以直接在Linux上安装,避免了编译过程中的依赖问题和配置复杂性。通常,部署步骤包括设置环境变量、配置Hadoop配置文件、格式化HDFS、启动守护进程等。 **5. 集群配置** 在部署Hadoop时...

    hadoop编译插件2.6.3版本

    hadoop编译插件的2.6.3版本,亲试可用。

    hadoop编译后的包

    这个“hadoop编译后的包”正是针对这种需求提供了一个已经集成好Snappy支持的Hadoop版本,方便用户快速部署和使用。如果你正在处理大量的数据,并且追求高效的处理速度,那么这个包将是一个很好的选择。

    hadoop_windows编译版本

    在Windows环境下编译的Hadoop版本,能够很好地兼容Win7、Win8以及Win10等系统,简化了在Windows上的部署过程。 Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是分布式文件系统,它...

    Hadoop 源码编译所需软件

    本文将深入探讨在编译Hadoop CDH源码时所需的软件及其重要性。 首先,我们来看“google-snappy-ea660b5”。Snappy是由Google开发的一个高效的数据压缩库,它主要关注的是高速度而非最高压缩率。在Hadoop中,Snappy...

    用python编写nagios hadoop监控脚本

    标题 "用python编写nagios hadoop监控脚本" 暗示了本文将探讨如何使用Python编程语言来创建Nagios监控系统针对Hadoop集群的监控脚本。Nagios是一款广泛使用的开源网络监控系统,它能检测各种IT基础设施的状态,包括...

    hadoop编译文档

    本文档将详细介绍如何在CentOS 7.0环境下从源码编译Hadoop 3.0版本。 #### 二、准备工作 **1. CentOS 7.0操作系统** - 确保已经安装了CentOS 7.0操作系统。 - 配置好`yum`源,确保能够顺利安装后续所需的软件包...

    hadoop windows 编译版 bin 和 lib

    在Windows环境中,确保所有依赖库正确配置对于成功运行Hadoop至关重要,因为某些库可能需要特定的Windows兼容性调整。 3. **编译版**: 提到"编译版",意味着这个Hadoop版本是专门为Windows操作系统编译的,可能...

    hadoop 2.7 64位编译版本

    Hadoop 2.7 64位编译版本是一个针对64位操作系统的优化的开源分布式计算框架。这个版本,即hadoop-2.7.5-64x.tar.gz,是Hadoop 2.x系列的一个稳定版本,适用于大数据处理和分析任务。以下是关于Hadoop 2.7及其64位...

    hadoop2.8.1+hadoop+winutils编译包

    总结来说,这个“hadoop2.8.1+hadoop+winutils编译包”提供了在Windows环境下运行Hadoop 2.8.1所需的所有组件,包括Hadoop的核心功能和针对Windows的兼容性工具。通过合理安装和配置,用户可以在Windows系统上进行...

    Hadoop编译需要的jar包

    `findbugs-3.0.0.tar` 包含FindBugs 3.0.0版本,这个工具在Hadoop编译过程中可以用来提升代码质量和可靠性,通过在编译阶段找出可能的错误,避免在运行时出现故障。 4. **Protocol Buffers (Protobuf)**: ...

    hadoop编译.zip

    apache-ant-1.9.9-bin.tar.gz apache-maven-3.0.5-bin.tar.gz hadoop-2.7.2-src.tar.gz protobuf-2.5.0.tar.gz

    hadoop 2.5.0 编译snappy

    注意,这里特别提到不支持CDH(Cloudera Distribution Including Apache Hadoop)版本,因为CDH通常包含了预编译的Snappy库和其他特定的配置,直接使用编译的Snappy可能会导致兼容性问题,从而出现错误。 在实际...

    win7(x64)和win10(x64)编译的hadoop的bin

    【标题】"win7(x64)和win10(x64)编译的hadoop的bin" 涉及的知识点主要集中在Hadoop的编译与平台兼容性上,尤其是对于Windows 7和10 64位操作系统的支持。Hadoop是一个开源的分布式计算框架,它允许在大量计算机...

    win 7 64上编译 Hadoop 2.7.3 源码

    ### Win 7 64位系统上编译Hadoop 2.7.3源码的知识点 #### 一、背景介绍 在当前大数据处理技术快速发展的背景下,Hadoop作为主流的大数据处理框架之一,被广泛应用于各类场景之中。对于开发者来说,能够熟练地在自己...

    hadoop编译 修改配置文件

    7. **版本兼容性**:要注意的是,Hadoop的版本与Eclipse插件可能存在兼容性问题,需要选择匹配的版本进行编译和使用。 8. **优化配置**:对于大规模的Hadoop集群,可能还需要进行性能优化,例如调整内存分配、网络...

    hadoop2.7.6编译后的

    CentOS7.4是一个广泛使用的Linux发行版,其稳定性和兼容性为Hadoop提供了一个良好的运行平台。 压缩包内的文件包含以下几个部分: 1. **LICENSE.txt** 和 **NOTICE.txt**:这两个文件通常包含项目的许可信息和版权...

Global site tag (gtag.js) - Google Analytics