1. 程式人生 > >【HDFS篇】搭建hadoop偽分散式叢集

【HDFS篇】搭建hadoop偽分散式叢集

所謂偽分散式,就是單機模擬多臺伺服器搭建的過程。只是每個角色都是以程序的方式啟動。
基本流程如下:
一,作業系統環境
依賴軟體ssh,jdk
環境的配置
java_home
免金鑰
時間同步
hosts,hostname
二,hadoop部署
/opt/jw/ 新建目錄
profile的修改
java_home 的二次配置
hadoop配置檔案修改

角色在哪裡啟動

備註:檢查Java有沒有裝不要用Java -version 。用jps。【ps看程序,jps=javaps】可第一驗證已裝jdk。第二說明其etc/profile 檔案已經配置了。如果一臺伺服器用rpm安裝後沒有配JAVA_HOME 用java-version 也是可以執行的。

安裝過程:
1.jdk環境
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=PATH:JAVA_HOME/bin
2.載入配置檔案
兩種方式,一種source 一種 . /
3.ssh免金鑰
ssh-keygen -t dsa -P ’ ’ -f ~/.ssh/id_dsa
解釋:-t :type dsa 具體的型別名 -P:密碼 -f:檔案 .ssh 隱藏目錄
id_dsa id_dsa.pub 生成的這兩個檔案,pub是發給別人的。
先對自己免金鑰,同時把金鑰檔案放在authorized_keys金鑰檔案裡。
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
【使用“>>” 追加的方式,別直接使用“>”這樣就把其他的金鑰覆蓋了。】
4.hadoop解壓並配置porfile

export JAVA_HOME=/usr/java/jdk1.7.0_79
export HADOOP_PREFIX=/opt/jw/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

5.hadoop裡的Java_home 的二次配置【ssh遠端呼叫不會載入profile檔案,所以需要二次配置】
vi hadoop-env.sh 下
export JAVA_HOME=${JAVA_HOME}此處改為 絕對路徑
vi mapred-env.sh
vi yarn-env.sh
同樣的操作。
6.hadoop自己的配置
參見

hadoop官網

Configuration
Use the following:
6.1 etc/hadoop/core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value> 【備:將localhost改為主機名】
    </property>
</configuration>

此次配置一語雙關。第一,如果是管理指令碼想啟動角色的時候讀取配置檔案,就會知道應該去哪個機器上哪個埠號啟動NN。
第二,如果是分散式開發需要寫客戶端,如果客戶端讀取到配置檔案的時候,就會知道NN在哪裡。就可以建立socket連線。

6.2 vi /etc/hadoop/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

【配置副本數,偽分散式只可以配成一個】slaves 指定DN在哪裡。
將裡面的localhost改成主機名,我的是:node01
如果 後續搭建 完全分散式,就需要根據實際的DN的位置配置相應的主機名。
修改預設配置,這裡有可選擇性修改,如果只修改core.xml裡的hadoop.tmp.dir 就可以同時修改hdfs.xml裡的2出配置,dfs.namenode.name.dir 和 dfs.datanode.data.dir
6.3 修改default配置
因為這裡都是存放對的路徑是tmp目錄,此目錄是作業系統核心直接操作的,不用和使用者打招呼的。臨時目錄是會被清空的。可以刪除,但是hdfs的配置裡的NN存元資料在磁碟位置也在此tmp目錄下。DN也存tmp。所以存在安全隱患。直接修改core的配置多處生效。
修改core的配置資訊,重新定義hadoop.tmp.dir的位置覆蓋原有路徑。

 <property>
        <name>hadoop.tmp.dir</name>
        <value>/var/jw/hadoop/local</value> linux目錄下var 目錄是存資料的新建此】
    </property> 

6.4 增加secondarynamenode配置資訊
有關secondarynamenode的配置資訊在hdfs的配置檔案中。 配置dfs.namenode.secondary.http-address即可,參見官網

 <property>
        <name>dfs.namenode.secondary.http-address<name>
        <value>node01:50090</value>
    </property>

7.執行過程
7.1 初始化fomat 參見官網說明 中的Execution

Format the filesystem:
$ bin/hdfs namenode -format
當發現有如下字樣的提示資訊時說明成功: has been successfully formatted.
進入var目錄下建奶茶是否有jw的資料夾,裡面尋找hadoop的目錄下有VERSION檔案。裡面存放的叢集的id和block塊的id等資訊。注意format的過程是輕量級的。只是幫我們建立一些目錄及檔案。如果此叢集不需要推到重來,只需要格式化一次就行了。因此再次格式化會重新生成新的id。是前置的過程,還沒有啟動。
7.2 正式啟動Hadoop
start-dfs.sh

node01: Warning: Permanently added 'node01,192.168.159.36' (RSA) to the list of known hosts.
node01: starting namenode, logging to /opt/jw/hadoop-2.6.5/logs/hadoop-root-namenode-node01.out
node01: starting datanode, logging to /opt/jw/hadoop-2.6.5/logs/hadoop-root-datanode-node01.out
Starting secondary namenodes [node01]
node01: starting secondarynamenode, logging to /opt/jw/hadoop-2.6.5/logs/hadoop-root-secondarynamenode-node01.out

想檢視日誌資訊,不要看上面的.out日誌資訊,看那個目錄下的.log檔案。
回到
dfs目錄下發現多出有一個data和namescecondary目錄。data存DN資訊,name目錄存NN元資料資訊。data裡面有同樣的VERSION檔案。說明format的過程產生的VERSION檔案,會被其他的角色拷走。會又說回來如果再次格式化,生成的VERSION裡的id會和原始的DN裡的id不同。不會組成一個叢集。DN一旦找不到NN會把自己下線。
通過jps檢查是否全部啟動。
2116 Jps
1984 SecondaryNameNode
1753 NameNode
1831 DataNode
可通過web頁面訪問。輸入 ip:50070 注意NN 的埠號是:50070
可點選Live Nodes 來檢視當前活躍的節點。
這裡寫圖片描述
點選次數進入hdfs檔案系統的瀏覽。
這裡寫圖片描述

7.3 推送檔案
第一次搭建檔案系統是空的,我們可往上放檔案,
此檔案系統是NN記憶體中開闢的假的檔案系統,不是本機的檔案系統。
通過命令:hdfs 檢視 然後再 hdfs dfs 檢視。
hdfs dfs -mkdir -p /user/root 建立目錄。 其中 -p 是遞迴建立的意思。 user是其家目錄。
推送檔案:
hdfs dfs -put ./software/file/linux-basic/hadoop-2.6.5.tar.gz
這裡寫圖片描述
這裡寫圖片描述
檢查block塊資訊,在7.2下的data檔案下存放。
cd /var/jw/hadoop/local/dfs/data/current/BP-526220695-192.168.159.36-1516732785625/current/finalized/subdir0/subdir0/
這裡寫圖片描述
其中.meta 是對應的元資料資訊。
此為存放的block塊普通的檔案。但計算程式不是直接訪問此檔案,是通過hdfs封裝的IO流訪問的。
7.4 自定義大小推送檔案
for i in seq 100000;do echo “hello jw $i” >> jw.txt;done
【hdfs限制死塊的大小不小於1M】
hdfs dfs -D dfs.blocksize=1048576 -put ./jw.txt /user/root
如果只是想放在家目錄下,並且已經建立了目錄,root目錄,那麼後面的家目錄路徑可不寫。這裡寫圖片描述
至此偽分散式搭建完成。