分享

不使用hadoop自带的插件,利用Ant构建Hadoop高效开发环境

本帖最后由 howtodown 于 2014-5-7 13:52 编辑
问题导读:
1.ant开发为什么被称之为高效开发?
2.ant开发是否需要发布?
3.Ant改造中会遇到什么问题,该如何解决?
4.遇到编码UTF-8 的不可映射字符该如何解决?





今天考虑使用Ant来搭建一个Hadoop的开发和调试环境,不使用hadoop自带的插件。

思路如下:
1、  利用Ant在开发机器上将代码编译、打包,最终得到可执行的jar包。
2、  利用Ant的SSH属性,将jar包传到hadoop服务器的指定工作目录。
这样就开发机器做为编码客户端,与执行服务器之间关联,代码部署的时间基本不用考虑,开发效率可以提高,也利于在真实环境进行验证程序。

再扩展开来,可以利用Ant操作hadoop服务器,实现与开发客户端的交互,因为Ant可以通过SSH实现Linux服务器的命令操作。

如下是根据需要改造的Ant的bulid.xml文件,实现了:目录清理、目录构建、编译、打包、SFTP上传功能:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="AntTest" default="all" basedir=".">
  3.         <property name="src" location="./src" />
  4.         <property name="build" location="./build/classes" />
  5.         <property name="dist" location="./lib" />
  6.         <path id="project.classpath">
  7.                 <fileset dir="D:\Project\Java\OpenSource\Hadoop\hadoop-0.20.205.0-bin\hadoop-0.20.205.0\lib">
  8.                         <include name="*.jar" />
  9.                 </fileset>
  10.         </path>
  11.         <target name="all" depends="clean,sshexec"></target>
  12.         <!-- Generate directory -->
  13.         <target name="init">
  14.                 <tstamp />
  15.                 <mkdir dir="${build}" />
  16.                 <mkdir dir="${dist}" />
  17.         </target>
  18.         <!-- compile java -->
  19.         <target name="compile" depends="init">
  20.                 <javac srcdir="${src}" destdir="${build}" includeantruntime="no">
  21.                         <compilerarg line="-encoding GBK " />
  22.                         <!-- 给编译器指定编码,防止出现:"警告: 编码 GBK 的不可映射字符"-->
  23.                         <classpath refid="project.classpath" />
  24.                 </javac>
  25.         </target>
  26.         <!-- jar -->
  27.         <target name="dist" depends="compile">
  28.                 <mkdir dir="${dist}" />
  29.                 <jar jarfile="${dist}/hadoop_project.jar" basedir="${build}" />
  30.         </target>
  31.         <!-- clean -->
  32.         <target name="clean">
  33.                 <delete dir="${build}" />
  34.                 <delete dir="${dist}" />
  35.                 <echo message="clean dir">
  36.                 </echo>
  37.         </target>
  38.         <!-- run -->
  39.         <target name="run" depends="dist">
  40.                 <java classpath="${build}" classname="demo.guide.chp7.HelloWorld">
  41.                         <classpath refid="project.classpath" />
  42.                         <!--         <classpath refid="${build}" />  -->
  43.                 </java>
  44.         </target>
  45.         <!-- sftp -->
  46.         <target name="sshexec" depends="run">
  47.                 <scp todir="root:****@192.168.9.181:/tmp/" trust="true">
  48.                         <fileset dir="${dist}" />
  49.                 </scp>
  50.         </target>
  51. </project>
复制代码


在Ant改造中,遇到了以下几个问题,特记录如下:
1、 Includeantruntime 问题:
运行报错:
compile:
[javac]D:\Project\Java\hadoop_workspace\hadoop_project\bulid.xml:37: warning:’includeantruntime’ was not set, defaulting to build.sysclasspath=last; set tofalse for repeatable builds
[javac] Compiling 1 sourcefile to D:\Project\Java\hadoop_workspace\hadoop_project\build\classes

原因及解决方法:
新版本的Ant需要设置Includeantruntime属性:
includeantruntime :指出是否应在类路径中包括 Ant 运行时程序库,默认为 yes。
这里设置为“no”即可解决。

2、 Error running javac.execompiler的错误
编译的时候,出现build.xml:32 Errorrunning javac.exe compiler 或者 build.xml:97: Unable tofind a javac compiler 的错误。

原因及解决方法:
这个原因是没有正确指定JRE的路径,javac找不到导致的。在Eclispe里面打开后,发现是默认到JRE的安装目录,这里修改为指向到JDK的目录即可解决。
修改的菜单路径为: Window–>Preferences–>Java–>InstalledJRES
增加JDK的目录并选中即可(取消之前的JRE目录的选择)。

3、 实现SFTP遇到Could notload a dependent class com/jcraft/jsch/Logger 的错误:
使用SFTP的时候,遇到Could not load a dependent class com/jcraft/jsch/Logger的错误,错误信息如下:
Could not load a dependent classcom/jcraft/jsch/Logger
It is not enough to have Ant’s optional JARs
you need theJAR files that the optional tasks depend upon.
Ant’s optional task dependencies arelisted in the manual.

原因及解决方法:
Ant自带的jsch的jar包存在问题,需要从官方网站下载后重新引入。
下载地址为:http://www.jcraft.com/jsch/index.html

下载后,在Window–>Preferences–>Ant–>Runtime中,添加外部jar引用,增加新的jsch的jar包即可。

4、 警告:编码UTF-8 的不可映射字符
Ant可以编译成功,但出现警告:编码 UTF-8 的不可映射字符

原因为项目编码为GBK的问题,两个办法可以解决:
1、  修改项目编码格式
2、  在ant的javac的编译节点中,增加以下属性:
<compilerargline=”-encodingGBK “/>
<!– 给编译器指定编码,防止出现:”警告: 编码 UTF-8 的不可映射字符”–>



本帖被以下淘专辑推荐:

欢迎加入about云群371358502、39327136,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(1)人评论

跳转到指定楼层
ainubis 发表于 2015-3-27 13:24:39
学习了(*^__^*) 嘻嘻……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条