中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在HDFS上添加文件和目錄

發布時間:2021-12-10 09:19:19 來源:億速云 閱讀:1479 作者:iii 欄目:云計算

本篇內容介紹了“如何在HDFS上添加文件和目錄”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

HDFS文件操作

你可以把一個大數據集(100TB)在HDFS中存儲為單個文件,而大多數其他的文件系統無力實現這一點。雖然該文件存在多個副本分布在多臺機器上來支持并行處理,你也不必考慮這些細節。

HDFS (Hadoop Distribution File System)文件系統到底是一個怎樣的文件系統?

并不是一個Unix文件系統,不支持像ls和cp這種標準的Unix文件命令,也不支持如fopen()和fread()這樣的標準文件讀寫操作。但是Hadoop提供了一套與Linux文件命令類似的命令行工具。

一個典型的Hadoop工作流是指?

1、在別的地方生成數據文件(如日志文件)再將其復制到HDFS中。

2、由MapReduce程序處理這個數據,讀取HDFS文件并將之解析為獨立的記錄(鍵/值對)

3、除非要定制數據的導入與導出,否則你幾乎不必編程來讀寫HDFS文件。

Hadoop文件命令采取的形式是?

hadoop fs -cmd <args>

cmd是具體的文件命令,而<args>是一組數目可變的參數。cmd的命名通常與UNIX對應的命令名相同。如,文件列表的命令為:hadoop fs -ls

Hadoop最常用的文件管理任務包括?

1、添加文件和目錄

2、獲取文件

3、刪除文件

Hadoop文件命令可以和本地文件系統交互嗎?

Hadoop的文件命令既可以與HDFS文件系統交互,也可以和本地文件系統交互。

URI定位是指?完整的URL格式是?

URL精確地定位一個特定文件或目錄的位置。

完整的URL格式為scheme://authority/path. Scheme類似于一個協議它可以是hdfs或file、來分別指定HDFS文件系統或本地文件系統。

對于HDFS,authority是NameNode的主機名,而path是文件或者目錄的路徑。

對于在本地機器的9000端口上,以標準偽分布式模型運行的HDFS,訪問用戶目錄user/chuck中文件example.txt的URI是什么?

hdfs://localhost:9000/user/chuck/example.txt

hadoop fs -cat hdfs://localhost:9000/user/chuck/example.txt

但是通常我們在使用Hadoop文件命令時沒有指定URI中的scheme://authority部分

是怎么回事?

是的,大多數設置不需要指定URI中的scheme://authority部分

例如,當在本地文件系統和HDFS之間復制文件時

1、put命令將本地文件復制到HDFS中,源是本地文件,目的是HDFS文件

2、get命令將HDFS中文件復制到本地,源是HDFS文件,目的是本地文件。

如果未設置URI中的scheme://authority部分,就會采用Hadoop的默認配置fs.default.name屬性的配置。

例如:conf/core-site.xml文件配置是:

<property>

       <name>fs.default.name</name>

       <value>hdfs://localhost:9000</value>

</property>

在此配置下,URI hdfs://localhost:9000/user/chuck/example.txt縮短為/user/chuck/example.txt

注:有些更早的文檔以hadoop dfs -cmd <args>的形式表示文件工具。dfs和fs是等價的,但現在都是用fs

HDFS默認當前工作目錄是?

HDFS默認當前工作目錄為/user/$USER,其中$USER是你的登錄用戶名。

例:如果你作為chuck登錄,則URI hdfs://localhost:9000/user/chuck/example.txt就縮短為example.txt。顯示文件內容的Hadoop cat命令可寫為:

hadoop fs -cat example.txt

如何在HDFS上添加文件和目錄?

首先必須確保幾點:

1、必須先進行格式化

2、出于學習目的,建議使用偽分布式

3、默認工作目錄是/user/$USER,但這個目錄不會自動創建,需要手動創建先

手動創建默認工作目錄

hadoop fs -mkdir /user/chuck

Hadoop的mkdir命令會自動創建父目錄,類似于UNIX中使用-p選項的mkdir命令,因此上述命令還會創建/user目錄。

hadoop fs -ls / 該命令列出根目錄下的所有文件和目錄

hadoop fs -lsr / 該命令列出根目錄下所有文件和子目錄

hadoop fs -put example.txt . 將本地文件example.txt放入HDFS中。

后面的(.),意味著把文件放入默認的工作目錄,等價于

hadoop fs -put example.txt /user/chuck

hadoop fs -ls 列出工作目錄下的所有文件和目錄

使用hadoop fs -ls命令列出內容和復制因子

通常情況下會列出如下面這樣的view

Found 1 items

-rw-r--r-- 1 chuck supergroup 264 2009-01-14 11:02 /user/chuck/example.txt

顯示屬性信息,其他的不解釋和UNIX的概念類似。主要說一下"1"列出文件的復制因子。偽分布式下它永遠為1,對于生產環境中的集群,復制因子通常為3,也可以是任何正整數,復制因子不適用于目錄,所以該列會顯示一個(-)

