二次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只是文件系統,沒有用戶管理模塊,由什麼用戶創建的文件就屬於這個用戶的。