當前位置:首頁 » 密碼管理 » hadoop文件訪問

hadoop文件訪問

發布時間: 2023-09-24 12:22:41

❶ HDFS文件

Hadoop支持的文件系統由很多(見下圖),HDFS只是其中一種實現。java抽象類 org.apache.hadoop.fs.FileSystem 定義了Hadoop中一個文件系統的客戶端介面,並且該抽象類有幾個具體實現。Hadoop一般使用URI(下圖)方案來選取合適的文件系統實例進行交互。

特別的,HDFS文件系統的操作可以使用 FsSystem shell 、客戶端(http rest api、Java api、C api等)。

FsSystem shell 的用法基本同本地shell類似,命令可參考 FsSystem shell

Hadoop是用Java寫的,通過Java Api( FileSystem 類)可以調用大部分Hadoop文件系統的交互操作。更詳細的介紹可參考 hadoop Filesystem 。

非Java開發的應用可以使用由WebHDFS協議提供的HTTP REST API,但是HTTP比原生的Java客戶端要慢,所以不到萬不得已盡量不要使用HTTP傳輸特大數據。通過HTTP來訪問HDFS有兩種方法:

兩種如圖

在第一種情況中,namenode和datanode內嵌的web服務作為WebHDFS的端節點運行(是否啟用WebHDFS可通過dfs.webhdfs.enabled設置,默認為true)。文件元數據在namenode上,文件讀寫操作首先被發往namenode,有namenode發送一個HTTP重定向至某個客戶端,指示以流的方式傳輸文件數據的目的或源datanode。

第二種方法依靠一個或多個獨立代理伺服器通過HTTP訪問HDFS。所有集群的網路通信都需要通過代理,因此客戶端從來不直接訪問namenode或datanode。使用代理後可以使用更嚴格的防火牆策略和帶寬策略。

HttpFs代理提供和WebHDFS相同的HTTP介面,這樣客戶端能夠通過webhdfs URI訪問介面。HttpFS代理啟動獨立於namenode和datanode的守護進程,使用httpfs.sh 腳本,默認在一個不同的埠上監聽(14000)。

下圖描述了

讀文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。

對上圖的解釋如下:

在讀取過程中, 如果 FSDataInputStream 在和一個 datanode 進行交流時出現了一個錯誤,他就去試一試下一個最接近的塊,他當然也會記住剛才發生錯誤的 datanode 以至於之後不會再在這個 datanode 上進行沒必要的嘗試。 DFSInputStream 也會在 datanode 上傳輸出的數據上核查檢查數(checknums).如果損壞的塊被發現了, DFSInputStream 就試圖從另一個擁有備份的 datanode 中去讀取備份塊中的數據。

在這個設計中一個重要的方面就是客戶端直接從 datanode 上檢索數據,並通過 namenode 指導來得到每一個塊的最佳 datanode。這種設計允許 HDFS 擴展大量的並發客戶端,因為數據傳輸只是集群上的所有 datanode 展開的。期間,namenode 僅僅只需要服務於獲取塊位置的請求(塊位置信息是存放在內存中,所以效率很高)。如果不這樣設計,隨著客戶端數據量的增長,數據服務就會很快成為一個瓶頸。

我們知道,相對於客戶端(之後就是 maprece task 了),塊的位置有以下可能性:

我們認為他們對於客戶端的帶寬遞減,距離遞增(括弧中表示距離)。示意圖如下:

如果集群中的機器都在同一個機架上,我們無需其他配置,若集群比較復雜,由於hadoop無法自動發現網路拓撲,所以需要額外配置網路拓撲。

基本讀取程序,將文件內容輸出到console

FileSystemCat

隨機讀取

展開原碼

下圖描述了寫文件時客戶端與 HDFS 中的 namenode, datanode 之間的數據流動。

對上圖的解釋如下:

如果在任何一個 datanode 在寫入數據的時候失敗了,接下來所做的一切對客戶端都是透明的:首先, pipeline 被關閉,在確認隊列中的剩下的包會被添加進數據隊列的起始位置上,以至於在失敗的節點下游的任 何節點都不會丟失任何的包。然後與 namenode 聯系後,當前在一個好的 datanode 會聯系 namenode, 給失敗節點上還未寫完的塊生成一個新的標識ID, 以至於如果這個失敗的 datanode 不久後恢復了,這個不完整的塊將會被刪除。失敗節點會從 pipeline 中移除,然後剩下兩個好的 datanode 會組成一個的新的 pipeline ,剩下的 這些塊的包(也就是剛才放在數據隊列隊首的包)會繼續寫進 pipeline 中好的 datanode 中。最後,namenode 注意到塊備份數小於規定的備份數,他就安排在另一個節點上創建完成備份,直接從已有的塊中復制就可以。然後一直到滿足了備份數( dfs.replication )。如果有多個節點的寫入失敗了,如果滿足了最小備份數的設置( dfs.namenode.repliction.min ),寫入也將會成功,然後剩下的備份會被集群非同步的執行備份,直到滿足了備份數( dfs.replication )。

創建目錄

文件壓縮有兩大好處:

