hadoop2.2.0运行权威指南URLCat.java程序的步骤和结论
2014-07-20 17:12
573 查看
基本配置:两台服务器作为datanode,跟一台台式机作为namenode,均为centos系统,不过只有一台服务器为64位系统,其他为32位。在win7下通过secureCRT远程登录namenode。
使用samba设置共享文件夹,参考:
/article/4778196.html
在hadoop2.2.0中运行程序,这里的程序选择hadoop权威指南第三章中的URLCat.java程序:
1. 通过javac运行程序命令,注意添加classpath:
生成URLCat.class文件。
2. 再通过jar命令生成jar包URLCat.jar:
3. 再将jar包文件移动到hadoop-common-2.2.0.jar所在的目录:
使用hadoop命令运行,注意hadoop运行时的参数,指定jar包,指定类名,指定目标问题test2.txt:
显示hello hadoop证明成功。
--------------------------------------------------------------------------------------------------------------------------------
此外,实验证明同样可以将hadoop命令类似于java命令使用,在包含有URLCat.java的文件夹下运行:
同样运行成功,不过使用这种方式要注意程序中的包依赖关系。
--------------------------------------------------------------------------------------------------------------------------------
当然更简单的方法是下载hadoop权威指南的源代码,使用maven命令打包即可:
显示hello hadoop证明运行成功。
权威指南提到有几种不同的调用可以用来实现URLCat功能,如下:
上面的程序运行时,会输出4行hello world。实验表明在使用Eclipse远程连接Linux下的hadoop时,尽管方面但是速度非常慢,相比之下,在Linux下直接运行程序速度正常。此外要注意,将Eclipse中的程序拷贝到Linux下运行时,要去掉包名重新编译成class文件,之后到Linux下打成jar再运行,否则提示找不到类。
使用samba设置共享文件夹,参考:
/article/4778196.html
在hadoop2.2.0中运行程序,这里的程序选择hadoop权威指南第三章中的URLCat.java程序:
// cc URLCat Displays files from a Hadoop filesystem on standard output using a URLStreamHandler import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; // vv URLCat public class URLCat { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main(String[] args) throws Exception { InputStream in = null; try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out, 4096, false); } finally { IOUtils.closeStream(in); } } } // ^^ URLCat
1. 通过javac运行程序命令,注意添加classpath:
javac -classpath /home/hadoop-2.2.0/share/common/hadoop-common-2.2.0.jar URLCat.java
生成URLCat.class文件。
2. 再通过jar命令生成jar包URLCat.jar:
jar cvf ./URLCat.jar URLCat.class
3. 再将jar包文件移动到hadoop-common-2.2.0.jar所在的目录:
mv URLCat.jar /home/hadoop-2.2.0/share/hadoop/common
使用hadoop命令运行,注意hadoop运行时的参数,指定jar包,指定类名,指定目标问题test2.txt:
/home/hadoop-2.2.0/bin/hadoop jar URLCat.jar URLCat hdfs://master:9000/user/whdx/test2.txt
显示hello hadoop证明成功。
--------------------------------------------------------------------------------------------------------------------------------
此外,实验证明同样可以将hadoop命令类似于java命令使用,在包含有URLCat.java的文件夹下运行:
/home/hadoop-2.2.0/bin/hadoop URLCat hdfs://master:9000/user/whdx/test2.txt
同样运行成功,不过使用这种方式要注意程序中的包依赖关系。
--------------------------------------------------------------------------------------------------------------------------------
当然更简单的方法是下载hadoop权威指南的源代码,使用maven命令打包即可:
mvn package -DskipTests -Dhadoop.distro=apache-2 -Dhadoop.version=2.2.0得到打包的ch03-3.0.jar文件,然后就可以运行了:
#/bin/hadoop jar ch03-3.0.jar URLCat hdfs://master:9000/user/whdx/test1.txt
显示hello hadoop证明运行成功。
权威指南提到有几种不同的调用可以用来实现URLCat功能,如下:
/** 将 hdfs://10.8.0.1:9000/user/whdx/test1.txt 中的内容即helloworld输出到终端即System.out * 分别采用3种不同的方式 * 方式一:采用FsUrlStreamHandlerFactory * 方式二:采用FileSystem * 方式三:采用FSDataInputStream,并测试seek方法 * * 结论:在Eclipse远程连接Linux运行URLCat.java程序和在Linux下直接运行程序,速度差别很大 * 注意:Eclipse中的URLCatPro程序需要去除包名再编译成class文件再移动到Linux下打包成jar文件,使用hadoop运行, * 否则会出错,找不到类 */ //package hdg03; import java.io.InputStream; import java.net.URI; import java.net.URL; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org.apache.hadoop.io.IOUtils; public class URLCatPro { static { URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public static void main (String[] args) throws Exception { // method 1 , using FsUrlStreamHandlerFactory InputStream in = null; try { in = new URL(args[0]).openStream(); IOUtils.copyBytes(in, System.out,4096, false); }finally { IOUtils.closeStream(in); } // method 2 , using FileSystem String uri1 = args[0]; Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(uri1), conf); InputStream in1 = null; try { in1 = fs.open(new Path(uri1)); IOUtils.copyBytes(in1, System.out, 4096, false); } finally { IOUtils.closeStream(in1); } // method 3, using FSDataInputStream FSDataInputStream in2 = null; try { in2 = fs.open(new Path(uri1)); IOUtils.copyBytes(in2, System.out, 4096, false); in2.seek(0); IOUtils.copyBytes(in2, System.out, 4096, false); } finally { IOUtils.closeStream(in2); } } }
上面的程序运行时,会输出4行hello world。实验表明在使用Eclipse远程连接Linux下的hadoop时,尽管方面但是速度非常慢,相比之下,在Linux下直接运行程序速度正常。此外要注意,将Eclipse中的程序拷贝到Linux下运行时,要去掉包名重新编译成class文件,之后到Linux下打成jar再运行,否则提示找不到类。
相关文章推荐
- hadoop 运行 Java程序
- 在hadoop上运行java程序
- 原生态在Hadoop上运行Java程序
- 在Hadoop2.2.0上运行Wordcount小程序
- hadoop运行程序出现Error: Java heap space
- Hadoop 集群运行测试代码(Hadoop 权威指南天气数据示例)
- 把Java程序的编译和运行都集成到EditPlus里配置步骤
- 程序开过多线程,导致hadoop作业无法运行成功——Call to hadoop1:9000 failed on lo cal exception: java.io.IOException: Coul
- 原生态在hadoop上运行java程序
- eclipse 配置运行hadoop 2.7 程序例子参考步骤
- 原生态在hadoop上运行java程序
- java 程序访问hdfs错误 hadoop2.2.0
- [置顶] 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
- Heritrix eclipse创建java可运行程序的步骤
- hadoop上运行java程序
- Hadoop MapReduce示例程序WordCount.java手动编译运行解析
- hadoop2.2.0配置eclipse运行wordcount程序问题及解决方法
- Hadoop2.2.0源码分析(一)——Eclipse运行WordCount.java
- Hadoop MapReduce示例程序WordCount.java手动编译运行解析
- hadoop上运行Java程序