大數據之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());}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell腳本執行方式,更方便更快捷。

在進行linux測試時編寫腳本是必不可少的。最近經常使用Linux&#xff0c;感覺太頻繁地敲擊鍵盤有些累了&#xff0c;于是想到了Shell腳本。可以把太多的命令寫成一個腳本&#xff0c;這樣每次執行一遍 shell文件&#xff0c;就可以省去了敲擊鍵盤的時間。于是在網上搜了一些有…

行為科學統計第1章

行為科學統計 Statistics for the Behavioral Sciences 一周只學習一次不如每周學習比較多的幾次高效噢&#xff5e;&#xff3b;一開始&#xff0c;你并不知道這是一個會寫著畫風突變的讀書筆記?…&#xff3d; 第I部分 簡述與描述性統計 第1章 統計學入門 這本書我就是覺得這…

閉包---在函數內部再定義一個函數

什么是閉包 # 定義一個函數 def test(number):# 在函數內部再定義一個函數&#xff0c;并且這個函數用到了外邊函數的變量&#xff0c;那么將這個函數以及用到的一些變量稱之為閉包def test_in(number_in):print("in test_in 函數, number_in is %d" % number_in)re…

慕課網_《Java實現對稱加密》學習總結

時間&#xff1a;2017年4月11日星期二說明&#xff1a;本文部分內容均來自慕課網。慕課網&#xff1a;http://www.imooc.com教學示例源碼&#xff1a;https://github.com/zccodere/s...個人學習源碼&#xff1a;https://github.com/zccodere/s... 第一章&#xff1a;對稱加密算…

大數據之MapReduce詳解(MR的運行機制及配合WordCount實例來說明運行機制)

目錄前言&#xff1a;1、MapReduce原理2、mapreduce實踐&#xff08;WordCount實例&#xff09; 目錄 今天先總體說下MapReduce的相關知識&#xff0c;后續將會詳細說明對應的shuffle、mr與yarn的聯系、以及mr的join操作的等知識。以下內容全是個人學習后的見解&#xff0c;如…

生動形象的理解什么是裝飾器!

裝飾器 裝飾器是程序開發中經常會用到的一個功能&#xff0c;用好了裝飾器&#xff0c;開發效率如虎添翼&#xff0c;所以這也是Python面試中必問的問題&#xff0c;但對于好多初次接觸這個知識的人來講&#xff0c;這個功能有點繞&#xff0c;自學時直接繞過去了&#xff0c;…

PLSQL 申明和游標

--從鍵盤輸入一個數 accept b prompt 請輸入一個大于零的數字; declareanum number : &b; beginwhile anum>0loopdbms_output.put_line(anum);anum:anum-1;end loop; end;declarev_num number; begin -- 從stsu表中選出id最大的值&#xff0c;并根據該值打印次數select …

20155222 2016-2017-2 《Java程序設計》第8周學習總結

20155222 2016-2017-2 《Java程序設計》第8周學習總結 教材學習內容總結 Java NIO(New IO)是一個可以替代標準Java IO API的IO API&#xff08;從Java 1.4開始)&#xff0c;Java NIO提供了與標準IO不同的IO工作方式。 Java NIO: Channels and Buffers&#xff08;通道和緩沖區&…

BAT經典面試題精簡版(基礎知識附答案)

文章目錄目錄J2SE基礎JVM操作系統TCP/IP數據結構與算法目錄 J2SE基礎 九種基本數據類型的大小&#xff0c;以及他們的封裝類。 原始類型封裝類 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble Switch能否用string做參數&…

使用2to3.py 轉換 python2.x 代碼 到python3

1.使用Windows 命令提示符&#xff08;cmd&#xff09;cd到2to3.py 腳本所在位置&#xff0c;如下圖&#xff1a; 找不到的2 to 3.py的去 pycharm中雙擊shift搜索一下 2.緊接著運行 2to3.py 腳本&#xff08;可省略&#xff09; 3.執行你想要轉換的文件 python 2to3.py -w H:…

