『壹』 搭建hadoop集群,常用配置文件是什麼,以及配置哪些屬性
一. 簡介
參考了網上許多教程,最終把hadoop在ubuntu14.04中安裝配置成功。下面就把詳細的安裝步驟敘述一下。我所使用的環境:兩台ubuntu 14.04 64位的台式機,hadoop選擇2.7.1版本。(前邊主要介紹單機版的配置,集群版是在單機版的基礎上,主要是配置文件有所不同,後邊會有詳細說明)
二. 准備工作
2.1 創建用戶
創建用戶,並為其添加root許可權,經過親自驗證下面這種方法比較好。
1 sudo adser hadoop2 sudo vim /etc/sudoers3 # 修改內容如下:4 root ALL = (ALL)ALL5 hadoop ALL = (ALL)ALL
給hadoop用戶創建目錄,並添加到sudo用戶組中,命令如下:
1 sudo chown hadoop /home/hadoop2 # 添加到sudo用戶組3 sudo adser hadoop sudo
最後注銷當前用戶,使用新創建的hadoop用戶登陸。
2.2安裝ssh服務
ubuntu中默認是沒有裝ssh server的(只有ssh client),所以先運行以下命令安裝openssh-server。安裝過程輕松加愉快~
sudo apt-get install ssh openssh-server
2.3 配置ssh無密碼登陸
直接上代碼:執行完下邊的代碼就可以直接登陸了(可以運行ssh localhost進行驗證)
1 cd ~/.ssh# 如果找不到這個文件夾,先執行一下 "ssh localhost"2 ssh-keygen -t rsa3 cp id_rsa.pub authorized_keys
注意:
這里實現的是無密登陸自己,只適用與hadoop單機環境。如果配置Hadoop集群設置Master與Slave的SSH無密登陸可
三. 安裝過程
3.1 下載hadoop安裝包
有兩種下載方式:
1. 直接去官網下載:
2. 使用wget命令下載:
3.2 配置hadoop
1. 解壓下載的hadoop安裝包,並修改配置文件。我的解壓目錄是(/home/hadoop/hadoop-2.7.1),即進入/home/hadoop/文件夾下執行下面的解壓縮命令。
tar -zxvf hadoop-2.7.1.tar.gz
2. 修改配置文件:(hadoop2.7.1/etc/hadoop/)目錄下,hadoop-env.sh,core-site.xml,mapred-site.xml.template,hdfs-site.xml。
(1). core-site.xml 配置:其中的hadoop.tmp.dir的路徑可以根據自己的習慣進行設置。
至此,wordcount demo 運行結束。
六. 總結
配置過程遇到了很多問題,最後都一一解決,收獲很多,特此把這次配置的經驗分享出來,方便想要配置hadoop環境的各位朋友~
(Hadoop集群安裝配置過程基本和單機版是一樣的,主要是在配置文件方面有所區別,以及ssh無密登陸要求master和slave能夠互相無密登陸。
『貳』 如何配置Hadoop環境
資源下載
1、JDK下載:下載鏈接
2、hadoop:下載鏈接
3、下載完成後驗證一下下載,將計算的MD5值與官網的進行對比已驗證安裝包的准確性:
md5sum ./hadoop-2.6.*.tar.gz | tr "a-z" "A-Z" # 計算md5值,並轉化為大寫,方便比較1
一、創建Hadoop用戶
創建hadoop用戶,並分配以用戶名為家目錄/home/hadoop,並將其加入到sudo用戶組,創建好用戶之後,以hadoop用戶登錄:
sudo useradd -m hadoop -s /bin/bash sudo adser hadoop sudo
sudo passwd hadoop # 設置hadoop用戶密碼123
二、安裝JDK、Hadoop及配置環境變數
安裝,解壓JDK到/usr/lib/java/路徑下,Hadoop到/usr/local/etc/hadoop/路徑下:
tar zxf ./hadoop-2.6.*.tar.gz
mv ./hadoop-2.6.* /usr/local/etc/hadoop # 將 /usr/local/etc/hadoop作為Hadoop的安裝路徑12
解壓完成之後,可驗證hadoop的可用性:
cd /usr/local/etc/hadoop
./bin/hadoop version # 查看hadoop的版本信息12
若在此處,會出現類似以下的錯誤信息,則很有可能是該安裝包有問題。
Error: Could not find or load main class org.apache.hadoop.util.VersionInfo1
配置環境,編輯「/etc/profile」文件,在其後添加如下信息:
export HADOOP_HOME=/usr/local/etc/hadoopexport JAVA_HOME=/usr/lib/java/jdk1.8.0_45export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin12345
使配置的變數生效:
source /etc/profile1
三、測試一下
在此我們可以運行一個簡單的官方Demo:
cd `echo $HADOOP_HOME` # 到hadoop安裝路徑
mkdir ./input
cp ./etc/hadoop/*.xml ./input
hadoop jar ./share/hadoop/maprece/hadoop-maprece-examples-*.jar grep ./input ./output 'dfs[a-z.]+'1234
輸出的結果應該會是:
1 dfsadmin 1
這里有一點需要注意,該Example程序運行時不能已存在output目錄,否則或將無法執行!
四、Hadoop的偽分布式環境搭建
什麼是偽分布式?Hadoop 偽分布式模式是在一台機器上模擬Hadoop分布式,單機上的分布式並不是真正的分布式,而是使用線程模擬的分布式。分布式和偽分布式這兩種配置也很相似,唯一不同的地方是偽分布式是在一台機器上配置,也就是名位元組點(namenode)和數據節點(datanode)均是同一台機器。
需要配置的文件有core-site.xml和hdfs-site.xml這兩個文件他們都位於${HADOOP_HOME}/etc/hadoop/文件夾下。
其中core-site.xml:
文件hdfs-site.xml的配置如下:
配置完成後,執行格式化命令,使HDFS將制定的目錄進行格式化:
若格式化成功,在臨近輸出的結尾部分可看到如下信息:
如果發現並沒有出現如上信息,則使用刷新節點命令進行刷新:
八、HDFS集群實例測試
依然是之前的那個示例,首先,創建一個數據源文件夾,並添加數據:
運行maprece示例:
holding…
『叄』 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和數據交換。
『肆』 HDFS操作命令
HDFS命令基本格式:hadoop fs -cmd < args >
表格:
注意:以上表格中路徑包括hdfs中的路徑和linux中的路徑。對於容易產生歧義的地方,會特別指出「linux路徑」或者「hdfs路徑」。如果沒有明確指出,意味著是hdfs路徑。
HDFS有一個默認的工作目錄/user/$USER,其中$USER是用戶的登錄用戶名。不過目錄不會自動建立,需要mkdir建立它
命令格式:hadoop fs -mkdir
注意:支持級聯創建新目錄,Hadoop的mkdir命令會自動創建父目錄,類似於帶-p的linux命令
put命令從本地文件系統中 復制單個或多個 源路徑到目標文件系統,也支持從標准輸入設備中讀取輸入並寫入目標文件系統。分為本地上傳和上傳到HDFS中。
命令格式:hadoop fs -put filename
最後一個參數是句點,相當於放入了默認的工作目錄,等價於 hadoop fs -put example.txt /user/chen
上傳文件時,文件首先復制到DataNode上,只有所有的DataNode都成功接收完數據,文件上傳才是成功的。
命令格式:hadoop dfs put filename newfilename
從本地文件系統中復制單個或多個源路徑到目標文件系統。也支持從 標准輸入 中讀取輸入寫入目標文件系統。
採用-ls命令列出HDFS上的文件。在HDFS中未帶參數的-ls命令沒有返回任何值,它默認返回HDFS的home目錄下
的內容。在HDFS中,沒有當前工作目錄這樣一個概念,也沒有cmd這樣的命令。
命令格式:user@NameNode:hadoop$ bin/hadoop dfs -ls
如:
通過「-ls 文件夾名」 命令瀏覽HDFS下文件夾中的文件
命令格式:hadoop dfs -ls 文件夾名
通過該命令可以查看in文件夾中的所有文檔文件
通過「-cat 文件名」命令查看HDFS下文件夾中某個文件的內容
命令格式:hadoop$ bin/hadoop dfs -cat 文件名
通過這個命令可以查看in文件夾中所有文件的內容
通過「-get 文件按1 文件2」命令將HDFS中某目錄下的文件復制到本地系統的某文件中,並對該文件重新命名。
命令格式:hadoop dfs -get 文件名 新文件名
-get 命令與-put命令一樣,既可以操作目錄,也可以操作文件
通過「-rmr 文件」命令刪除HDFS下的文件
命令格式:hadoop$ bin/hadoop dfs -rmr 文件
-rmr 刪除文檔命令相當於delete的遞歸版本。
通過-format命令實現HDFS格式化
命令格式:user@NameNode:hadoop$ bin/hadoop NameNode -format
通過運行start-dfs.sh,就可以啟動HDFS了
命令格式:user@NameNode:hadoop$ bin/ start-dfs.sh
當需要退出HDFS時,通過stop-dfs.sh 就可以關閉HDFS
命令格式:user@NameNode:hadoop$ bin/ stop-dfs.sh
HDFS的命令遠不止這些,對於其他操作,可以通過-help commandName 命令列出清單。下面列舉一些命令進行說明。
(1)chgrp改變文件所屬的組命令
chgrp命令的用途是:更改文件或目錄的組所有權。
語法格式:hadoop fs -charg [-R] GROUP URL .....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者超級用戶。
(2)chmod改變文件的許可權
chmod用於改變文件或目錄的訪問許可權,這個Linux系統管理員最常用的命令之一。
使用方法:hadoop fs -chmod [-R] ...
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者是超級用戶
(3)chown改變文件的擁有者
chown命令改變文件的擁有者。
使用方法:hadoop fs -chown [-R]....
使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是超級用戶。
(4)FromLocal命令
除了限定 源路徑 是只能是一個 本地文件 外,其他方面和put命令相似。
使用方法:hadoop fs -FromLocal <localsrc> URI
(5)ToLocal命令
除了限定 目標路徑 是一個 本地文件 外,其他方面和get命令類似。
使用方法:hadoop fs -ToLocal {-ignorecrc} {-crc} URI <localdst>
(6)cp命令
cp命令是將文件從源路徑復制到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。
使用方法:hadoop fs -cp URI [URI....] <dest>
返回值:成功返回0 ,失敗返回-1
(7)命令
命令顯示目錄中 所有文件的大小 ,或者當只指定一個文件時,顯示此文件的大小
使用方法:hadoop fs - URI [URI........]
返回值
成功返回0,失敗返回-1
(8)s命令
s是顯示 文件大小 的命令。
使用方法:hadoop fs -s <args>
(9)expunge命令
expunge是清空回收站的命令
使用方法:hadoop fs -expunge
(10)get命令
get是復制文件到本地文件系統的命令
使用方法:hadoop fs -get [-ignorecrc] [-crc] <localdst>
可用-ignorecrc選項復制CRC校驗失敗的文件:使用-CRC選項復制文件以及CRC信息。
返回值
成功返回0,失敗返回-1
(11)getmerge命令
getmerge命令用於接受一個源目錄和一個目標文件作為輸入,並且將源目錄中所有的文件合並成本地目標文件。
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
參數說明:addl是可選的,用於指定在每個文件結尾添加一個換行符;
假設在你的hdfs集群上有一個/user/hadoop/output目錄
裡面有作業執行的結果(多個文件組成)part-000000,part-000001,part-000002
然後就可以在本地使用vi local_file查看內容了
(12)ls命令
ls命令查看當前目錄下的信息
使用方法:hadoop fs -ls <args>
如果是 文件 ,則按照如下格式返迴文件信息:
文件名 <副本數>文件大小 修改日期 修改時間 許可權 用戶ID 組ID
如果是 目錄 ,則返回它直接子文件的一個列表,就像在UNIX中一樣。目錄返回i額表的信息如下:
目錄名<dir>修改日期 修改時間 許可權 用戶ID 組ID
返回值
成功返回0,失敗返回-1
(13)lsr命令
lsr命令是-ls命令的遞歸版,類似於UNIX中的ls-r。
使用方法:hadoop fs -lsr <args>
(14)movefromLocal命令
復制一份本地文件到hdfs,當成功後,刪除本地文件
使用方法:dfs -moveFromLocal <src> <dst>
(14.5)moveToLocal命令
類似於-get,但是當復制完成後,會刪除hdfs上的文件
使用方法:moveToLocal <src> <localDest>
(15)mv命令
將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄
使用方法:hadoop fs -mv URI [URI.....] <dest>
備註:不允許在不同的文件系統間移動文件。
返回值
成功返回0,失敗返回-1
(16)put 命令
put命令從本地文件系統中復制單個或多個源路徑到目標文件系統,也支持從標准輸入中讀取輸入寫入目標文件系統
使用方法:hadoop fs -put <localsrc> .... <dst>
(17)rm命令
rm命令刪除指定的文件,只刪除非空目錄和文件。
使用方法:hadoop fs -rm URI [URI......]
請參考rmr命令了解遞歸刪除。
(18)rmr命令
rmr命令是delete命令的遞歸版本
使用方法:hadoop fs -rmr URI [URI.......]
返回值
成功返回0,失敗返回-1
(19)setrep命令
setrep命令可以改變一個文件的副本系數。
使用方法:hadoop fs -setrep [-R] <path>
參數說明:-R 選項用於遞歸改變目錄下所有文件的副本系數
返回值
成功返回0,失敗返回-1
(20)stat命令
stat命令用於返回指定路徑的統計信息
使用方法:hadoop fs -stat URI [URI......]
返回值
成功返回0,失敗返回-1
(21)tail命令
tail命令將文件尾部1KB的內容輸出到stdout。支持-f選項,行為和UNIX中一致
使用方法:hadoop fs -tail [-f] URI
返回值
成功返回0,失敗返回-1
(22)test命令
test命令是檢查命令,可以檢查文件是否存在、文件的大小等。
使用方法:hadoop fs -test -[ezd] URI
(23)text命令
text命令用於將源文件輸出問文本格式
使用方法:hadoop fs -text <src>
允許的格式是zip和TextRecordInputStream。
(24)touchz 命令
touchz命令用於創建一個0位元組的空文件。
使用方法: hadoop fs -touchz URI [URI....]
返回值
成功返回0,失敗返回-1
『伍』 在hadoop中什麼命令的功能是將一個或多個
1、啟動hadoop所有進程
start-all.sh等價於start-dfs.sh + start-yarn.sh
但是一般不推薦使用start-all.sh(因為開源框架中內部命令啟動有很多問題)。
2、單進程啟動。
sbin/start-dfs.sh
---------------
sbin/hadoop-daemons.sh --config .. --hostname .. start namenode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start datanode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start sescondarynamenode ...
sbin/hadoop-daemons.sh --config .. --hostname .. start zkfc ... //
sbin/start-yarn.sh
--------------
libexec/yarn-config.sh
sbin/yarn-daemon.sh --config $YARN_CONF_DIR start resourcemanager
sbin/yarn-daemons.sh --config $YARN_CONF_DIR start nodemanager
3、常用命令
1、查看指定目錄下內容
hdfs dfs –ls [文件目錄]
hdfs dfs -ls -R / //顯式目錄結構
eg: hdfs dfs –ls /user/wangkai.pt
2、打開某個已存在文件
hdfs dfs –cat [file_path]
eg:hdfs dfs -cat /user/wangkai.pt/data.txt
3、將本地文件存儲至hadoop
hdfs dfs –put [本地地址] [hadoop目錄]
hdfs dfs –put /home/t/file.txt /user/t
4、將本地文件夾存儲至hadoop
hdfs dfs –put [本地目錄] [hadoop目錄]
hdfs dfs –put /home/t/dir_name /user/t
(dir_name是文件夾名)
5、將hadoop上某個文件down至本地已有目錄下
hadoop dfs -get [文件目錄] [本地目錄]
hadoop dfs –get /user/t/ok.txt /home/t
6、刪除hadoop上指定文件
hdfs dfs –rm [文件地址]
hdfs dfs –rm /user/t/ok.txt
7、刪除hadoop上指定文件夾(包含子目錄等)
hdfs dfs –rm [目錄地址]
hdfs dfs –rmr /user/t
8、在hadoop指定目錄內創建新目錄
hdfs dfs –mkdir /user/t
hdfs dfs -mkdir - p /user/centos/hadoop
9、在hadoop指定目錄下新建一個空文件
使用touchz命令:
hdfs dfs -touchz /user/new.txt
10、將hadoop上某個文件重命名
使用mv命令:
hdfs dfs –mv /user/test.txt /user/ok.txt (將test.txt重命名為ok.txt)
11、將hadoop指定目錄下所有內容保存為一個文件,同時down至本地
hdfs dfs –getmerge /user /home/t
12、將正在運行的hadoop作業kill掉
hadoop job –kill [job-id]
13.查看幫助
hdfs dfs -help
4、安全模式
(1)退出安全模式
NameNode在啟動時會自動進入安全模式。安全模式是NameNode的一種狀態,在這個階段,文件系統不允許有任何修改。
系統顯示Name node in safe mode,說明系統正處於安全模式,這時只需要等待十幾秒即可,也可通過下面的命令退出安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode leave
(2) 進入安全模式
在必要情況下,可以通過以下命令把HDFS置於安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode enter
5、節點添加
添加一個新的DataNode節點,先在新加節點上安裝好Hadoop,要和NameNode使用相同的配置(可以直接從NameNode復制),修改HADOOPHOME/conf/master文件,加入NameNode主機名。然後在NameNode節點上修改HADOOPHOME/conf/master文件,加入NameNode主機名。然後在NameNode節點上修改HADOOP_HOME/conf/slaves文件,加入新節點名,再建立新加節點無密碼的SSH連接,運行啟動命令為:/usr/local/hadoop$bin/start-all.sh
6、負載均衡
HDFS的數據在各個DataNode中的分布可能很不均勻,尤其是在DataNode節點出現故障或新增DataNode節點時。新增數據塊時NameNode對DataNode節點的選擇策略也有可能導致數據塊分布不均勻。用戶可以使用命令重新平衡DataNode上的數據塊的分布:/usr/local/hadoop$bin/start-balancer.sh
7、補充
1.對hdfs操作的命令格式是hdfs dfs
1.1 -ls 表示對hdfs下一級目錄的查看
1.2 -lsr 表示對hdfs目錄的遞歸查看
1.3 -mkdir 創建目錄
1.4 -put 從Linux上傳文件到hdfs
1.5 -get 從hdfs下載文件到linux
1.6 -text 查看文件內容
1.7 -rm 表示刪除文件
1.7 -rmr 表示遞歸刪除文件
2.hdfs在對數據存儲進行block劃分時,如果文件大小超過block,那麼按照block大小進行劃分;不如block size的,劃分為一個塊,是實際數據大小。
*****PermissionDenyException 許可權不足**********
hadoop常用命令:
hdfs dfs 查看Hadoop HDFS支持的所有命令
hdfs dfs –ls 列出目錄及文件信息
hdfs dfs –lsr 循環列出目錄、子目錄及文件信息
hdfs dfs –put test.txt /user/sunlightcs 將本地文件系統的test.txt復制到HDFS文件系統的/user/sunlightcs目錄下
hdfs dfs –get /user/sunlightcs/test.txt . 將HDFS中的test.txt復制到本地文件系統中,與-put命令相反
hdfs dfs –cat /user/sunlightcs/test.txt 查看HDFS文件系統里test.txt的內容
hdfs dfs –tail /user/sunlightcs/test.txt 查看最後1KB的內容
hdfs dfs –rm /user/sunlightcs/test.txt 從HDFS文件系統刪除test.txt文件,rm命令也可以刪除空目錄
hdfs dfs –rmr /user/sunlightcs 刪除/user/sunlightcs目錄以及所有子目錄
hdfs dfs –FromLocal test.txt /user/sunlightcs/test.txt 從本地文件系統復制文件到HDFS文件系統,等同於put命令
hdfs dfs –ToLocal /user/sunlightcs/test.txt test.txt 從HDFS文件系統復制文件到本地文件系統,等同於get命令
hdfs dfs –chgrp [-R] /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄所屬群組,選項-R遞歸執行,跟linux命令一樣
hdfs dfs –chown [-R] /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄擁有者,選項-R遞歸執行
hdfs dfs –chmod [-R] MODE /user/sunlightcs 修改HDFS系統中/user/sunlightcs目錄許可權,MODE可以為相應許可權的3位數或+/-{rwx},選項-R遞歸執行
hdfs dfs –count [-q] PATH 查看PATH目錄下,子目錄數、文件數、文件大小、文件名/目錄名
hdfs dfs –cp SRC [SRC …] DST 將文件從SRC復制到DST,如果指定了多個SRC,則DST必須為一個目錄
hdfs dfs – PATH 顯示該目錄中每個文件或目錄的大小
hdfs dfs –s PATH 類似於,PATH為目錄時,會顯示該目錄的總大小
hdfs dfs –expunge 清空回收站,文件被刪除時,它首先會移到臨時目錄.Trash/中,當超過延遲時間之後,文件才會被永久刪除
hdfs dfs –getmerge SRC [SRC …] LOCALDST [addnl] 獲取由SRC指定的所有文件,將它們合並為單個文件,並寫入本地文件系統中的LOCALDST,選項addnl將在每個文件的末尾處加上一個換行符
hdfs dfs –touchz PATH 創建長度為0的空文件
hdfs dfs –test –[ezd] PATH 對PATH進行如下類型的檢查: -e PATH是否存在,如果PATH存在,返回0,否則返回1 -z 文件是否為空,如果長度為0,返回0,否則返回1 -d 是否為目錄,如果PATH為目錄,返回0,否則返回1
hdfs dfs –text PATH 顯示文件的內容,當文件為文本文件時,等同於cat,文件為壓縮格式(gzip以及hadoop的二進制序列文件格式)時,會先解壓縮 hdfs dfs –help ls 查看某個[ls]命令的幫助文檔
本文轉自 https://www.cnblogs.com/LHWorldBlog/p/8514994.html
『陸』 hadoop常用shell命令怎麼用
一、常用的hadoop命令
1、hadoop的fs命令
#查看hadoop所有的fs命令
1
hadoop fs
#上傳文件(put與FromLocal都是上傳命令)
1
2
hadoop fs -put jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
hadoop fs -FromLocal jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
#下載命令(get與ToLocal都是下載命令)
1
2
hadoop fs -get hdfs://hucc01:9000/jdk jdk1.7
hadoop fs -ToLocal hdfs://hucc01:9000/jdk jdk1.7
#將本地一個或者多個文件追加到hdfs文件中(appendToFile)
1
hadoop fs -appendToFile install.log /words
#查詢hdfs的所有文件(ls)
1
hadoop fs -ls /
#幫助命令(help)
1
hadoop fs -help fs
#查看hdfs文件的內容(cat和text)
1
2
hadoop fs -cat /words
hadoop fs -text /words
#刪除hdfs文件(rm)
1
hadoop fs -rm -r /words
#統計hdfs文件和文件夾的數量(count)
1
hadoop fs -count -r /
#合並hdfs某個文件夾的文件,並且下載到本地(getmerge)
1
hadoop fs -getmerge / merge
#將本地文件剪切到hdfs,相當於對本地文件上傳後再刪除(moveFormLocal)
1
hadoop fs -moveFromLocal words /
#查看當前文件系統的使用狀態(df)
1
hadoop fs -df
二、常用的hdfs命令(這個用的比較多)
用法跟hadoop命令一樣,推薦2.0之後使用hdfs命令
1
hdfs dfs