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

[经验分享] Windows下使用ant编译hadoop的各种小问题

[复制链接]

尚未签到

发表于 2016-12-10 08:13:04 | 显示全部楼层 |阅读模式
  
      之前有同学已经写过非常详细的windows下如何编译hadoop的文档(参见《Hadoop开发者入门专刊》)。

           
1、关于hadoop的SVN下载。用给匿名用户(Anonymous Access (read-only))使用的SVN库的URL(
http://svn.apache.org/repos/asf/hadoop/common/
)去check out副本,始终无法成功。
可以使用开发者用户(
Committer Access (read-write)
)的库下载副本,下载后的内容是一样的。其URL是:
https://svn.apache.org/repos/asf/hadoop/common/
当然最好还是只下载trunk中的内容,否则下载的东西太多了。。

         
2、hadooprelease的jar包(如
hadoop-0.20.2.tar.gz
)中会包含所有编译需要的source。但若自己通过svn下载source,则需要分别下载common、hdfs、mapreduce、zookeeper几个不同的库,没办法一次性获得所有source,(当然如果不用trunk的话也可以,但是下载内容巨多...)。

         
3、0.20版的hadoop和0.21版的hadoop结构有了较大的改变。用两个release解压后的包中的内容作比较。0.20版的hadoop根目录下有一个ant使用的build.xml可以直接编译出
hadoop-0.20.2-core.jar
包。而0.21版的hadoop的根目录下已经没有这个build.xml文件了,其转而需要分别编译三个必须的jar包:
hadoop-common-0.21.0.jar、hadoop-hdfs-0.21.0.jar、hadoop-mapred-0.21.0.jar
.

         
4、在eclipse中用ant编译hadoop有两个方法,方法一:《Hadoop开发者入门专刊》中方法:新建ant的编译选项进行手工编译。方法二:将ant用的build.xml文件加入ant视图中,选择相应的参数进行编译。

编译过程中遇到的问题:

            问题1:
设置好用ant编译有如下错误提示(可能JAVA_HOME没有设置)BUILD FAILEDH:\FromApache\hadoop-0.20.2\build.xml:415: Unable to find a javac compiler;com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does not point to the JDK.It is currently set to "C:\Program Files (x86)\Java\jre6"但是实际上JAVA_HOME在操作系统环境变量里已经设置好了。其实关键这里提示是在eclipse中ant的classpath没有设置好,解决办法是在eclipse中:window->preferences->ant->runtime->classpath->global entries中,将jdk中的tools.jar加入。

          问题2
:提示警告:tty_list::allocate: No tty allocated 这个警告可以忽略。但是不知道为什么有些时候编译会再次提示后自动终止,原因不明。可能是修改过build.xm产生的错误。。(不纠缠了。。浪费太多时间 。。)

          问题3
:sh无法再cygwin下使用的问题,导致编译的错误。错误提示是: [javac] H:\FromApache\hadoop-0.20.2-new\build\src\org\apache\hadoop\package-info.java:5: 未结束的字符串字面值 [javac] user="***...在上述路径中打开package-info.java文件,发现其是由saveVersion.sh生成的。但是在cygwin下是无法使用sh的shell脚本的。所以,将build.xml中的以下内容注释掉,在windows上的这个问题就可以回避了。<!-- <exec executable="sh"> <arg line="src/saveVersion.sh ${version}"/> </exec>-->但是注意,这个问题很奇怪,在eclipse中用方法一第一次编译时,不是上面的错误提示,而是提示:“src\contrib\eclipse-plugin\src\java\org\apache\hadoop\eclipse\launch\HadoopApplicationLaunchShortcut.java*:35: cannot find symbol 。。。这样一组错误。但是,在命令行下,到hadoop根目录中执行:
ant jar
,则给出了最开始的提示。按这个提示注释掉saveVersion.sh后,再回到eclipse中按方法一编译就没有问题了。。(所以,目前来看最可靠的方法是在命令行下用ant加参数进行编译。。。)

            问题4
:在不同目录层次上创建java工程导致编译的问题:使用方法二在ant视图中点击jar参数运行,发生错误:BUILD FAILEDH:\FromApache\hadoop-0.20.2\src\build.xml:152: Source resource does not exist: H:\FromApache\hadoop-0.20.2\src\ivy\libraries.properties。其实打开工程目录会发现,ivy\libraries.properties不在src目录下,而是在hadoop-0.20.2根目录下。造成这个的错误原因在于build.xml文件会按环境变量拼接编译过程中需要使用的配置文件的路径(具体可参看build.xml)。我创建hadoop工程时,选择的源文件路径是...\hadoop-0.20.2\src,这就导致在工程里没有build.xml文件(该文件原始路径是在hadoop-0.20.2根目录下)。后来为了使用方法二编译,通过import导入这个文件,导入的文件实际上是从hadoop-0.20.2根目录下复制到...\hadoop-0.20.2\src目录下的一个副本,然后将此副本加入ant视图,用方法二编译时,其实build.xml的执行路径就变成了\hadoop-0.20.2\src目录而不是\hadoop-0.20.2\目录,所以,拼接的路径名就发生了错误。所以,创建工程时,选择的源文件路径注意要能包含build.xml这种ant编译文件,才能用方法二来进行编译。

          问题5
:编译出的文件名问题这个编译出的文件名可能和你下载的release版本名不一致,这个名字其实完全是由build.xml中设定的,所以,不必在意,如果需要用你自己修改代码后编译出的jar来替换原始的hadoop运行环境中的jar包。就把名字改的和原始hadoop运行环境中的jar包名一样然后替换即可。

          补充问题
:如果不用ant编译,则,需要为工程手工添加很多jar来保证工程编译。如果用ant,其会自动根据需要从网上下载相应的jar包,非常方便。当然,手工添加也不是很麻烦,因为这下jar包,基本都在release包中的lib目录下。偷懒的话,一次性全部加入即可。

  
更多信息请查看
 java进阶网
 
http://www.javady.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.yunweiku.com/thread-312092-1-1.html 上篇帖子: Hadoop作业提交多种方案具体流程详解 下篇帖子: 【转】Hadoop 中的两表join
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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