hadoop编译生成jar包
Ⅰ 如何重新编译hadoop jar包
首先我们要打包程序,,打包完毕,我们该如何运行
首先显示一个比较简单的:
上面命令:hadoop jar x.jar 是运行包的一种方式,完成的方式为
hadoop jar x.jar ×××.MainClassName inputPath outputPath
同时解释一下:
x.jar为包的名称,包括路径,直接写包名称,则为默认路径
×××.MainClassName为运行的类名称
inputPath为输入路径
outputPath为输出路径。
Ⅱ 求教,zookeeper 修改源码后如何重新生成jar包
adoop的release二进制包,将common、HDFS和MapRece都打包在hadoop-0.20.0-core.jar一个JAR文件中,但如果使用eclipse编译,则会分别生成三个不同的包文件,如:hadoop-core-0.22.0-SNAPSHOT.jar,hadoop-hdfs-0.22.0-SNAPSHOT.jar和hadoop-mapred-0.22.0-SNAPSHOT.jar,如何使用eclipse编译生成的JAR了?方法很简单:将eclipse编译生成的core、和三个JAR文件放到hadoop/lib目录下,将原hadoop目录下的hadoop-0.20.0-core.jar删除或重命名成不以“.jar”结尾的名字即可,master和slave节点都应当如此操作方可。另外,不同的版本FSImage格式可能不一致,具体请查看:http://bbs.hadoopor.com/thread-387-1-1.html。如果想按照自己的需求或规则存放JAR,那么可以修改bin/hadoop脚本的如下等代码段:# for releases, add core hadoop jar & webapps to CLASSPATHif [ -d "$HADOOP_HOME/webapps" ]; then CLASSPATH=${CLASSPATH}:$HADOOP_HOMEfi// 下面三行可以考虑删除,因为JAR直接放到了lib目录下for f in $HADOOP_HOME/hadoop-*-core.jar; do CLASSPATH=${CLASSPATH}:$f;done# add libs to CLASSPATHfor f in $HADOOP_HOME/lib/*.jar; do CLASSPATH=${CLASSPATH}:$f;done复制代码更多可修改的地方请查看hadoop文件,如果是一位java熟手,完成上面的操作应当是非常容易的,主要是理解classpath,之后怎么折腾都可以,相当于C中的LD_LIBRARY_PATH要设置好一样,而且有先后顺序关系 .在Haoop的release中common、HDFS和MapRece只有一个包文件,而使用eclipse分开编译也只生成了三个包文件。如果频繁修改、编译和测试,效率会很低,所以最好可以再在common、HDFS和MapRece之下分解成多个不同的包,比如common中的ipc、conf、util和net等就可以独立成一个JAR文件。
Ⅲ 编译hadoop eclipse插件要联网么
这里用到的hadoop版本是1.1.2,但此插件的编译方面在1.2.0下也通过。)
1)hadoop的eclipse插件源码位于hadoop.home(这里的hadoop.home为你的hadoop主目录)/src/contrib/eclipse-plugin。
ant不外乎是一个build.xml,我们先拿它开刀。
我们找到<target name="jar",里面的元素<相关的先全部删了,然后添加如下的,当然,这里的hadoop-core-XXX.jar,这个XXX是版本号,请根据你下载的hadoop的版本进行设置,也可以在后面的build-contrib.xml中进行设置,这里用变量进行替换,等一下我们再看。
< file="${hadoop.root}/hadoop-core-1.1.2.jar" tofile="${build.dir}/lib/hadoop-core.jar" verbose="true"/>
< file="${hadoop.root}/lib/commons-cli-1.2.jar" todir="${build.dir}/lib" verbose="true"/>
< file="${hadoop.root}/lib/commons-configuration-1.6.jar" tofile="${build.dir}/lib/commons-configuration-1.6.jar" verbose="true"/>
< file="${hadoop.root}/lib/commons-httpclient-3.0.1.jar" tofile="${build.dir}/lib/commons-httpclient-3.0.1.jar" verbose="true"/>
< file="${hadoop.root}/lib/commons-lang-2.4.jar" tofile="${build.dir}/lib/commons-lang-2.4.jar" verbose="true"/>
< file="${hadoop.root}/lib/jackson-core-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-core-asl-1.8.8.jar" verbose="true"/>
< file="${hadoop.root}/lib/jackson-mapper-asl-1.8.8.jar" tofile="${build.dir}/lib/jackson-mapper-asl-1.8.8.jar" verbose="true"/>
网上很多文章都说只要这一步就OK了,但实验证明,我们编译的时候会出现找不到类的情况,主要是没有加载那些JAR包。
2)添加JAR包到classpath
还是build.xml文件中,我们找到<path id="classpath">
在其末尾加上:
<fileset dir="${hadoop.root}">
<include name="*.jar"/>
</fileset>
这里把hadoop根目录下的所有JAR包加入到classpath,至于这里为什么要加,我没怎么用Ant,就留给有兴趣的朋友去研究了。
3)改完上面的,当我们在编译的时候,那些需要的JAR包并没有同时添加到生成的JAR内,这样会有错误,所以我们要修改MANIFIEST.MF文件,相信搞过可运行JAR包的朋友都清楚这个文件用一个JAR来说是多么的重要。
在同级目录下找到META-INF/MANIFEST.MF,找到Bundle-ClassPath:,然后添加如下:
classes/,lib/hadoop-core.jar,lib/commons-configuration-1.6.jar,lib/commons-httpclient-3.0.1.jar,lib/commons-lang-2.4.jar,lib/jackson-core-asl-1.8.8.jar,lib/commons-cli-1.2.jar
注意,这一大段不要换行,否则在生成JAR包时会报错。
4)加完这些,可以说实际上编译就已经OK了,但我们需要跟特定的eclipse相结合,所以我们需要配置eclipse的路径,回到我们刚才build.xml文件的上层文件夹,也就是hadoop.home/src/contrib文件夹下。
找到build-contrib.xml文件,找到project,在property最前面加多一个:
<property name="eclipse.home" value="D:/developerTools/eclipse/eclipse" />
这里的D:/xxx是我的eclipse安装路径,注意,需要把原来windows下的\换成linux样式的/,否则会有问题的。
接下来就开始我们正式的编译工作了,假设ant那些我们都配置好了,已经在path中了,并且ant版本高于1.7.2(建议下最新的),然后我们直接在cmd下执行:
可以看到这样的结果:
这里已经生成成功了,接下来我们就可以到hadoop.home/build/contrib/eclipse-plugin下找到hadoop-eclipse-plugin-${version}.jar这样的一个文件,${version}是什么来的?
这里就涉及到一个前面说的版本变量的问题,我们在build-contrib.xml的eclipse.home下面添加一个:
<property name="version" value="1.1.2" />
这里的版本号请根据你自己下的版本来填,填好后,我们再生成后,就可以看到hadoop-eclipse-plugin-1.1.2.jar这样的一个JAR包,这个版本号根据你设的version值来生成的。
我在另外一台电脑编译时,遇到了报找不到log4j配置文件的错误,类似什么master之类的,如果遇到类似这样的错误,错误如下:
可以尝试修改ivy.xml,把里面的dependency里面的conf里面的master修改为default,一般就可以解决了,这个暂时没发现是什么造成的,遇到类似的问题就可以找找ivy.xml里面的问题。
编译完成后,我们把hadoop-eclipse-plugin-XXX.jar包丢进eclipse的plugins目录下,然后重启eclipse就OK了,启动后就可以看到Map/Rece窗口了,这也方便我们运行WordCount等例子。
Ⅳ hadoop 程序 打成jar包 跑测试时 报错(在eclipse里面正常运行)
WARNmapred.JobClient:..
看到警告了没? 你的代码有问题。
所有的map task已完成,证明你的map class没有问题, rece task failed (rece task ID: attempt_201312060554_0003_r_000000_0),证明你的rece class没有办法正常运行。GenericOptionsParser可以被ToolRunner类使用,所以有可能是你没有implements Tool inteference, 也可能是你的code 有错误。贴出代码来。
Ⅳ 如何在hadoop2.5.2使用命令行编译打包运行自己的maprece程序
在你的IDE中将程序打成jar包,之后在shell中:
hadoopjarjar包名包名.类名
或者参考hadoop streaming:
http://hadoop.apache.org/docs/r2.5.2/hadoop-maprece-client/hadoop-maprece-client-core/HadoopStreaming.html
Ⅵ eclipse下怎么打包java代码成jar到hadoop下运行
(1)首先将好的Hadoop源码解压,将解压后顶级目录和lib中的压缩文件加载到你的工程中(他们包括了hadoop源码和一些需要的第三方源码),然后就可以编写hadoop程序了。
(2)编写好hadoop程序,调试没有错误后,就可以通过(jar -cvf yourname.jar -C bin/ .),将工程中bin目录下编译好的.class文件打包成你想要的.jar压缩文件包。
(3)将yourname.jar压缩包复制到你的hadoop目录下,通过命令hadoop jar yourname.jar yourMainClass /data/inputfile /data/outputfile。如果是在完全分布式的hadoop配置环境下,需要通过hadoop命令在hadoop的hdfs系统中创建文件目录然后将本地的输入数据复制到hdfs系统中,命令有:
hadoop fs -mkdir data:创建一个名问data的文件夹
hadoop fs -ls :查看hdfs文件系统中的文件目录
hadoop fs -FromLocal /data/input /user/data :将本地文件input复制到hdfs系统的/user/data目录下
hadoop fs -ToLocal /user/data/output/ /data/ :将hdfs系统中的output文件夹复制到本地系统中。
Ⅶ 如何在hadoop-2.6.0上编译运行自己编写的java代码
在不使用eclipse情况使java程序在hadoop 2.2中运行的完整过程。整个过程中其实分为java程序的编译,生成jar包,运行测试。
这三个步骤运用的命令都比较简单,主要的还是如何找到hadoop 2.2提供给java程序用来编译的jar包。具体可以查看:
HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib目录
下面会通过一个在hadoop中创建一个目录的JAVA例子来进行演示
具体代码如下:
package com.wan.demo;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HADemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
mkdir(args[0]);
}
public static void mkdir(String dir){
Configuration configuration=new Configuration();
FileSystem fs;
try {
fs = FileSystem.get(configuration);
fs.mkdirs(new Path(dir));
fs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
把HADemo.java文件拷贝到linux环境中
配置HADOOP_HOME/bin到环境中,启动集群,进入HADemo.java文件目录中
注:下面的lib目录里面的文件由HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/ webhdfs/WEB-INF/lib目录中获取,下面做的目的是为了缩减命令长度
1.编译java
# mkdir class
#Javac -classpath .:lib/hadoop-common-2.2.0.jar:lib/hadoop-annotations-2.2.0.jar -d class HADemo.java
2.生成jar包
#jar -cvf hademo.jar -C class/ .
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/wan/(in = 0) (out= 0)(stored 0%)
adding: com/wan/demo/(in = 0) (out= 0)(stored 0%)
adding: com/wan/demo/HADemo.class(in = 844) (out= 520)(deflated 38%)
3.测试运行
#hadoop jar hademo.jar com.wan.demo.HADemo /test
检测:
#hadoop fs -ls /
结束!
Ⅷ 如何在Windows中使用Intellij idea搭建远程Hadoop开发环境
(1)准备工作
1) 安装JDK 6或者JDK 7
2) 安装scala 2.10.x (注意版本)
2)下载Intellij IDEA最新版(本文以IntelliJ IDEA Community Edition 13.1.1为例说明,不同版本,界面布局可能不同)
3)将下载的Intellij IDEA解压后,安装scala插件,流程如下:
依次选择“Configure”–> “Plugins”–> “Browse repositories”,输入scala,然后安装即可
(2)搭建Spark源码阅读环境(需要联网)
一种方法是直接依次选择“import project”–> 选择spark所在目录 –>
“SBT”,之后intellij会自动识别SBT文件,并下载依赖的外部jar包,整个流程用时非常长,取决于机器的网络环境(不建议在windows
下操作,可能遇到各种问题),一般需花费几十分钟到几个小时。注意,下载过程会用到git,因此应该事先安装了git。
第二种方法是首先在linux操作系统上生成intellij项目文件,然后在intellij IDEA中直接通过“Open
Project”打开项目即可。在linux上生成intellij项目文件的方法(需要安装git,不需要安装scala,sbt会自动下载)是:在
spark源代码根目录下,输入sbt/sbt gen-idea
注:如果你在windows下阅读源代码,建议先在linux下生成项目文件,然后导入到windows中的intellij IDEA中。
(3)搭建Spark开发环境
在intellij IDEA中创建scala project,并依次选择“File”–> “project structure”
–> “Libraries”,选择“+”,将spark-hadoop
对应的包导入,比如导入spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar(只需导入该jar
包,其他不需要),如果IDE没有识别scala 库,则需要以同样方式将scala库导入。之后开发scala程序即可:
编写完scala程序后,可以直接在intellij中,以local模式运行,方法如下:
点击“Run”–> “Run Configurations”,在弹出的框中对应栏中填写“local”,表示将该参数传递给main函数,如下图所示,之后点击“Run”–> “Run”运行程序即可。
如果想把程序打成jar包,通过命令行的形式运行在spark 集群中,可以按照以下步骤操作:
依次选择“File”–> “Project Structure” –> “Artifact”,选择“+”–>
“Jar” –> “From Moles with
dependencies”,选择main函数,并在弹出框中选择输出jar位置,并选择“OK”。
最后依次选择“Build”–> “Build Artifact”编译生成jar包。