日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据之HDFS应用开发(java API)

發布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据之HDFS应用开发(java API) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 目錄
    • 1、搭建開發環境
    • 2、獲取api中的客戶端對象
    • 3、DistributedFileSystem實例對象所具備的方法
    • 4、HDFS客戶端操作數據代碼示例

目錄

1、搭建開發環境

window下開發的說明:
A、在windows的某個目錄下解壓一個hadoop的安裝包
B、將安裝包下的lib和bin目錄用對應windows版本平臺編譯的本地庫替換
(這里我的環境是win10、hadoop2.6.4。
對應的win10的編譯的本地庫下載地址:http://pan.baidu.com/s/1dFzYVKH
密碼:pdj9)
C、在window系統中配置HADOOP_HOME指向你解壓的安裝包
D、在windows系統的path變量中加入hadoop的bin目錄
E、根據需要將hadoop下的jar包導入對應的工程中中生成新的Jar包(開發什么程序打成什么jar包。如開發HDFS程序就把hadoop下hdfs下對應的jar包打成一個新的jar包供工程使用)

2、獲取api中的客戶端對象

在java中操作hdfs,首先要獲得一個客戶端實例

Configuration conf = new Configuration() FileSystem fs = FileSystem.get(conf)

而我們的操作目標是HDFS,所以獲取到的fs對象應該是DistributedFileSystem的實例;
get方法是從何處判斷具體實例化那種客戶端類呢?
——從conf中的一個參數 fs.defaultFS的配置值判斷;

如果我們的代碼中沒有指定fs.defaultFS,并且工程classpath下也沒有給定相應的配置,conf中的默認值就來自于hadoop的jar包中的core-default.xml,默認值為: file:///,則獲取的將不是一個DistributedFileSystem的實例,而是一個本地文件系統的客戶端對象

3、DistributedFileSystem實例對象所具備的方法

4、HDFS客戶端操作數據代碼示例

4.1、文件的增刪改查

/*** * 客戶端去操作hdfs時,是有一個用戶身份的* 默認情況下,hdfs客戶端api會從jvm中獲取一個參數來作為自己的用戶身份: -DHADOOP_USER_NAME=hadoop* 也可以在構造客戶端fs對象時,通過參數傳遞進去* @author**/ public class HdfsClient {FileSystem fs = null;@Beforepublic void init() throws Exception {// 構造一個配置參數對象,設置一個參數:我們要訪問的hdfs的URI// 從而FileSystem.get()方法就知道應該是去構造一個訪問hdfs文件系統的客戶端,以及hdfs的訪問地址// new Configuration();的時候,它就會去加載jar包中的hdfs-default.xml// 然后再加載classpath下的hdfs-site.xmlConfiguration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://hdp-node01:9000");/*** 參數優先級: 1、客戶端代碼中設置的值 2、classpath下的用戶自定義配置文件 3、然后是服務器的默認配置*/// 獲取一個hdfs的訪問客戶端,根據參數,這個實例應該是DistributedFileSystem的實例// fs = FileSystem.get(conf);// 如果這樣去獲取,那conf里面就可以不要配"fs.defaultFS"參數,而且,這個客戶端的身份標識已經是hadoop用戶// fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");}/*** 往hdfs上傳文件** @throws Exception*/@Testpublic void testAddFileToHdfs() throws Exception {// 要上傳的文件所在的本地路徑Path src = new Path("g:/redis-recommend.zip");// 要上傳到hdfs的目標路徑Path dst = new Path("/aaa");fs.copyFromLocalFile(src, dst);fs.close();}/*** 從hdfs中復制文件到本地文件系統** @throws IOException* @throws IllegalArgumentException*/@Testpublic void testDownloadFileToLocal() throws IllegalArgumentException, IOException {fs.copyToLocalFile(new Path("/jdk-7u65-linux-i586.tar.gz"), new Path("d:/"));fs.close();}@Testpublic void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {// 創建目錄fs.mkdirs(new Path("/a1/b1/c1"));// 刪除文件夾 ,如果是非空文件夾,參數2必須給值truefs.delete(new Path("/aaa"), true);// 重命名文件或文件夾fs.rename(new Path("/a1"), new Path("/a2"));}/*** 查看目錄信息,只顯示文件** @throws IOException* @throws IllegalArgumentException* @throws FileNotFoundException*/@Testpublic void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();System.out.println(fileStatus.getPath().getName());System.out.println(fileStatus.getBlockSize());System.out.println(fileStatus.getPermission());System.out.println(fileStatus.getLen());BlockLocation[] blockLocations = fileStatus.getBlockLocations();for (BlockLocation bl : blockLocations) {System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());String[] hosts = bl.getHosts();for (String host : hosts) {System.out.println(host);}}System.out.println("--------------為angelababy打印的分割線--------------");}}/*** 查看文件及文件夾信息** @throws IOException* @throws IllegalArgumentException* @throws FileNotFoundException*/@Testpublic void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {FileStatus[] listStatus = fs.listStatus(new Path("/"));String flag = "d-- ";for (FileStatus fstatus : listStatus) {if (fstatus.isFile()) flag = "f-- ";System.out.println(flag + fstatus.getPath().getName());}} }

總結

以上是生活随笔為你收集整理的大数据之HDFS应用开发(java API)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。