Java | API操作HDFS
1、HDFS 的 Java API 操作介绍
hdfs在生产应用中主要是客户端的开发,其核心步骤是从 hdfs 提供的 api 中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS 上的文件 。
2、eclipse 安装与配置连接 hdfs
需要的安装包:
①下载一个 eclipse 开发工具 eclipse-jee-luna-SR1-win32-x86_64.zip ,官网下载地址:https://www.eclipse.org/downloads/packages/ ;
② 解压到指定文件夹 D:\eclipse_x86_64\eclipse ;
③ 把hadoop-eclipse-plugin-2.6.5.jar 插件放入到 D:\eclipse_x86_64\eclipse\dropins\plugins文件夹下 ;
插件地址https://github.com/winghc/hadoop2x-eclipse-plugin
④ 双击启动解压包下的 eclipse.exe 文件,第一次打开需要设置工作环境,你可以指定工作目录(D:\eclipse_x86_64\eclipse-workspace),点击 Launch 安装,安装完成便可以进入到eclipse的操作界面;点击 windows --> Perspective --> Reset Perspective -- > yes 重置一下主界面;点击 windows –> show view –>Project Explorer 这时候多了DFS Location,接下来配置后便可以启用;
⑤ 在windows上安装hadoop(如果是远程访问的话,可以不用安装): 将” hadoop-2.7.7-centos-6.7.tar.gz”解压到 windows 系统下一个文件夹下(暂时可以不用配置环境变量),文件夹的 路径最好不要带中文。我的目录是:D:\hadoop_win_2.7.7\hadoop-2.7.7 ;
⑥ 回到打开的 eclipse 操作界面,点击 windows –> prefrences -> 会出现一个对话框;找到Hadoop MapReduce 选项:然后把你安装的 hadoop 路径配置上,就是上一步你解压的那 个文件夹:D:\hadoop_win_2.7.7\hadoop-2.7.7 ,点击Apply and Close;
⑦ 然后点击 windows –> show view –> Other –> MapReduce Tools文件夹下的 --> Map/Reduce Locations-->双击打开;
⑧ 点击打开击右上角图标New Hadoop location.…,然后填写下图的几个位置,-->Finish;
⑨ 这样eclipse就成功连接到我们的hdfs集群的主节点hadoop01机上了,便可以利用 eclipse 查看 hdfs 集群的文件信息。
如果打开文件出现中文乱码,操作下面步骤:
Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8
Window->Preferences->General->Workspace 面板Text file encoding 选择UTF-8
Window->Preferences->XML->XML Files 面板选择 ISO 10646/Unicode(UTF-8)
如果想通过DFS Locations进行hadoop操作,需要在系统的环境变量或java JVM变量里面添加HADOOP_USER_NAME,这个值具体等于多少看自己的情况,以后会运行HADOOP上的Linux的用户名。(修改完重启eclipse,不然可能不生效)
修改前:
只能下载查看,不能上传、删除和创建!!!!
修改后:
可以上传、删除、创建!!!
3、搭建开发环境
① 打开eclipse新建一个java项目,起名为HDFSDemo2,点击finish
② 导入需要的jar包(即:hadoop-2.7.7-centos-6.7.tar.gz里面的)
公共核心包
公共依赖包(全选)
hdfs核心包
hdfs依赖包(全选)
③ 选中需要添加到项目中的jar包,右键选择"Build Path →Add to Build Path",这样Jar包就成功导入到项目中了。按照下图操作即可。
4、Eclipse连接Hdfs
代码如下:
import java.io.IOException;
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.Test;
public class test {
@SuppressWarnings("unused")
@Test
public void test2() throws IOException, Exception {
//1.建立与hdfs的连接
//fs代表是文件系统,本质上就是与文件系统之间的连接(默认获取本地文件系统)
//连接路径
URI uri = new URI("hdfs://192.168.222.118:9000");
//配置对象
Configuration conf = new Configuration(); //代表client与文件系统连接的配置对象
conf.set("dfs.replication", "1");
/*... ...*/
//操作用户
String user = "hadoop";
//获取连接
FileSystem fs = FileSystem.get(uri, conf, user);
System.out.println(fs);
//2.操作(增删查)
Path dir = new Path("/aa");
boolean bool;
bool = fs.mkdirs(dir);
System.out.println(bool);
//3.关闭
fs.close();
}
}
执行结果如下:
您阅读这篇文章共花了: