ant 编译 hadoop eclipse plugin 并修改权限问题

之前搭建的一个hadoop 0.22.0的环境,打算自己用用,结果发现插件各种出问题,于是就决定自己编译一个。

在自己搭建的hadoop环境中编译eclipse插件的过程中问题百出。但最终编译成功了,过段时间搭建一个2.x版本的试用吧,这个太老了,我认为编译的过程基本相似,只是新版可能目录结构变动了。


总结步骤如下。
环境信息:
hadoop : 0.22.0
jdk : java version "1.7.0_25"
eclipse : 4.2
ant : 1.9.3




1、部署编译插件的工程。导入$HADOOP_HOME/mapreduce/src/contrib/eclipse-plugin 项目(这是一个编译插件的项目)到eclipse。
2、从$HADOOP_HOME/mapreduce/src/contrib下拷贝build-contrib.xml 到eclipse-plugin项目根目录,并进行如下修改:
<property name= "name" value= "${ant.project.name}" />
  <property name= "root" value= "${basedir}"/>
<!-- new add property -->
  <property name= "eclipse.home" value= "/opt/eclipse" />
<!-- new add property -->
  <property name= "version" value= "0.22.0" />
...code..
<!--modify  -->
  <property name= "hadoop.root" location= "/opt/hadoop022/mapreduce" />


3、修改libraries.properties文件中版本配置。
hadoop-common.version=0.22.0
hadoop-hdfs.version=0.22.0
其中文件位置在:
$HADOOP_HOME/mapreduce/ivy;
eclipse-plugin项目/ivy;
备注:由于build.xml中配置<loadproperties srcfile="${ivy.dir}/libraries.properties"/>
  <loadproperties srcfile="${hadoop.root}/ivy/libraries.properties"/>,所以这里最好把libraries都修改了。


4、修改eclipse-plugin项目根目录下的build.xml.
    4.1 修改<import file="../build-contrib.xml" /> 为 <import file="./build-contrib.xml" /> 或 <import file="build-contrib.xml" />
     指定为同级目录
    4. 2    修改target为jar的配置内容。
     <target name="jar" depends="compile" unless="skip.contrib">
    <mkdir dir="${build.dir}/lib"/>
    <copy todir="${build.dir}/lib">
        <fileset dir="${hadoop.root}/build/ivy/lib/Hadoop/common" includes="*.jar" excludes="hadoop-common-test-*.jar"/>
    </copy>
    <jar
      jarfile="${build.dir}/hadoop-${version}-${name}.jar"
      manifest="${root}/META-INF/MANIFEST.MF">
      <fileset dir="${build.dir}" includes="classes/ lib/"/>
      <fileset dir="${root}" includes="resources/ plugin.xml"/>
    </jar>
  </target>
    备注:这个是最终生成jar的target配置,需要注意的是目录都是基于变量的,要检查你自己的是否正确(每个人的习惯不一样,可能目录都不同)。其中manifest是让我头疼了2个小时的地方,开始没注意,导致编译成功了,但是插件放到eclipse中就提示各种诡异的异常,缺包、空指针等等。原因就是manifest指定的配置文件路径不是我修改的那个路径,结果就在编译期使用了默认配置,Bundle-classpath中是默认的,很多依赖包没配进去。


5、拷贝依赖的jar。
    新建${hadoop.root}/build/ivy/lib/Hadoop/common目录。
    从hadoop目录中拷贝${hadoop.root}/build/ivy/lib/Hadoop/common下。
    所有包名如下:
    lib/commons-cli-1.2.jar,lib/commons-codec-1.4.jar,lib/commons-collections-3.2.1.jar,lib/commons-httpclient-3.1.jar,lib/commons-lang-2.5.jar,lib/commons-logging-1.1.1.jar,lib/guava-r09.jar,lib/hadoop-common-0.22.0.jar,lib/jackson-core-asl-1.7.3.jar,lib/jackson-mapper-asl-1.7.3.jar,lib/log4j-1.2.16.jar,lib/hadoop-hdfs-0.22.0.jar,lib/hadoop-mapred-0.22.0.jar,lib/hadoop-mapred-tools-0.22.0.jar
    备注:hadoop开头的包在${hadoop.root}/;
                其他包在${hadoop.root}/lib中,这里面很多包,别搞错了。
    友情提示:这些包名也是要配置在4中提及到的manifest.mf的Bundle-classpath。


6、在eclipse-plugin项目的META-INF下修改MANIFEST.MF,完整 内容:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: MapReduce Tools for Eclipse
Bundle-SymbolicName: org.apache.hadoop.eclipse;singleton:=true
Bundle-Version: 0.18
Bundle-Activator: org.apache.hadoop.eclipse.Activator
Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.jdt.launching,org.eclipse.debug.core,org.eclipse.jdt,org.eclipse.jdt.core,org.eclipse.core.resources,org.eclipse.ui.ide,org.eclipse.jdt.ui,org.eclipse.debug.ui,org.eclipse.jdt.debug.ui,org.eclipse.core.expressions,org.eclipse.ui.cheatsheets,org.eclipse.ui.console,org.eclipse.ui.navigator,org.eclipse.core.filesystem,org.apache.commons.logging
Eclipse-LazyStart: true
Bundle-ClassPath: classes/,lib/commons-cli-1.2.jar,lib/commons-codec-1.4.jar,lib/commons-collections-3.2.1.jar,lib/commons-httpclient-3.1.jar,lib/commons-lang-2.5.jar,lib/commons-logging-1.1.1.jar,lib/guava-r09.jar,lib/hadoop-common-0.22.0.jar,lib/jackson-core-asl-1.7.3.jar,lib/jackson-mapper-asl-1.7.3.jar,lib/log4j-1.2.16.jar,lib/hadoop-hdfs-0.22.0.jar,lib/hadoop-mapred-0.22.0.jar,lib/hadoop-mapred-tools-0.22.0.jar
Bundle-Vendor: Apache Hadoop


