设为首页 收藏本站
查看: 723|回复: 0

[经验分享] 利用Ant构建Hadoop高效开发环境

[复制链接]

尚未签到

发表于 2016-12-8 11:24:40 | 显示全部楼层 |阅读模式

  最近Hadoop的研究中,都是利用Mockito来模拟数据进行,下一个阶段需要在Hadoop服务器上做大量的运行进行验证,同时也要为正式使用做准备。
  今天考虑使用Ant来搭建一个Hadoop的开发和调试环境,不使用hadoop自带的插件。
  思路如下:
  1、  利用Ant在开发机器上将代码编译、打包,最终得到可执行的jar包。
  2、  利用Ant的SSH属性,将jar包传到hadoop服务器的指定工作目录。
  这样就开发机器做为编码客户端,与执行服务器之间关联,代码部署的时间基本不用考虑,开发效率可以提高,也利于在真实环境进行验证程序。
   
  再扩展开来,可以利用Ant操作hadoop服务器,实现与开发客户端的交互,因为Ant可以通过SSH实现Linux服务器的命令操作。
  如下是根据需要改造的Ant的bulid.xml文件,实现了:目录清理、目录构建、编译、打包、SFTP上传功能:
view plain


  • <?xml version="1.0" encoding="UTF-8"?>  
  • <project name="AntTest" default="all" basedir=".">  
  •       
  •     <property name="src" location="./src" />  
  •     <property name="build" location="./build/classes" />  
  •     <property name="dist" location="./lib" />  
  •   
  •   
  •     <path id="project.classpath">  
  •         <fileset dir="D:\Project\Java\OpenSource\Hadoop\hadoop-0.20.205.0-bin\hadoop-0.20.205.0\lib">  
  •             <include name="*.jar" />  
  •         </fileset>  
  •     </path>  
  •   
  •     <target name="all" depends="clean,sshexec"></target>  
  •     <!-- Generate directory -->  
  •     <target name="init">  
  •         <tstamp />  
  •         <mkdir dir="${build}" />  
  •         <mkdir dir="${dist}" />  
  •     </target>  
  •   
  •     <!-- compile java -->  
  •     <target name="compile" depends="init">  
  •         <javac srcdir="${src}" destdir="${build}" includeantruntime="no">  
  •             <compilerarg line="-encoding GBK " />  
  •             <!-- 给编译器指定编码,防止出现:"警告: 编码 GBK 的不可映射字符"-->  
  •             <classpath refid="project.classpath" />  
  •         </javac>  
  •     </target>  
  •     <!-- jar -->  
  •     <target name="dist" depends="compile">  
  •         <mkdir dir="${dist}" />  
  •         <jar jarfile="${dist}/hadoop_project.jar" basedir="${build}" />  
  •     </target>  
  •   
  •     <!-- clean -->  
  •     <target name="clean">  
  •         <delete dir="${build}" />  
  •         <delete dir="${dist}" />  
  •         <echo message="clean dir">  
  •         </echo>  
  •     </target>  
  •   
  •     <!-- run -->  
  •     <target name="run" depends="dist">  
  •         <java classpath="${build}" classname="demo.guide.chp7.HelloWorld">  
  •             <classpath refid="project.classpath" />  
  •             <!--     <classpath refid="${build}" />  -->  
  •         </java>  
  •     </target>  
  •   
  •     <!-- sftp -->  
  •     <target name="sshexec" depends="run">  
  •         <scp todir="root:****@192.168.9.181:/tmp/" trust="true">  
  •             <fileset dir="${dist}" />  
  •         </scp>  
  •     </target>  
  •   
  • </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 的不可映射字符"-->
  时间:2011年10月23日
-------------------------------------------------------------------------------------------------------------------

 

作者:CNZQS|JesseZhang  个人博客:CNZQS(http://www.cnzqs.com)

版权声明:除非注明,文章均为原创,可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 

--------------------------------------------------------------------------------------------------------------------

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-311469-1-1.html 上篇帖子: hadoop+hive 做数据仓库 & 一些测试 下篇帖子: Hadoop 和DBMS 的互补性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表