Hadoop 對於壓縮格式的是自動識別。如果我們壓縮的文件有相應壓縮格式的擴展名(比如 lzo,gz,bzip2 等)。Hadoop 會根據壓縮格式的擴展名自動選擇相對應的解碼器來解壓數據,此過程完全是 Hadoop 自動處理,我們只需要確保輸入的壓縮文件有擴展名。

Hadoop中有多種壓縮格式、演算法和工具,下圖列出了常用的壓縮方法。

表中的「是否可切分」表示對應的壓縮演算法是否支持切分,也就是說是否可以搜索數據流的任意位置並進一步往下讀取數據,可切分的壓縮格式尤其適合MapRece。

所有的壓縮演算法都需要權衡空間/時間:壓縮和解壓縮速度更快,其代價通常是只能節省少量的空間。不同的壓縮工具有不同的特性:

更詳細的比較如下

1.壓縮性能比較

2.優缺點

另外使用hadoop原生(native)類庫比其他java實現有更快的壓縮和解壓縮速度。特徵比較如下:

使用容器文件格式結合壓縮演算法也能更好的提高效率。順序文件、Arvo文件、ORCFiles、Parqurt文件同時支持壓縮和切分。

壓縮舉例(Java)

壓縮

解壓縮

六、文件序列化

序列化是指將結構化數據轉換為位元組流以便在網路上傳輸或寫到磁碟進行永久存儲。反序列化獅子將位元組流轉換回結構化對象的逆過程。

序列化用於分布式數據處理的兩大領域:進程間通信和永久存儲。

對序列化的要求時是格式緊湊(高效使用存儲空間)、快速(讀寫效率高)、可擴展(可以透明地讀取老格式數據)且可以互操作(可以使用不同的語言讀寫數據)。

Hadoop使用的是自己的序列化格式 Writable ,它絕對緊湊、速度快,但不太容易用java以外的語言進行擴展或使用。

當然,用戶也可以使用其他序列化框架或者自定義序列化方式,如 Avro 框架。

Hadoop內部還使用了 Apache Thrift 和 Protocal Buffers 來實現RPC和數據交換。

❷ hadoop配置好之後怎麼訪問埠出現那個頁面

在虛擬機啟動hadoop集群後,在window瀏覽器無法訪問http://master:50070、http://master:8088等集群監控界面。



問題排查:

首先在windows里ping一下是否能通:

若不能ping通,試一下ping IP地址,這里master的IP地址為192.168.128.130.

若IP地址能ping通,則試一下在瀏覽器中將master換成IP地址訪問一下:

如果能利用IP訪問,那麼可以在Windows裡面C:\Windows\System32\drivers\etc路徑用管理員許可權之後,編輯hosts文件,加入虛擬機各節點的hostname和IP地址。(豎著寫,否則解析不出來)