如何檢索文件?

Hadoop的get命令與put命令相反,從HDFS中復制文件到本地文件系統。

比如hadoop fs -get example.txt 將它復制帶本地的當前工作目錄中。

hadoop fs -cat example.txt 也可以使用cat命令顯示數據。

也可以使用管道命令 hadoop fs -cat example.txt | head

可以使用tail命令來查看最后的一千字節:

hadoop fs -tail example.txt

如何刪除文件?

刪除文件和空目錄使用rm命令

hadoop fs -rm example.txt

如何查閱幫助?

hadoop fs (無參數) 來獲取所用版本Hadoop的一個完整命令列表。

hadoop fs -help ls 顯示每個命令的用法及簡短描述。

HDFS的Java API

雖然,命令行工具足以滿足大多數與HDFS文件系統交互的需求,但是有些需求只能用Java API去訪問,比如開發一個PutMerge程序,用于合并文件后放入HDFS中,命令行工具并不支持這個操作。

合并文件后放入HDFS中,什么時候會這樣做呢?

考慮這樣一個場景,需要分析來自許多Web服務器的Apache日志文件時,就有了建立這個例程的動機,雖然我們可以把每個日志文件都復制到HDFS中,但通常而言,Hadoop處理單個大文件會比處理許多個小文件更有效率。

為什么會日志數據會分散在多個文件?

這是由于Web服務器采用分布式架構所造成的。

一種解決辦法是?為什么不直接合并?

一種解決辦法是先將所有的文件合并,然后再復制到HDFS。可是,文件合并需要占用本地計算機的大量磁盤空間。如果我們能夠在向HDFS復制的過程中合并它們就好了。

Hadoop命令行工具getmerge命令。

getmerge命令,用于把一組HDFS文件在復制到本地計算機之前進行合并,但我們想要的截然相反。我們是要putmerge命令。

Hadoop文件操作API是?

Hadoop中用作文件操作的主類位于org.apache.hadoop.fs軟件包中,Hadoop的基本文件操作包括open、read、write和close,Hadoop的文件API也可以用于HDFS以外的其他文件系統。

Hadoop文件API的起點是FileSystem類,這是一個與文件系統交互的抽象類,存在不同的具體實現子類用于處理HDFS和本地文件系統。你可以通過調用factory方法FileSystem.get(Configuration conf)來得到所需的FileSystem實例。Configuration類是用于保留鍵/值配置參數的特殊類。它的默認實例化方法是以HDFS系統的資源配置為基礎的。

如何得到一個FileSystem對象?

Configuration conf = new Configuration();

FileSystem hdfs = FileSystem.get(conf);

要得到一個專用于本地文件系統的FileSystem對象,可以使用factory方法的FileSystem.getLocal(Configuration conf);

FileSystem local = FileSystem.getLocal(conf);

其他說明:

Hadoop文件API使用Path對象來編制文件和目錄名,使用FileStatus對象來存儲文件和目錄的元數據。PutMerge程序將合并一個本地目錄中的所有文件。我們使用FileSystem的listStatus()方法來得到一個目錄中的文件列表:

Path inputDir = new Path(args[0]);

FileStatus[] inputFiles = local.listStatus(inputDir);

數組inputFiles的長度等于指定目錄中的文件個數。在inputFiles中每一個FileStatus對象均有元數據信息,如文件長度、權限、修改時間等。PutMerge程序所關心的是每個文件的Path,即inputFiles[i].getPath()。我們可以通過FSDataInputStream對象訪問這個Path來讀取文件。

FSDataInputStream in = local.open(inputFiles[i].getPath());

byte buffer[] = new byte[256];

int bytesRead = 0;

while ( (bytesRead = in.read(buffer)) > 0) {

       ...

}

in.close();

FSDataInputStream是Java標準類java.io.DataInputStream的一個子類,增加了對隨機訪問的支持。類似地有一個FSDataOutputStream對象用于將數據寫入HDFS文件:

Path hdfsFile = new Path(args[1]);

FSDataOutputStream out = hdfs.create(hdfsFile);

out.write(buffer, 0, bytesRead);

out.close();

“如何在HDFS上添加文件和目錄”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

张北县| 出国| 阳西县| 阿鲁科尔沁旗| 涿州市| 建阳市| 清流县| 莒南县| 赣榆县| 涿鹿县| 卢氏县| 建湖县| 贡觉县| 七台河市| 嘉峪关市| 方城县| 水富县| 天气| 普兰店市| 牙克石市| 栖霞市| 新宁县| 柞水县| 佛学| 阿巴嘎旗| 左云县| 二连浩特市| 抚远县| 同江市| 延庆县| 江门市| 余干县| 枣强县| 文山县| 凌源市| 麦盖提县| 安阳市| 油尖旺区| 柘城县| 米林县| 娄底市|