iis6.0與asp.net的運行原理

這幾天上網翻閱了不少前輩們的關于iis和asp.net運行原理的博客&#xff0c;學的有點零零散散&#xff0c;花了好長時間做了一個小結&#xff08;雖然文字不多&#xff0c;但也花了不少時間呢&#xff09;&#xff0c;鄙人不才&#xff0c;難免有理解不道的地方&#xff0c;還望…

元類--用不上的先了解

元類 1. 類也是對象 在大多數編程語言中&#xff0c;類就是一組用來描述如何生成一個對象的代碼段。在Python中這一點仍然成立&#xff1a; >>> class ObjectCreator(object): … pass … >>> my_object ObjectCreator() >>> print(my_ob…

Android學習筆記進階十之Matrix錯切變換

剛開始我也不懂啥叫錯切變換&#xff0c;一看效果圖你就恍然大悟。 對圖像的錯切變換做個總結&#xff1a; x x0 b*y0; y d*x0 y0; 與之對應的方法是&#xff1a; [java] view plaincopyMatrix matrix new Matrix(); matrix.setSkew(0.0f, 0.5f);

SQL數據庫實戰(含建表數據和查詢案例)

Oracle數據庫安裝的時候會自帶一個練習用數據庫&#xff08;其中包含employee表&#xff0c;后來版本中此表改名為emp&#xff09;&#xff1b; 首先在安裝過程中應該有個選項“是否安裝實例表”&#xff08;完全安裝模式下默認是選擇的&#xff09;&#xff0c;需要選擇才有此…

Django中的核心思想ORM---元類實現ORM

1. ORM是什么 ORM 是 python編程語言后端web框架 Django的核心思想&#xff0c;“Object Relational Mapping”&#xff0c;即對象-關系映射&#xff0c;簡稱ORM。 一個句話理解就是&#xff1a;創建一個實例對象&#xff0c;用創建它的類名當做數據表名&#xff0c;用創建它…

移動互聯網廣告 - 第十更 - 廣告投放運營 DashBoard - 2016/12/10

廣告投放運營 DashBoard設計 移動互聯網互聯網廣告投放&#xff0c;數據監控DashBoard&#xff0c;基礎樣例示意&#xff0c;下圖僅供參考&#xff08;來自于互聯網&#xff09;。 轉載于:https://www.cnblogs.com/pythonMLer/p/6154700.html

微信小程序中使用emoji表情相關說明

2019獨角獸企業重金招聘Python工程師標準>>> 本帖將聚合一些跟emoji表情有關的知識&#xff1b;相關文章&#xff1a;“i愛記賬” 小程序后端開發小結 第7條經驗前端傳過來的昵稱和備注信息一定要經過嚴格的正則表達式過濾&#xff0c;放置出現XSS等攻擊&#xff0c…

java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis

執行Hive語句運行MapReduce程序時突然出現這樣的異常&#xff1a; Total MapReduce jobs 1 Launching Job 1 out of 1 Number of reduce tasks not specified. Estimated from input data size: 1 In order to change the average load for a reducer (in bytes):set hive.ex…

Oracle基礎語句

1、創建表create table IT_EMPLOYEES(ENPLOYEES_ID NUMBER(6) NOT NULL UNIQUE,FIRST_NAME VARCHAR2(20),LAST_NAME VARCHAR2(25) NOT NULL,EMAIL VARCHAR2(25),PHONE_NUMBER VARCHAR2(20),JOB_ID VARCHAR2(10),SALARY NUMBER(8,2),MANAGER_ID NUMBER(6));2、--創建索引&#x…

Linux三劍客之grep 與 egrep

grep&#xff1a;Linux上文本處理三劍客1 grep&#xff1a;文本過濾(模式&#xff1a;pattern)工具; *&#xff08;grep, egrep, fgrep&#xff09; 2 sed&#xff1a;stream editor&#xff0c;文本編輯工具&#xff1b; 3 awk&#xff1a;Linux上的實現gawk&#xff0c;文本報…