通过hadoop 提供的java api对hdfs进行操作
环境:centos7 + jdk1.7 + hadoop2.4.1(64位)+ecplise

第一部分删除操作

第一步:启动Hadoop服务

1.1 查看服务状态。在命令终端,执行命令“jps”(查看hadoop服务是否已经启动,如未启动,启动服务)。如图1所示

hadoop java 超时 java操作hadoop_hadoop java 超时


(process information unavaliable不用管,造成原因可能是虚拟内存机资源不足,自己会消失)

1.2通过hdfs dfs -touchz /java在HDFS上创建文件。

通过 hdfs dfs -ls /可以查看

hadoop java 超时 java操作hadoop_大数据_02

第二步 2.1 打开ecplise开发工具,点击File选择“New”->“Java Project”新建名为“Hadoop”的java项目,点击“Hadoop”项目右键,选择“New” –>“Package”

hadoop java 超时 java操作hadoop_eclipse_03

输入名称“com.hdfs”点击完成。

hadoop java 超时 java操作hadoop_hadoop_04


新建java 类。选中包名并右键点击,选择“New”->“Class”。

hadoop java 超时 java操作hadoop_hadoop_05


在name 项输入“ HdfsTest”类名称,点击Finish完成。

hadoop java 超时 java操作hadoop_hadoop java 超时_06


2.2在创建的项目目录下右击选择“New”—“Folder”创建文件夹libs。

2.3 拷贝桌面lib文件夹下的所有hadoop jar包到libs文件夹下。

2.4 选中libs下的所有jar包,右键点击,然后选择“Build Path”下的“add to build path”即可把所有jar包添加到path环境中。

如图:

hadoop java 超时 java操作hadoop_hadoop_07

第三步:编写程序(上代码)

package com.HDFS;

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HdfsTest {

	// 初始化获取hdfs连接的对象
	private FileSystem fileSystem;

	@Before
	public void init() throws Exception {
		// 连接我的hdfs 192.168.2.3:9000
		fileSystem = FileSystem.get(new URI("hdfs://192.168.2.3:9000"), new Configuration(), "root");
		System.out.println(fileSystem);
	}

	@After
	public void After() throws Exception {
		// 释放资源
		fileSystem.close();
	}

	@Test
	public void testRMdir() throws Exception {
		boolean flag = fileSystem.deleteOnExit(new Path("/java"));
		System.out.println(flag ? "删除成功" : "删除失败");
	}
}

第四步程序运行

4.1 在项目栏目最左侧,选中要运行的方法“testRMdir”—>点击右键—>选择“run as”—>选择“Junit Test”,等待执行结果。

hadoop java 超时 java操作hadoop_大数据_08

其中打印结果中DFS[DFSClient[clientName=DFSClient_NONMAPREDUCE_340839249_1, ugi=root (auth:SIMPLE)]]
表示fs不为空,也就是连接hdfs成功
删除成功表示“/java”已删除。

第五步:验证

hadoop java 超时 java操作hadoop_大数据_09


hadoop java 超时 java操作hadoop_大数据_10


可以看到已经删除成功

第二部分:上传本地文件到hdfs

首先在本地(local)创建文件:HelloWorld.txt

hadoop java 超时 java操作hadoop_hadoop java 超时_11


然后通过java提供的API将HelloWorld.txt上传本地文件到hadoop的根目录并改名位javaApi:

代码如下:

```java
package com.HDFS;

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HdfsTest {

	// 初始化获取hdfs连接的对象
	private FileSystem fileSystem;

	@Before
	public void init() throws Exception {
		// 连接我的hdfs 192.168.2.3:9000
		Configuration con = new Configuration();
		con.setBoolean("dfs.support.append", true);
		fileSystem = FileSystem.get(new URI("hdfs://192.168.2.3:9000"), con, "root");
		System.out.println(fileSystem);

	}

	@After
	public void After() throws Exception {
		// 释放资源
		fileSystem.close();
	}

	@Test
	public void testUploadFile() throws Exception{
		String src="D:\\HelloWorld.txt";
		String hdfDst="/javaApi";
		fileSystem.copyFromLocalFile(true, false, new Path(src), new Path(hdfDst));
		System.out.println("upload sucess");
	}

}

验证:

hadoop java 超时 java操作hadoop_java_12


hadoop java 超时 java操作hadoop_hadoop_13

第三部分:下载hdfs文件到local:

首先要先上传一个文件(这里以hadoop-2.7.2.tar.gz为例)

hadoop java 超时 java操作hadoop_eclipse_14


hadoop java 超时 java操作hadoop_大数据_15

然后用java提供的api下载我们上传的文件到D盘的hadoop.zip中(代码如下):

package com.HDFS;

import java.io.FileOutputStream;
import java.net.URI;

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.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class HdfsTest {

	// 初始化获取hdfs连接的对象
	private FileSystem fileSystem;

	@Before
	public void init() throws Exception {
		// 连接我的hdfs 192.168.2.3:9000
		Configuration con = new Configuration();
		con.setBoolean("dfs.support.append", true);
		fileSystem = FileSystem.get(new URI("hdfs://192.168.2.3:9000"), con, "root");
		System.out.println(fileSystem);
		
	}

	@After
	public void After() throws Exception {
		// 释放资源
		fileSystem.close();
	}
	@Test
	public void dloadFile() throws Exception{
		Path src=new Path("hdfs://192.168.2.3:9000/hadoop-2.7.2.tar.gz");
		FSDataInputStream in=fileSystem.open(src);
		FileOutputStream out=new FileOutputStream("D:\\hadoop.zip");
		IOUtils.copyBytes(in, out, 4096, true);
	}
}
``

运行结果:

hadoop java 超时 java操作hadoop_hadoop_16


hadoop java 超时 java操作hadoop_java_17


可以看到已经成功下载。