(這里參見的教程:https://blog.csdn.net/Andrea_null/article/details/83025329)

此空拍時再ping一下:

沒問題了,後面就可以碰毀用:http://master:50070/直接訪問了。

若IP地址都不能ping通,那麼需要從虛擬機裡面配置的鏡像找原因了,一個比較常見的原因是虛擬機未關閉防火牆,參見教程:
https://blog.csdn.net/weixin_30323631/article/details/95254174

題外話:我原本是把Hadoop的各種配置都弄好了,訪問也沒有問題,但是在我將VMware卸載了又重裝後,就在瀏覽器不能訪問了,可斗吵羨能是host文件改變了,所以一個經驗是:每次重裝VMware後,要檢查一下系統的host文件

❸ Hadoop集群以外的機器如何訪問Hadoop集群,進行提交文件,下載文件

集群以外的機器如何訪問Hadoop集群,並像集群中提交作業和傳送數據
(1)首先,在機器上安裝nutch或者hadoop
(2)配置兩個文件
hadoop-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://gc04vm12:9000</value>
<description> </description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>gc04vm12:9001</value>
<description> </description>
</property>
</configuration>
(3)這樣便能執行命令,查看集群狀態,向集群提交作業

(4)hdfs中的用戶
使用root登陸而hadoop中沒有創建root用戶時,使用如下命令時,查看到的就不是nutch用戶主目錄 /user/root了
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 執行此命令時,即是列出/user/root(root用戶主目錄)目錄下的文件或目錄
ls: Cannot access .: No such file or directory. 沒有此目錄
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls /
Found 3 items
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:55 /usr 這個是什麼?
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 主目錄(/user/root)中創建x目錄,提示以下信息
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="user":nutch:supergroup:rwxr-xr-x
這是因為root用戶對/user/目錄沒有寫許可權(drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user)

hdfs中的nutch用戶是啟動hadoop集群的這個用戶,當客戶機中也存在nutch用戶時,登陸後訪問hdfs時,進入的是home目錄(/user/nutch)。
hdfs中文件和目錄的許可權類似linux,可以修改其許可權,改變其所屬組
nutch用戶格式化namenode,啟動hadoop集群(會用到nutch用戶的公鑰信息,ssh配置)後,執行命令,
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 執行此命令時,即是列出/user/nutch(nutch用戶主目錄)目錄下的文件或目錄
ls: Cannot access .: No such file or directory.
因為沒有/user/nutch目錄,所以不能訪問,而此時若創建一個文件,如使用以下命令
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 則可以順利執行,此時它將創建/user/nutch/x目錄。
而使用root用戶不行,是因為 root用戶對/user/目錄沒有寫許可權。
那麼如何創建一個root用戶呢,可以這樣做
超級用戶nutch在hdfs中創建目錄/user/root,即 bin/hadoop dfs -mkdir /user/root
更改/user/root目錄所屬用戶和組, bin/hadoop dfs -chown -R root:root /user/root (若此處沒有指定組,則默認root屬於supergroup組, bin/hadoop dfs -chown -R root /user/root)
這樣就相當於在hdfs中創建了用戶root,組root;
用戶許可權和Linux類似,nutch是超級用戶。
例如nutch在root的home目錄下創建目錄s,則s的許可權如下,屬於nutch,組是root
drwxr-xr-x - nutch root 0 2010-05-21 04:41 /user/root/s
root用戶此時就不能寫s目錄了
[root@gc04vm14 nutch-1.0]# bin/hadoop dfs -mkdir s/x
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="s":nutch:root:rwxr-xr-x

root用戶屬於root組,並且執行作業,會提示錯誤,如下
[root@gc03vm12 nutch-1.0]# bin/nutch crawl /user/nutch/urls -dir data2 -depth 5 -topN 8
提示如下錯誤
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="tmp":nutch:supergroup:rwxr-xr-x
這是因為root用戶對/tmp目錄(hdfs目錄)沒有寫許可權,因為作業執行時,會在/tmp目錄下生成相應的job文件,
/tmp的許可權如下:
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
因此非超級用戶提交作業時,用戶問題是一個很麻煩的問題
註:
hadoop有些命令只能在namenode上執行

❹ 初次啟動Hadoop

首先把Hadoop安裝包解壓到系統中

查看其目錄結構

要修改hadoop的稿轎一些配置,在etc/hadoop/目錄下,修改hadoop-env.sh

配置jdk的路徑

修改core-site.xml

在configuration中添加

fs.defaultFS  表示hadoop默認的文件系統是什麼

hadoop.tmp.dir 表示其他datanode產生的要放在namenode上的文件的衫返存放路徑

在/etc/profile中添加Hadoop的環境變數配置,之後source

此時已經可以啟動hadoop了

啟動前先初始化hadoop 也就是創建那個臨時目錄

表示成功

啟動hadoop的命令是hadoop-daemon.sh start namenode

查看一下 pid=4778即為hadoop的進程 9000是剛才在配置文件中配置的內部埠 50070是外部窗口

打開電腦上的瀏覽鍵塌肆器輸入nn-01:50070(nn-01是hostname)即可出現如下界面 證明hadoop啟動成功並可訪問

❺ hadoop程序怎麼訪問hdfs路徑

先用hdfsGetPathInfo 得到一個hdfsFileInfo類型的結構體, get_real_path(dsh, s, real_path); hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);// 這個結構體中有個kind屬性,就是來區分是文件還是目錄 typedef struct
~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕
~~手機提問的朋友在客戶端右上角評價點【滿意】即可。
~你的採納是我前進的動力
~~O(∩_∩)O,記得好評和採納,互相幫助,謝謝。

❻ hadoop怎麼訪問hdfs路徑

先用hdfsGetPathInfo 得到一個hdfsFileInfo類型的結構體,
get_real_path(dsh, s, real_path);
hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);//
這個結構體中有個kind屬性,就是來區分是文件還是目錄
typedef struct {
tObjectKind mKind; /* file or directory */
char *mName; /* the name of the file */
tTime mLastMod; /* the last modification time for the file in seconds */
tOffset mSize; /* the size of the file in bytes */
short mReplication; /* the count of replicas */
tOffset mBlockSize; /* the block size for the file */
char *mOwner; /* the owner of the file */
char *mGroup; /* the group associated with the file */
short mPermissions; /* the permissions associated with the file */
tTime mLastAccess; /* the last access time for the file in seconds */
} hdfsFileInfo;

熱點內容
學校考試伺服器地址 發布:2024-11-30 10:35:30 瀏覽:683
nas無盤伺服器搭建教程 發布:2024-11-30 10:27:07 瀏覽:156
觸摸精靈腳本解密 發布:2024-11-30 10:27:04 瀏覽:328
如何解鎖密碼鎖上的密碼用數字解 發布:2024-11-30 10:07:55 瀏覽:454
文件夾選項怎麼找 發布:2024-11-30 10:05:50 瀏覽:378
安卓手機界面下面返回鍵怎麼設置 發布:2024-11-30 09:59:12 瀏覽:65
名ftp是 發布:2024-11-30 09:59:12 瀏覽:294
用戶上傳伴奏 發布:2024-11-30 09:35:33 瀏覽:264
sql伺服器配置失敗 發布:2024-11-30 09:35:21 瀏覽:911
php從傳智播客 發布:2024-11-30 09:33:47 瀏覽:966