hdfs java讀寫hdfs demo

windows環境配置:


1.下載winutils的windows版本

  GitHub上,有人提供了winutils的windows的版本,

項目地址是:https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下載此項目的zip包,下載后是文件名是hadoop-common-2.2.0-bin-master.zip,

2016-12-14更新

在hadoop2.7.x版本里,請使用:https://github.com/SweetInk/hadoop-common-2.7.1-bin

隨便解壓到一個目錄,將加壓出來的bin文件夾覆蓋hadoop壓縮包解壓出來的bin目錄。

2.配置環境變量

  增加用戶變量HADOOP_HOME,值是下載的zip包解壓的目錄,然后在系統變量path里增加%HADOOP_HOME%\bin 。

3、壓縮包里的hadoop.dll,并拷貝到c:\windows\system32目錄中。


如果下載的版本與hadoop不對應,或者windows環境沒配置好,會報錯:

1、java.io.IOException: (null) entry in command string: null chmod 0644

2、java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO


實例代碼:



package filedemo;import java.io.FileInputStream;
import java.net.URI;
import java.util.Iterator;
import java.util.Map.Entry;import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;public class HdfsUtil {FileSystem fs=null;//@Before 是junit 測試框架@Beforepublic void init() throws Exception{/** * 注意注意注意* windows上eclipse上運行,hadoop的bin文件下windows環境編譯的文件和hadoop版本關系緊密* 如果報錯,或者api無效,很可能是bin下hadoop文件問題* *///讀取classpath下的core/hdfs-site.xml 配置文件,并解析其內容,封裝到conf對象中//如果沒有會讀取hadoop里的配置文件Configuration conf=new Configuration();//也可以在代碼中對conf中的配置信息進行手動設置,會覆蓋掉配置文件中的讀取的值//設置文件系統為hdfs。如果設置這個參數,那么下面的方法里的路徑就不用寫hdfs://hello110:9000///conf.set("fs.defaultFS", "hdfs://hello110:9000/");//根據配置信息,去獲取一個具體文件系統的客戶端操作實例對象fs=FileSystem.get(new URI("hdfs://hadoop1:9000/"), conf,"hadoop");Iterator<Entry<String, String>> iterator = conf.iterator();while(iterator.hasNext()){Entry<String, String> ent=iterator.next();System.out.println(ent.getKey()+"  :  "+ent.getValue());}System.out.println("-----------------/hdfs-site.xml 文件讀取結束----------------");}@Testpublic void listFiles() throws Exception{//RemoteIterator 遠程迭代器RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);while(listFiles.hasNext()){LocatedFileStatus file = listFiles.next();Path path = file.getPath();//String fileName=path.getName();System.out.println(path.toString());System.out.println("權限:"+file.getPermission());System.out.println("組:"+file.getGroup());System.out.println("文件大小:"+file.getBlockSize());System.out.println("所屬者:"+file.getOwner());System.out.println("副本數:"+file.getReplication());BlockLocation[] blockLocations = file.getBlockLocations();for(BlockLocation bl:blockLocations){System.out.println("塊起始位置:"+bl.getOffset());System.out.println("塊長度:"+bl.getLength());String[] hosts = bl.getHosts();for(String h:hosts){System.out.println("塊所在DataNode:"+h);}}System.out.println("*****************************************");}System.out.println("-----------------華麗的分割線----------------");FileStatus[] listStatus = fs.listStatus(new Path("/"));for(FileStatus status:listStatus){String name=status.getPath().getName();System.out.println(name+(status.isDirectory()?" is Dir":" is File"));}}//比較低層的寫法@Testpublic void upload() throws Exception{System.out.println("-----------------upload----------------");Path path = new Path("/testdata/testFs.txt");FSDataOutputStream os = fs.create(path);FileInputStream is = new FileInputStream("d:/testFS.txt");IOUtils.copy(is, os);}//封裝好的方法@Testpublic void upload2() throws Exception{System.out.println("-----------------upload2----------------");//hdfs dfs -copyFromLocal 從本地拷貝命令fs.copyFromLocalFile(new Path("d:/testFS-2.txt"), new Path("/testdata/testFs6.txt"));//如果windows-hadoop環境不行,可以用下面的api,最后的true是:用java的io去寫。//fs.copyToLocalFile(false, new Path("d:/testFS-2.txt"), new Path("/testdata/testFs6.txt"), true);fs.close();}@Testpublic void download() throws Exception{//hdfs dfs -copyToLocal 拷貝到本地命令fs.copyToLocalFile(new Path("/testdata/testFs6.txt") , new Path("d:/testFS3.txt"));//如果windows-hadoop環境不行,可以用下面的api,最后的true是:用java的io去寫。//fs.copyToLocalFile(false, new Path("/testdata/testFs6.txt"), new Path("d:/testFS3.txt"), true);}@Testpublic void mkdir() throws Exception{System.out.println("-----------------mkdir----------------");fs.mkdirs(new Path("/testdata/a123"));fs.mkdirs(new Path("/testdata/a124"));}@Testpublic void rm() throws Exception{//true:如果是目錄也會刪除。false,遇到目錄則報錯fs.delete(new Path("hdfs://hello110:9000/testdata/a124"), true);}}




package filedemo;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;/*** 用流的方式來操作hdfs上的文件* 可以實現讀取指定偏移量范圍的數據* @author**/
public class HdfsStreamAccess {FileSystem fs = null;Configuration conf = null;@Beforepublic void init() throws Exception{conf = new Configuration();//拿到一個文件系統操作的客戶端實例對象
//		fs = FileSystem.get(conf);//可以直接傳入 uri和用戶身份fs = FileSystem.get(new URI("hdfs://mini1:9000"),conf,"hadoop");}/*** 通過流的方式上傳文件到hdfs* @throws Exception*/@Testpublic void testUpload() throws Exception {FSDataOutputStream outputStream = fs.create(new Path("/angelababy.love"), true);FileInputStream inputStream = new FileInputStream("c:/angelababy.love");IOUtils.copy(inputStream, outputStream);}/*** 通過流的方式獲取hdfs上數據* @throws Exception*/@Testpublic void testDownLoad() throws Exception {FSDataInputStream inputStream = fs.open(new Path("/angelababy.love"));		FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love");IOUtils.copy(inputStream, outputStream);}@Testpublic void testRandomAccess() throws Exception{FSDataInputStream inputStream = fs.open(new Path("/angelababy.love"));inputStream.seek(12);FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love.part2");IOUtils.copy(inputStream, outputStream);}/*** 顯示hdfs上文件的內容* @throws IOException * @throws IllegalArgumentException */@Testpublic void testCat() throws IllegalArgumentException, IOException{FSDataInputStream in = fs.open(new Path("/angelababy.love"));IOUtils.copy(in, System.out);}}



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

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

相關文章

cesium 經緯度繪制點_NCL繪制2016年1號臺風(Nepartak)

begin ncol 6 ;臺風參數 nrow 31 ;時次總數 nbin 6 ;已知該該氣旋共經歷了6個等級的演變 ;讀入臺風資料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整數類型 ;;數據讀取函數總結&…

VR究竟多奇幻?eSmart邀你共赴一場VR奇幻之旅!

今年夏天&#xff0c;快來參加首屆eSmart展會&#xff0c;來一場VR游戲的奇妙之旅&#xff0c;見識最好玩、最有趣的VR游戲&#xff01; 正如十幾年前互聯網的興起開創了全新時代一樣&#xff0c;VR產業在近兩年也勢不可擋。隨著一重行業巨頭的進入&#xff0c;2016年&#xf…

HTML5新的解析順序,HTML5新表單新功能解析

HTML5新增了很多屬性功能。但是有兼容性問題&#xff0c;因為這些表單功能新增的。我這里做了一個簡單的練習&#xff0c;方便參考。如果完全兼容的話&#xff0c;那我們寫表單的時候就省了很多代碼以及各種判斷。HTML5表單新功能解析#da{width:350px;height:600px;margin:0 au…

python子類繼承父類屬性實例_Python實現子類調用父類的初始化實例

前言 python中進行面向對象編程&#xff0c;當在子類的實例中調用父類的屬性時&#xff0c;由于子類的__init__方法重寫了父類的__init__方法&#xff0c;如果在子類中這些屬性未經過初始化&#xff0c;使用時就會出錯。 例如以下的代碼: class A(object): def __init__(self):…

hadoop 回收站Trash

介紹&#xff1a; Hadoop回收站trash&#xff0c;默認是關閉的。 和Linux系統的回收站設計一樣&#xff0c;HDFS會為每一個用戶創建一個回收站目錄&#xff1a;/user/用戶名/.Trash/&#xff0c;每一個被用戶通過Shell刪除的文件/目錄&#xff0c;在系統回收站中都一個周期&…

opencv畫框返回坐標 python_[python]依靠pynput和pyautogui替換ahk

autohotkey當然是不錯的工具&#xff0c;但是這個東西的社群一直發展的不行。從開始學習python以后&#xff0c;我就不時會希望能找到別的工具替代ahk。Python的眾多包里面確實是有對應的工具的&#xff1a;模擬鼠標和鍵盤的操作可以用pyautogui&#xff0c;而捕捉熱鍵則可以使…

Hadoop SequenceFile

apache原文&#xff1a;http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念&#xff1a; SequenceFile是一個由二進制序列化過的key/value的字節流組成的文本存儲文件&#xff0c;它可以在map/reduce過程中的input/output 的format時被使…

機器學習算法平臺alink_Alink漫談(十二) :在線學習算法FTRL 之 整體設計

Alink漫談(十二) &#xff1a;在線學習算法FTRL 之 整體設計[Toc]0x00 摘要Alink 是阿里巴巴基于實時計算引擎 Flink 研發的新一代機器學習算法平臺&#xff0c;是業界首個同時支持批式算法、流式算法的機器學習平臺。本文和下文將介紹在線學習算法FTRL在Alink中是如何實現的&a…

Linux Shell獲取系統資源使用百分比(CentOS)

CPU使用率&#xff1a; top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 內存使用率&#xff1a; free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率&#xff08;FS_PATH的值改成df -h出來的那些Filesystem名稱即可…

html城市繪制,HTML5/Canvas二分法構建城市版圖

JavaScript語言&#xff1a;JaveScriptBabelCoffeeScript確定var ctx fullscreenCanvas().ctx;var canvas ctx.canvas;function Rect(pos, width, height) {this.pos pos;this.width width;this.height height;}Rect.prototype.update Function.prototype;Rect.prototype…

探測器反向偏壓_近紅外和可見光雙模有機光電探測器

更多精彩&#xff0c;點擊上方藍字關注我們&#xff01;中英標題近紅外和可見光雙模有機光電探測器Near-infrared and Visible Light Dual-mode Organic Photodetectors圖文導讀研究報告了一種具有三層可見光吸收體/光學間隔層/近紅外(NIR)光吸收體結構的雙模有機光電探測器(OP…

html里post請求404,請求登陸頁面post請求404錯誤,OPTIONS請求通過

點擊登錄的時候option請求是通過的&#xff0c;但post請求失敗。服務端代碼app.js&#xff1a;const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 創建 express 應用c…

python貪吃蛇畢業設計_【干貨|python項目實例——貪吃蛇】- 環球網校

【摘要】當今世界充滿了各種數據&#xff0c;而python是其中一種的重要組成部分。然而&#xff0c;若想其有所應用&#xff0c;我們需要對這些python理論進行實踐。其中包含很多有趣的的過程&#xff0c;然后將其用于某些方面。其中一種應用就是python項目實例。今天環球網校的…

PWA即將推向所有Chrome平臺

\看新聞很累&#xff1f;看技術新聞更累&#xff1f;試試下載InfoQ手機客戶端&#xff0c;每天上下班路上聽新聞&#xff0c;有趣還有料&#xff01;\\\大多數人應該都聽說了微軟已經著手在Windows商店中增加PWA&#xff0c;這是一個重磅消息&#xff01;\\\\漸進增強式Web應用…

c++代碼轉為go_Go語言學習筆記六--string編碼

分解探索string編碼轉為byte數組func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 為什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 轉為16進制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

Linux機器件拷貝文件

常用命令有&#xff1a;sftp&#xff0c;scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戲時長計算機,我加入steam五年了,盤點下我買過的22款正版單機游戲

我加入steam五年了&#xff0c;盤點下我買過的22款正版單機游戲2020-02-17 10:50:07104點贊72收藏37評論大家好吖&#xff0c;在2015年的時候朋友就推薦了我入坑steam&#xff0c;不過那個時候更多的知道這是個dota啟動器&#xff0c;慢慢的steam也越來越出名啦&#xff0c;中國…

AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件

概述 AdPlayBanner&#xff1a;功能豐富、一鍵式使用的圖片輪播插件詳細 代碼下載&#xff1a;http://www.demodashi.com/demo/11312.html AdPlayBanner是一個Android平臺基于ViewPager實現的輪播圖插件&#xff0c;主要用以自動或者手動地播放輪播圖&#xff0c;提供了Fresco、…

pycharm運行模型時怎么設置權重?_使用AMP和Tensor Cores得到更快速,更節省內存的PyTorch模型...

點擊上方“AI派”&#xff0c;關注公眾號&#xff0c;選擇加“星標“或“置頂”導讀只需要添加幾行代碼&#xff0c;就可以得到更快速&#xff0c;更省顯存的PyTorch模型。你知道嗎&#xff0c;在1986年Geoffrey Hinton就在Nature論文中給出了反向傳播算法&#xff1f;此外&…

引入靜態變量_Common Lisp變量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常簡單&#xff1a;只是用一個名字空間&#xff0c;所有表達式中相應位置的值應該是明確的。Common Lisp和Scheme最大的不同是&#xff0c;函數名字空間和數據的名字空間是分離的。操作函數名字空間的語句包括&#xff0c;defun&#xff…