Java调用Hadoop HDFS API编程

参考书目: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

Java中直接调用Hadoop命令通常是不可能的,因为Hadoop是一个分布式计算框架,它的命令行工具(如hadoop fs、hadoop jar等)是为了在命令行环境下运行任务而设计的。然而,你可以通过一些间接的方式在Java程序中利用Hadoop的功能: 1. **Hadoop API**: JavaHadoop库提供了Java编程接口(API),如FileSystem API用于文件系统操作,JobClient或JobSubmissionClient用于提交和管理MapReduce作业。通过这些API,你可以在Java代码里执行Hadoop任务。 ```java Configuration config = new Configuration(); FileSystem fs = FileSystem.get(config); // 使用FileSystem API读写文件 ``` 2. **ProcessBuilder**: Java的Runtime或ProcessBuilder类允许你在程序内部执行操作系统命令。虽然这种方式不是直接调用Hadoop命令,但它可以用来启动Hadoop命令行工具,例如`Runtime.getRuntime().exec("hadoop fs -ls /path")`。 3. **Spark Streaming or YARN**: 如果你的项目是基于Apache Spark或YARN这样的容器化平台,你可以通过这些服务提供的API调用Hadoop命令作为任务的一部分。 4. **Shell脚本调用**: 创建一个shell脚本,里面包含了Hadoop命令,然后在Java程序中通过System.exec()或者其他方式执行这个脚本。 需要注意的是,上述方法都需要一定的权限以及正确的Hadoop配置才能正常工作。如果你想要在Java应用程序中无缝地管理和控制Hadoop集群,可能更适合考虑使用像Hue、Ambari或者其他的Hadoop管理工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值