2,Hadoop環境搭建之本地模式

二次JDK配置的原因:

Ssh命令遠程調用其它結點的時候,不會加載/etc/profile文件。我們一般部署JDK的時候將JAVA_HOME寫在profile文件中,hadoop需要jdk,遠程腳本啓動其它結點的時候會失敗。需要在hadoop中再做二次jdk配置。(就是因爲遠程調用對方的時候不會加載對方的etc/profile文件導致拿不到JAVA_HOME)

集羣配置步驟分析:

分三步1,操作系統環境的配置。2,hadoop配置文件的配置。3,格式化啓動hadoop角色。

1,操作系統環境配置

  (1)JDK配置

export JAVA_HOME=/usr/java/jdk1.7.0_45
export PATH=$PATH:$JAVA_HOME/bin

  (2)ssh安裝

yum -y install openssh-clients

  (3)免祕鑰配置

[root@node01 .ssh]# ssh-keygen -t dsa -P '' -f ./id_dsa    (生成公鑰密鑰文件)
[root@node01 .ssh]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys   (讀取自己的公鑰追加記錄到authorized_keys認證文件中) 當我們ssh localhost的時候,會拿着id_dsa.pub去找本機的authorized_keys認證

2,hadoop本地模式部署配置

   (1)創建目錄文件,將hadoop安裝包解壓到指定目錄

[root@node01 hadoop-2.6.5]# mkdir /opt/sxt
[root@node01 hadoop-2.6.5]# tar -zxvf hadoop-2.6.5.tar.gz -C /opt/sxt/


解壓後目錄結構爲:

drwxr-xr-x. 2 root root  4096 5月  24 2017 bin       hadoop項目中的功能
drwxr-xr-x. 3 root root  4096 5月  24 2017 etc 	       hadoop配置文件
drwxr-xr-x. 2 root root  4096 5月  24 2017 include
drwxr-xr-x. 3 root root  4096 5月  24 2017 lib
drwxr-xr-x. 2 root root  4096 5月  24 2017 libexec
-rw-r--r--. 1 root root 84853 5月  24 2017 LICENSE.txt
-rw-r--r--. 1 root root 14978 5月  24 2017 NOTICE.txt
-rw-r--r--. 1 root root  1366 5月  24 2017 README.txt
drwxr-xr-x. 2 root root  4096 5月  24 2017 sbin         操作系統啓停服務管理腳本
drwxr-xr-x. 4 root root  4096 5月  24 2017 share		    jar包

   (2)配置hadoop的環境變量,以便可以在任何目錄執行hadoop命令

export HADOOP_PREFIX=/opt/sxt/hadoop-2.6.5
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin

   (3)Hadoop中做jdk二次配置(由於ssh遠程調用的時候/etc/profile文件不會被加載) 

[root@node01 hadoop]# pwd
/opt/sxt/hadoop-2.6.5/etc/hadoop

[root@node01 hadoop]# echo $JAVA_HOME
/usr/java/jdk1.7.0_45

配置  hadoop-env.sh,yarn-env.sh,mapred-env.sh 中JAVA_HOME

  (4)調整配置文件規劃hadoop角色

            1),規劃NameNode位置

etc/hadoop/core-site.xml(規劃NameNode在哪裏):   默認文件系統入口,服務腳本啓動集羣的時候讀到這裏就知道NameNode在哪裏啓動了,啓動時候佔用9000端口通信。DataNode和NameNode通信的時候也能找到。
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000</value>
    </property>
</configuration>

         2),etc/hadoop/hdfs-site.xml(副本數量):

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

       3),DataNode 通過slaves規劃

       4),SecondaryNameNode的規劃  hdfs-site.xml

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

   5),由於Hadoop的臨時文件存儲目錄在系統的tmp目錄下,隨時有可能被系統自己刪掉,需要自己單獨設置位置。core-site.xml

<property>
        <name>hadoop.tmp.dir</name>
        <value>/var/sxt/hadoop/local</value>
</property>

到目前爲止,NameNode在node01,DataNode在node01,SecondaryNameNode也在node01,角色都規劃好了,磁盤存放文件的目錄也規劃好了。 

3,格式化NameNode啓動集羣

Hdfs namenode -format 執行格式化NameNode操作

[root@node01 current]# cat VERSION 
#Fri Sep 28 01:46:39 CST 2018
namespaceID=1211221902
clusterID=CID-76a23f89-3eff-45a5-97cd-a43ac1bb125f
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1418018278-192.168.25.201-1538070399463
layoutVersion=-60

當我們搭建完全分佈式,不是在一個進程中的多線程時,或者一個大的局域網中可以搭建兩套甚至多套hadoop集羣,那麼如何能保證這套的NameNode不會和另一套的DataNode通信呢?需要有一個標誌,就是clusterID集羣ID,其實格式化的時候是先創建了一個集羣id,clusterID,DataNode啓動的時候,空的DataNode會尋找NameNode將clusterID獲取回去,只要一開始通信,就會先驗證clusterID。

只能格式化一次:格式化完DataNode將clusterID拿走了,如果下次再格式化clusterID就會發生變化,DataNode將無法和NameNode通信。即DataNode的VERSION中的clusterID與NameNode的VERISON中的clusterID不同。

格式化完,啓動文件系統

Start-dfs.sh 

[root@node01 dfs]# jps
2049 DataNode
1968 NameNode
2325 Jps
2183 SecondaryNameNode

[root@node01 dfs]# ll
總用量 12
drwx------. 3 root root 4096 9月  28 02:00 data
drwxr-xr-x. 3 root root 4096 9月  28 02:00 name
drwxr-xr-x. 2 root root 4096 9月  28 02:01 namesecondary

啓動成功可以通過50070端口訪問

NameNode會維護一個虛擬的根目錄樹,與我們操作系統的目錄上沒有任何關係。

hdfs dfs -mkdir -p

Hdfs文件系統用戶的家目錄的父母目錄是user,hdfs只是文件系統,沒有用戶管理模塊,由什麼用戶創建的文件就屬於這個用戶的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章