Java调用Hadoop HDFS API编程

时间:2022-09-22 19:21:34

参考书目:hadoop real world solutions cookbook

源码的下载地址:http://www.packtpub.com/code_download/11101 ,可以下载到所有章节的代码。这里演示的是第二章 chapter2。

Captuer2 提供了两种方式来操作HDFS的API,分别是Java和C语言。因为Hadoop本身就是用java写的,因此java操作更容易些。

这里先介绍下java调用Hadoop的方式。

首先我们编译和运行chapter2中的例子代码,看到里面有build.xml可以知道是用ant进行构建的,因此先准备好ant环境。

1)首先来编译和运行下java代码试试

进入源码目录 

[gaotong@localhost HDFS_Java_API]$ pwd
/home/gaotong/7287OS_Code/chapter2/HDFS_Java_API

看下该java类的主要源码

Configuration conf = new Configuration();
conf.addResource(new Path(
"/u/hadoop-1.0.2/conf/core-site.xml"));
conf.addResource(new Path(
"/u/hadoop-1.0.2/conf/hdfs-site.xml"));

FileSystem fileSystem = FileSystem.get(conf);
System.out.println(fileSystem.getUri());

Path file = new Path("demo.txt");
if (fileSystem.exists(file)) {
System.out.println("File exists.");
} else {
// Writing to file
FSDataOutputStream outStream = fileSystem.create(file);
outStream.writeUTF("Welcome to HDFS Java API!!!");
outStream.close();
}

// Reading from file
FSDataInputStream inStream = fileSystem.open(file);
String data = inStream.readUTF();
System.out.println(data);
inStream.close();

// deleting the file. Non-recursively.
// fileSystem.delete(file, false);

fileSystem.close();

其实就是创建一个文件,写入Welcome to HDFS Java API!!!

直接运行ant 命令即可

[gaotong@localhost HDFS_Java_API]$ ~/Downloads/apache-ant-1.9.4/bin/ant
Buildfile: /home/gaotong/7287OS_Code/chapter2/HDFS_Java_API/build.xml

compile:
[mkdir] Created dir: /home/gaotong/7287OS_Code/chapter2/HDFS_Java_API/build
[javac] Compiling 1 source file to /home/gaotong/7287OS_Code/chapter2/HDFS_Java_API/build
[jar] Building jar: /home/gaotong/7287OS_Code/chapter2/HDFS_Java_API/HDFSJavaAPI.jar

BUILD SUCCESSFUL
Total time: 3 seconds

注意:需要先配置好 HADOOP_HOME 和 JAVA_HOME变量。因为编译时需要用到 hadoop里面的jar包。

构建成功后,可以看到打好的jar包,  直接运行即可。

[gaotong@localhost HDFS_Java_API]$ ~/hadoop-1.2.1/bin/hadoop jar HDFSJavaAPI.jar HDFSJavaAPIDemo

hdfs://192.168.101.128:9000
Welcome to HDFS Java API!!!

文件demo.txt已经在HDFS中创建成功!下面来查看一下。默认是存放了用户目录下面。

[gaotong@localhost HDFS_Java_API]$ ~/hadoop-1.2.1/bin/hadoop fs -ls /user/gaotong/

Found 1 items
-rw-r--r-- 2 gaotong supergroup 29 2014-07-03 22:19 /user/gaotong/demo.txt