作者:Grey
原文地址:
首先,一定要先完成分散式環境搭建 並驗證成功
然後在 node01 上執行stop-dfs.sh
重新規劃每個節點的職責
host | NN | JNN | DN | ZKFC | ZK |
---|---|---|---|---|---|
node01 | √ | √ | √ | ||
node02 | √ | √ | √ | √ | √ |
node03 | √ | √ | √ | ||
node04 | √ | √ |
修改node01~node04
節點上的組態檔
vi $HADOOP_HOME/etc/hadoop/core-site.xml
將<configuration></configuration>
內的設定資訊修改為:
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
然後修改node01~node04
上的如下組態檔
執行vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
將<configuration></configuration>
內的設定資訊修改為:
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/data</value>
</property>
<!-- 以下是 一對多,邏輯到物理節點的對映 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<!-- 以下是JN在哪裡啟動,資料存那個磁碟 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/jn</value>
</property>
<!-- HA角色切換的代理類和實現方法,我們用的ssh免密 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<!-- 開啟自動化: 啟動zkfc: -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
安裝 zookeeper
zookeeper 下載地址
將zookeeper
安裝包上傳到 node02,node03,node04 的/opt/bigdata
目錄下
在 node02 , node03 , node04 下執行cd /opt/bigdata
解壓tar xf zookeeper-3.4.6.tar.gz
重新命名mv zookeeper-3.4.6 zookeeper
修改 node02 ,node03 ,node04 上的 zookeeper 組態檔:
首先cd /opt/bigdata/zookeeper/conf/
執行cp zoo_sample.cfg zoo.cfg
執行vi zoo.cfg
設定如下設定項
修改如下設定dataDir=/var/bigdata/hadoop/zk
新增如下設定:
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
儲存
然後在 node02 上,執行:
mkdir /var/bigdata/hadoop/zk
echo 1 > /var/bigdata/hadoop/zk/myid
在 node03 上,執行:
mkdir /var/bigdata/hadoop/zk
echo 2 > /var/bigdata/hadoop/zk/myid
在 node04 上,執行:
mkdir /var/bigdata/hadoop/zk
echo 3 > /var/bigdata/hadoop/zk/myid
在 node02,node03,node04 下設定環境變數
執行vi /etc/profile
新增如下設定
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper
追加到 PATH 中
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
執行source /etc/profile
啟動順序:
在 node02,node03,node04 上分別啟動 zookeeper
執行zkServer.sh start
在 node01,node02,node03 上分別啟動 journalnode
執行hadoop-daemon.sh start journalnode
選擇一個 NN 做格式化,注:只有第一次搭建做,以後不用做
我們選擇 node02,在 node02 上執行hdfs namenode -format
啟動這個格式化的 NN ,以備另外一臺同步
在 node02 上執行hadoop-daemon.sh start namenode
格式化 zk, 注:只有第一次搭建做,以後不用做
在 node01 上執行hdfs zkfc -formatZK
驗證 zk 是否格式化成功,在 node04 上執行zkCli.sh
開啟 zk 使用者端
執行ls /
輸出
[zookeeper, hadoop-ha]
顯示了新建的 hadoop-ha 目錄,驗證成功
在 node01 上執行start-dfs.sh
啟動成功
測試,在 node01 上,執行如下命令,
hdfs dfs -mkdir /bigdata
hdfs dfs -mkdir -p /user/root
hdfs dfs -put hadoop-2.6.5.tar.gz /user/root
開啟瀏覽器
通過:http://node01:50070/explorer.html>
可以看到上傳的檔案
接下來,我們切換我們用 root 搭建的HDFS 用 god 這個使用者來啟動
首先,停止 hdfs
在 node01 上,執行stop-dfs.sh
在node01~node04
上都執行:
新增使用者useradd god
修改密碼passwd god
密碼可以自定義。
將資源和使用者繫結:
chown -R god /opt/bigdata/hadoop
chown -R god /var/bigdata/hadoop
將node01~node04
都切換成 god 使用者,在node01~node04
上都執行su god
使用 god 使用者執行如下命令ssh localhost
分別輸入 yes 以及 god 的密碼
在node01~node04
上
執行:
cd /home/god/.ssh
ssh-keygen -t dsa -P '' -f ./id_dsa
然後在node01~node04
上執行如下四條語句(每個節點都要執行這四條語句)
ssh-copy-id -i id_dsa node01
輸入yes,god密碼
ssh-copy-id -i id_dsa node02
輸入yes,god密碼
ssh-copy-id -i id_dsa node03
輸入yes,god密碼
ssh-copy-id -i id_dsa node04
輸入yes,god密碼
修改 node01~node04 中 hdfs-site.xml 的設定
在 node01~node04 上執行vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
將如下設定:
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
修改為:
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/god/.ssh/id_dsa</value>
</property>
完成如上設定,就可以使用 god 使用者啟動 hdfs 了
在 node01 上,使用 god 使用者執行start-dfs.sh
驗證:
在 node01 上執行:
su god
hdfs dfs -mkdir /temp
hdfs dfs -chown god:ooxx /temp
hdfs dfs -chmod 775 /temp
檢視控制檯:
http://node01:50070/explorer.html
目錄建立成功
Permission | Owner | Group | Size | Replication | Block Size | Name |
---|---|---|---|---|---|---|
drwxrwx--- | god | ooxx | 0 B | 0 | 0 B | temp |
且組 ooxx 擁有所有許可權
我們再新建一個使用者 good ,並且將 good 加入 ooxx 這個組,good 這個使用者就可以正常上傳檔案到/temp
目錄下了
在 node01 上執行:
su root
useradd good
passwd good
設定good的密碼。
然後新增組:
groupadd ooxx
將 good 這個使用者新增進入 ooxx 這個組
usermod -a -G ooxx good
然後執行:
su god
在 god 使用者下執行:
hdfs dfsadmin -refreshUserToGroupsMappings
然後切換 good 使用者
su good
cd /home/good
touch good.txt
然後執行:
vi good.txt
隨意輸入一些內容,儲存
最後執行
hdfs dfs -put good.txt /temp
更新成功。
本文來自部落格園,作者:Grey Zeng,轉載請註明原文連結:https://www.cnblogs.com/greyzeng/p/16667349.html