Hadoop源码编译与调试汇总

虽然在运行Hadoop的时候可以打印出大量的运行日志,但是很多时候只通过打印这些日志是不能很好地跟踪Hadoop各个模块的运行状况。这时候编译与调试Hadoop源码就得派上场了。这也就是今天本文需要讨论的。

  先说说怎么编译Hadoop源码,本文主要介绍在Linux环境下用Maven来编译Hadoop。在编译Hadoop之前,我们需要准备好编译环境:

1、安装好1.6或以上的JDK;
2、安装Maven,被做好相应的配置;
3、安装ProtocolBuffer 2.5.0,MapReduce和HDFS用google protocol buffer来压缩和交换数据;
4、如果你是第一次编译,则需要保证电脑能够网络连接,主要用于获取所有Maven和Hadoop依赖库;
5、如果你需要查找bug,则需要安装Findbugs;
6、如果要生成文档则需要安装Forrest 0.8;
7、如果编译native code则需要安装Autoto;
上面的前提条件1-4是必须的,5-7是可选的。编译的环境准备好之后,那我们就可以去编译Hadoop源码了。本文以编译Hadoop2.2.0源码为例,进行说明。从官方下载下来的Hadoop源码一般是包含以下几个Maven工程:

  1. hadoop-assemblies
  2. hadoop-client
  3. hadoop-common-project
  4. hadoop-dist
  5. hadoop-hdfs-project
  6. hadoop-mapreduce-project
  7. hadoop-maven-plugins
  8. hadoop-minicluster
  9. hadoop-project
  10. hadoop-project-dist
  11. hadoop-tools
  12. hadoop-yarn-project

上面各个功能模块的含义已经超出本文的主题,所以我不打算介绍。将上面的源码放在一个地方,比如,我放在/home/wyp/hadoop文件夹中,下面提供几种Hadoop源码的编译方式及说明

  1. 如果不需要native code、忽略测试用例和文档,可以用下面的命令创建二进制分发版:
  2. [[email protected] /home/wyp/hadoop]$ mvn package -Pdist -DskipTests -Dtar
  3. 创建二进制分发版,带native code和文档:
  4. [[email protected] /home/wyp/hadoop]$ mvn package -Pdist,native,docs -DskipTests -Dtar
  5. 创建源码分发版
  6. [[email protected] /home/wyp/hadoop]$ mvn package -Psrc -DskipTests
  7. 创建二进制带源码分发版,带native code和文档:
  8. [[email protected] /home/wyp/hadoop]$ mvn package     \
  9. -Pdist,native,docs,src -DskipTests -Dtar
  10. 创建本地版web页面,放在/tmp/hadoop-site
  11. [[email protected] /home/wyp/hadoop]$ mvn clean site; mvn      \
  12. site:stage -DstagingDirectory=/tmp/hadoop-site

