主要摘自 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。
(二)在idea創建項目
點擊創建新項目
選擇java項目, 如果在SDK未顯示1.8, 請點南new按鍵添加相應SDK,默認位置為/usr/lib/jvm/java-8-openjdk-amd64
在“Project name”后面輸入工程名稱“HDFSExample”,選中“Use default location”,讓這個Java工程的所有文件都保存到“/home/hadoop/HDFSExample”目錄下然后,點擊界面底部的“Next>”按鈕,進入下一步的完成設置。
(三)為項目添加需要用到的JAR包
在File>Project Struecture 中添加引用JAR包
需要在這個界面中加載該Java工程所需要用到的JAR包,這些JAR包中包含了可以訪問HDFS的Java API。這些JAR包都位於Linux系統的Hadoop安裝目錄下,對於本教程而言,就是在“/usr/local/hadoop/share/hadoop”目錄下。點擊界面中按鈕,
為了編寫一個能夠與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”按鈕,
創建了一個名為“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,出現如下面示后,再作相應選擇:
然后選擇要導出的類
然后選刪除其它依賴類,只留下自己的代碼即可
選擇菜單欄的Build,選擇Build Artifacts。
然后測試程序
cp out/artifacts/HDFSExample_jar/HDFSExample.jar /usr/local/hadoop/
./bin/hadoop jar HDFSExample.jar
我這里輸出結果是
文件不存在
如果在上面導出設置時,不刪除依賴類,則用下面的方法也可以運行:
java -jar ./HDFSExample.jar
得到一樣的結果。