大数据-09-Intellij idea 开发java程序操作HDFS

主要摘自 http://dblab.xmu.edu.cn/blog/290-2/

简介

本指南介绍Hadoop分布式文件系统HDFS,并详细指引读者对HDFS文件系统的操作实践。Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核心组件之一,如果已经安装了Hadoop,其中就已经包含了HDFS组件,不需要另外安装。

利用Java API与HDFS进行交互

Hadoop不同的文件系统之间通过调用Java API进行交互,上面介绍的Shell命令,本质上就是Java API的应用。下面提供了Hadoop官方的Hadoop API文档,想要深入学习Hadoop,可以访问如下网站,查看各个API的功能。

利用Java API进行交互,需要利用软件Eclipse编写Java程序。

(一) 在Ubuntu中安装Intellij idea

直接在官网下载试用版本ideaIU-2018.1.1.tar.gz

大数据-09-Intellij idea 开发java程序操作HDFS

(二)在idea创建项目

点击创建新项目

大数据-09-Intellij idea 开发java程序操作HDFS

选择java项目, 如果在SDK未显示1.8, 请点南new按键添加相应SDK,默认位置为/usr/lib/jvm/java-8-openjdk-amd64

大数据-09-Intellij idea 开发java程序操作HDFS

在“Project name”后面输入工程名称“HDFSExample”,选中“Use default location”,让这个Java工程的所有文件都保存到“/home/hadoop/HDFSExample”目录下然后,点击界面底部的“Next>”按钮,进入下一步的完成设置。

(三)为项目添加需要用到的JAR包

在File>Project Struecture 中添加引用JAR包

大数据-09-Intellij idea 开发java程序操作HDFS

需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了可以访问HDFS的Java API。这些JAR包都位于Linux系统的Hadoop安装目录下,对于本教程而言,就是在“/usr/local/hadoop/share/hadoop”目录下。点击界面中按钮,

大数据-09-Intellij idea 开发java程序操作HDFS

为了编写一个能够与HDFS交互的Java应用程序,一般需要向Java工程中添加以下JAR包:

(1)”/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;

(2)/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;

(3)“/usr/local/hadoop/share/hadoop/hdfs”目录下的haoop-hdfs-2.7.1.jar和haoop-hdfs-nfs-2.7.1.jar;

(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。

比如,如果要把“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar添加到当前的Java工程中。

(四)编写Java应用程序代码

输入新建的Java类文件的名称,这里采用名称“HDFSFileIfExist”,其他都可以采用默认设置,然后,点击界面右下角“OK”按钮,

大数据-09-Intellij idea 开发java程序操作HDFS

创建了一个名为“HDFSFileIfExist.java”的源代码文件,请在该文件中输入以下代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFSFileIfExist {
public static void main(String[] args){
try{
String fileName = "test";
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.3.236:9000"); // 这里根据自己实际情况调整
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(fileName))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
} }catch (Exception e){
e.printStackTrace();
}
}
}

(五)编译运行程序

在开始编译运行程序之前,请一定确保Hadoop已经启动运行,如果还没有启动,需要打开一个Linux终端,输入以下命令启动Hadoop:

cd /usr/local/hadoop
./sbin/start-dfs.sh

在Project窗口中,选中HDFSFileIfExist类,右键选择run,即可看到结果。 上java代码中,我们设置的判断HDFS中是否含有test名字的文件,可以根据实际情况作调整。

(六)应用程序的部署

下面介绍如何把Java应用程序生成JAR包,部署到Hadoop平台上运行。首先,在Hadoop安装目录下新建一个名称为myapp的目录,用来存放我们自己编写的Hadoop应用程序,可以在Linux的终端中执行如下命令:

cd /usr/local/hadoop
mkdir myapp

然后,请在Idea工作界面左侧的File > Project Structure,出现如下面示后,再作相应选择:

大数据-09-Intellij idea 开发java程序操作HDFS

然后选择要导出的类

大数据-09-Intellij idea 开发java程序操作HDFS

然后选删除其它依赖类,只留下自己的代码即可

大数据-09-Intellij idea 开发java程序操作HDFS

选择菜单栏的Build,选择Build Artifacts。

然后测试程序

cp out/artifacts/HDFSExample_jar/HDFSExample.jar  /usr/local/hadoop/
./bin/hadoop jar HDFSExample.jar

我这里输出结果是

文件不存在

如果在上面导出设置时,不删除依赖类,则用下面的方法也可以运行:

java -jar ./HDFSExample.jar

得到一样的结果。

上一篇:C++面向对象的编程


下一篇:Redux 和 ngrx 创建更佳的 Angular 2