上面提供了几种Hadoop源码的编译方式(参考文档:http://svn.apache.org/repos/asf/hadoop/common/trunk/BUILDING.txt),大家可以根据自己的需求选择不同的编译方式,但是这里我推荐第一种编译方式。我们可以将编译好的模块覆盖掉${HADOOP_HOME} /share/hadoop目录中对应模块里面的jar文件,然后重启Hadoop集群则新的编译包将生效。

  远程调试Hadoop

  远程调试对应用程序开发十分有用,那如何调试Hadoop源码?这里介绍如何用IDE远程调试Hadoop源码。本文以IntelliJ IDEA作为IDE,以调试Jobhistory WEB UI代码为例进行说明。
  第一步:在启动Hadoop历史服务器进程之前在终端加入以下环境配置:

  1. [[email protected] /home/wyp/hadoop]$ export HADOOP_OPTS="-Xdebug        \
  2. -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888"

复制代码

这里对上面的几个参数进行说明:-Xdebug 启用调试特性-Xrunjdwp 启用JDWP实现,包含若干子选项:transport=dt_socket JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。address=8888 JVM在8888端口上监听请求,这个设定为一个不冲突的端口即可。server=y y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。suspend=y y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。

第二步:启动Jobhistory进程

  1. [[email protected] /home/wyp/hadoop]$ ${HODOOP_HOME}/sbin/mr-jobhistory-daemon.sh  \ start historyserver
  2. starting historyserver, logging to /home/wyp/Downloads/\
  3. hadoop/logs/mapred-wyp-historyserver-master.out
  4. Listening for transport dt_socket at address: 8888

上面的Listening for transport dt_socket at address: 8888表明jobhistory已经在端口为8888启动了远程调试。
  第三步:打开IntelliJ IDEA,找到hadoop-2.2.0-src\hadoop-mapreduce-project\hadoop-mapreduce-client\hadoop-mapreduce-client-hs\src\main\java\org\apache\hadoop\mapreduce\v2\hs\webapp\HsController.java类,在里面设置一些断点,然后依次选择菜单 Run->Run…->Edit Configurations…->选择左上角的+号->Remote,这时右边将会出现一个Configuration页面进行远程调试配置,请在Host和Port文本框里面输入jobhistory服务所在主机的IP及刚刚的8888端口,然后选择OK。这时候IDE进入了远程调试模式,你可以和普通的调试一样调试Hadoop源码。调试其他的Hadoop源码道理和上面的一样,这里就不一一列举了。

时间: 2024-10-12 06:25:55

Hadoop源码编译与调试汇总的相关文章

Win7+VS2010:mysql 源码编译与调试

win7+vs2010源码编译mysql 最近由于在实习,工作重点在于一些数据库的开发,为了更好的理解数据库的实现机制,目前萌生了要研究一下mysql数据库源码的想法.那么好吧,说干就干,首先我们需要实现对源码的编译,这里我们选择win7+VS2010来实现,但是试了很多次都失败了.这是我多次配置环境时遇到的问题,各种博客文章总是不太完全,或者说没有说明一些遇到的问题的解决方案,这可能跟具体的操作系统和环境有关.本文就说说我安装的情况. 1. 准备工作 (1)OS:win7 旗舰版 64位 + 

Hadoop源码编译过程

一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通过本地库,Hadoop可以更加高效地执行某一些操作. native目录是本地库,位于hadoop-2.x.x/lib/native目录下,仅支持linux和unix操作系统. hadoop中的zlib和gzip模块会加载本地库,如果加载失败,会提示: 16/07/06 12:18:24 WARN u

hadoop源码编译——2.5.0版本

强迫症必治: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 为了去掉这个警告! 这个本地库是需要根据当前所用的环境编译的,否则就会出现这个警告,但是对我们的任务处理没什么影响. (但有博主提出:官方给的编译后的包是基于32位jvm编译的,在64位jvm上运行,不能发挥性能优势),既然不

Hadoop源码编译

下载软件1:jdk 安装: 2:安装maven http://maven.apache.org/download.cgi 安装需求下载需要版本人下载3.5.0解压: tar -zxvf apache-maven-3.5.0-bin.tar.gz 到 配置maven环境变量 mvn -version 验证maven是否安装成功.为了提高 编译速度 修改 maven源为阿里云源对 maven setting.xml文件作如下修改<mirrors> <mirror> <id>

hadoop 源码编译

1.准备jar 1) hadoop-2.7.2-src.tar.gz 2) jdk-8u144-linux-x64.tar.gz 3) apach-ant-1.9.9-bin.tar.gz 4) apache-maven-3.0.5-bin.tar.gz 5) protobuf-2.5.0.tar.gz 2. 2.1.maven 配置 下载 3.0.5 版本 https://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/ 放到 /opt

Win7 32bit下hadoop2.5.1源码编译与平台搭建中遇到的各种错误

本文从一个小白在安装hadoop遇到的各种困难和错误说起,也希望得到大神的指点. 首先hadoop更新很快,最新的是hadoop2.5.1,因此就介绍下在安装2.5.1时遇到的各种困难. 如果直接准备在系统上安装binary版本的,可以参考http://www.cnblogs.com/kinglau/p/3270160.html.在下载好hadoop文件时,一定要注意下载的hadoop版本是否与本机的系统版本相对应,如32bit的还是64bit的,否则在执行start-all.sh时会报错.我就

hadoop 2.5.2源码编译

编译过程漫长无比,错误百出,需要耐心耐心!! 1.准备的环境及软件 操作系统:Centos6.4 64位 jdk:jdk-7u80-linux-x64.rpm,不要使用1.8 maven:apache-maven-3.3.3-bin.tar.gz protobuf:protobuf-2.5.0.tar.gz 注:谷歌的产品,最好是提前百度准备一下这个文件 hadoop src:hadoop-2.5.2-src.tar.gz     hadoop的官网下载 ant:apache-ant-1.9.6

源码编译绕过反调试

参考师弟的贴子修改的, 基本我一次就弄好了, 没有遇到啥问题, 下面我主要是补充下他的帖子 http://bbs.pediy.com/showthread.php?t=213481 一. 环境搭建 (1). 环境介绍: 手机:nexus 5 ubuntu版本:15.10 android版本:4.4.4 android源码官网(这里有很多相关的资料,基本上按照官网的来就可以编译想编译的任何版本了) http://source.android.com/source/ (2). 环境配置 配置环境得好

编译Hadoop源码

背景: 在阅读hadoop源代码过程中会发现部分类或者函数无法找到,这是由于Hadoop2.0使用了Protocol Buffers定义了RPC协议, 而这些Protocol Buffers文件在Maven编译源代码才会生成对应的java类,因此若其他类在源代码中引用这些类则暂时无法找到. 解决办法就是先对hadoop源码进行编译,再导入eclipse工程. 一.基础软件: 软件 下载地址 推荐版本 JDK http://www.oracle.com/technetwork/java/javas