7、开始编译。如果在eclipse中那么打开build.xml,右键run as ant,或者从终端进入eclipse-plugin项目根目录下,ant compile,会提示:
[hadoop@slaver1 eclipse-plugin]$ ant compile
Buildfile: /home/hadoop/workspace/eclipse-plugin/build.xml
check-contrib:
init:
     [echo] contrib: eclipse-plugin
        .......
compile:
     [echo] contrib: eclipse-plugin
     [echo] contrib: liqi: /home/hadoop/workspace/eclipse-plugin/src/java
    [javac] /home/hadoop/workspace/eclipse-plugin/build.xml:71: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 45 source files to /usr/hadoop/mapreduce/build/contrib/eclipse-plugin/classes
    [javac] 注: 某些输入文件使用或覆盖了已过时的 API。
    [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
    [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
    [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
BUILD SUCCESSFUL
Total time: 7 seconds


说明compile成功了。继续 ant jar,提示信息如下:
[hadoop@slaver1 eclipse-plugin]$ ant jar
Buildfile: /home/hadoop/workspace/eclipse-plugin/build.xml
check-contrib:
init:
     [echo] contrib: eclipse-plugin
init-contrib:
.......


compile:
     [echo] contrib: eclipse-plugin
     [echo] contrib: liqi: /home/hadoop/workspace/eclipse-plugin/src/java
    [javac] /home/hadoop/workspace/eclipse-plugin/build.xml:71: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
jar:
    [mkdir] Created dir: /usr/hadoop/mapreduce/build/contrib/eclipse-plugin/lib
     [copy] Copying 15 files to /usr/hadoop/mapreduce/build/contrib/eclipse-plugin/lib
      [jar] Building jar: /usr/hadoop/mapreduce/build/contrib/eclipse-plugin/hadoop-0.22.0-eclipse-plugin.jar
BUILD SUCCESSFUL
Total time: 4 seconds


到这里已经编译出插件包/usr/hadoop/mapreduce/build/contrib/eclipse-plugin/hadoop-0.22.0-eclipse-plugin.jar。


8、拷贝hadoop-0.22.0-eclipse-plugin.jar到$eclipse/plugins下,重启eclipse,打开window->preferences->hadopp map/reduce 配置hadoop的目录。这是就能看到小象了。如果看不到打开window->open perspective 找到小象 或者window-> show view 找到小象。
    在eclipse的hadopp map/reduce locations视图中new 一个,配置ip和port等即可访问hadoop。
    这部分如果不会可以网上查,本文重点是生成可用插件。


9、很不幸,你还在继续看。如果在执行1-7后,没错误提示,并不代表插件包是可用的,有可能在8中出现各种奇葩问题。
    我遇到的问题列表:
 9.1 在ant compile时,ivy会下载一些依赖包,其中卡在了hadoop-common-0.22.0.jar 的下载,我发现wget 的url已经打不开了,原来apache已经没有维护hadoop-common-0.22.0.jar了。无奈只好下载了一个,这样需要告诉ivy使用本地的jar,所以打开build.xml注掉ivy-download的配置:
<!--
  <target name="ivy-download" description="To download ivy " unless="offline">
    <get src="${ivy_repo_url}" dest="${ivy.jar}" usetimestamp="true"/>
  </target>
-->
 同时去掉 <target name="ivy-init-antlib" depends="ivy-download,ivy-probe-antlib" unless="ivy.found">中 depends 项ivy-download。让ivy使用本地依赖jar。
 9.2 如果9.1配置后,进行ant compile时提示缺hadoop的一些包(fs、maper等),那么说明你的依赖包在本地没有配置好。具体做法修改build.xml:
        <!-- add hadoop jar -->
        <path id="hadoop-jars">
        <fileset dir="${hadoop.root}/build/ivy/lib/Hadoop/common">
        <include name="hadoop-*.jar"/>
        </fileset>
         </path>
  <!-- Override classpath to include Eclipse SDK jars -->
  <path id="classpath">
    <pathelement location="${build.classes}"/>
    <pathelement location="${hadoop.root}/build/classes"/>
    <path refid="eclipse-sdk-jars"/>
    <path refid="contrib-classpath"/>
    <path refid="hadoop-jars"/>
  </path>
    备注:build.xml中指定的classpath就是ant使用的本地包位置,由于我们在9.1停止ivy在网上下载依赖包,那么必须保证这些包在本地有一份,并配置在classpath中,path id=“hadoop-jars" 就指明了本地依赖的位置。


    至此,整个配置和编译都结束了,我生成了插件并在eclipse中使用没有问题。还要说明的是如果要自己来编译插件,最好有ant或maven的基础,明白配置文件的含义很多问题基本就解决了。


    补充:windows eclipse 连接远程hadoop环境进行开发调试。
    上面的插件配置好了之后就可以在windows本地eclipse中开发mr程序了,开始会遇到几个问题。
    1、org.apache.hadoop.security.AccessControlException: Permission denied: user=Admin。。。。。
    这是hadoop-eclipse插件在提交job时会按照windows用户来提交,那么在hadoop的jobtracker中如果没配置这个用户,会被拦截,解决这个问题的方法有两种。第一个你可以修改打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了,第二个是采用多用户方式,在服务器主机上添加客户端用户以及hadoop默认组名:


groupadd supergroup 
useradd -g supergroup -n li.qi
修改hadoop集群中hdfs文件的组权限使属于supergroup组的所有用户都有读写权限
hadoop fs -chmod 773 /






    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值