入門Hadoop---HDFS-HA搭建

一.簡述html

上一篇瞭解了Zookeeper和HDFS的一些概念,今天就帶你們從頭至尾搭建一下,其中遇到的一些坑也順便記錄下。java

1.1 搭建的拓撲圖以下:node

1.2 部署環境:Centos3.1,java1.8.0 ,Hadoop3.2,Zookeeper3.5.5linux

Linux環境搭建我這裏就不介紹了,請自行百度(PS:須要注意的一點是,最後一步硬盤大小最好改大一些,好比60G)。web

1.3 搭建Linux的時候可能會遇到這麼幾個問題:apache

首先安裝系統的時候不要選擇精簡版,這樣會有不少軟件不全,儘可能去選擇全一些的版本,好比我選擇的Infrastucture Server,而後全勾上了,這樣雖然佔用空間大了些,可是省去了後續安裝不少組件的煩惱。bootstrap

二.正文vim

小技巧:在搭建以前先說個小技巧,咱們搭建的時候能夠先在一臺虛擬機上部署,而後經過克隆到其它機器,修改部分該修改的參數就好了,這樣就方便了環境的頻繁部署。服務器

2.1 配置環境網絡

2.1.1 設置固定ip

 1.進入到 /etc/sysconfig/network-scripts

 2.點擊Vmware上面的編輯->虛擬網絡編輯器 點開NAT設置,裏面能夠看到網關IP

 3.編輯ifcfg配置文件,修改固定ip,網關地址,DNS映射,子網掩碼等

  vim  ifcfg-eno16777736

  

TYPE=Ethernet    

#標記顯示固定ip

BOOTPROTO=static  
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no

NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes

#ip地址,這個以tuge1舉例,我設定的爲100,後面的tuge2,tuge3,tuge4能夠分別設置爲101,102,103
IPADDR=192.168.40.100

#網關地址,這個根據上面第二步能夠得到
GATEWAY=192.168.40.2
NETMASK=255.255.255.0

#DNS地址
DNS1=114.114.114.114
DNS2=8.8.8.8

4.重啓服務:service network restart 

2.1.2 配置hadoop環境

 1.打開tuge1,在/opt/  下面建立一個文件夾hadoop

   cd /opt/

   mkdir hadoop

 2.進入到hadoop,在官網找到對應的hadoop版本進行下載,而後對文件進行解壓

 cd  hadoop

 wget  http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

 tar -xvf  hadoop-3.2.0.tar.gz

2.1.3 配置java環境

 3.而後回到/opt/下面建立一個java文件

 cd /opt/

 mkdir java

 4.進入到java,經過ftp將jdk上傳到此目錄,並進行解壓

 cd java            

 tar -xvf jdk-8u221-linux-x64.tar.gz

2.1.4 配置Zookeeper環境

 1.進入到 /opt/下面建立zookeeper文件夾

 cd /opt/

 mkdir zookeeper

 2.進入到zookeeper文件夾,下載zookeeper,而後對文件進行解壓

 cd  zookeeper

 wget  http://mirror.bit.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz

 tar -xvf apache-zookeeper-3.5.5-bin.tar.gz

2.1.5 將配置寫入配置文件

打開/etc/profile 配置Hadoop和Java環境

 vim /etc/profile

 export JAVA_HOME=/opt/java/jdk1.8.0_221

 export HADOOP_HDFS_HOME=/opt/hadoop/hadoop-3.2.0

 export HADOOP_CONF_DIR=/opt/hadoop/hadoop-3.2.0/etc/hadoop

 export HADOOP_HOME=/opt/hadoop/hadoop-3.2.0

 export ZK_HOME=/opt/zookeeper/apache-zookeeper-3.5.5-bin

 PATH=$JAVA_HOME/bin:$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$ZK_HOME/bin

 CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

 export PATH  CLASSPATH

配置好後,使用source /etc/profile 從新加載配置文件。

2.1.6 驗證環境配置

java --version

hadoop version

10.將上面配置好的tuge1克隆到tuge2,tuge3,tuge4,並修改對應的ip爲101,102,103

有關Linux克隆自行百度

2.1.7 修改主機別名

vim /etc/hosts  修改成 127.0.0.1   localhost tuge1 localhost4 localhost4.localdomain4

vim /etc/hostname 修改成tuge1

vim /etc/sysconfig/network 修改成 

NETWORKING=yes
HOSTNAME=tuge1

PS:其它服務器照着配置便可

2.1.8 修改host文件添加映射別名

 vim /etc/hosts 添加

192.168.40.100 tuge1

192.168.40.101 tuge2

192.168.40.102 tuge3

192.168.40.103 tuge4

 

2.2 搭建HDFS-Zookeeper

 上面配置好環境後,接下來就是搭建HDFS了。這個能夠參照官網一步一步來:

  2.2.1 安裝SSH

  yum install openssh-server

  2.2.2 配置免密登錄

 cd /.ssh

ssh-keygen -t rsa

ssh-copy-id  localhost

(以上配置四臺都執行,而後都能免密訪問了)

在tuge1和tuge2服務器之間也設置互相免密,這樣方便之後使用journalnode同步

另外把tuge1的密鑰分發到tuge2,tuge3,tuge4上面,方便tuge1對全部機器的控制

 2.2.3 配置namenode節點爲tuge1,tuge2,並設置遇到故障自動切換

 編輯hadoop配置文件:

cd /opt/hadoop/hadoop-3.2.0/etc/hadoop

vim hdfs-site.xml

---------------------------------------------

<configuration>
<property>
<!-- DataNode副本數,僞分佈模式配置爲1 -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<!-- 啓用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<!--指定hdfs的nameservice爲mycluster,須要和core-site.xml中的保持一致
dfs.ha.namenodes.[nameservice id]爲在nameservice中的每個NameNode設置惟一標示符。
配置一個逗號分隔的NameNode ID列表。這將是被DataNode識別爲全部的NameNode。
例如,若是使用"node1"做爲nameservice ID,而且使用"nn1"和"nn2"做爲NameNodes標示符
-->

<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>

<!-- tuge1下面有一個NameNode,tuge2下面有一個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>

<!-- nn1的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>tuge1:9000</value>
</property>

<!-- nn1的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>tuge1:50070</value>
</property>

<!-- nn2的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>tuge2:9000</value>
</property>

<!-- nn2的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>tuge2:50070</value>
</property>

<!-- 指定NameNode的edits元數據的共享存儲位置。也就是JournalNode列表
該url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId推薦使用nameservice,默認端口號是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://tuge2:8485;tuge3:8485;tuge4:8485/mycluster</value>
</property>

<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/hadoop-3.2.0/ha/jn</value>
</property>

<!-- 開啓NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<!-- 肯定處於Active的Node -->
<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>
<!-- 使用sshfence隔離機制時須要ssh免登錄 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id__dsa</value>
</property>
</configuration>

---------------------------------------------

cd /opt/hadoop

vim core.site.xml

 -----------------------------------------

<configuration>
<property>
<!-- 元數據文件存放位置,真正使用的時候會被加載到內容中 -->
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop-3.2.0/ha</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>tuge1:2181,tuge2:2181,tuge3:2181,tuge4:2181</value>
</property>
</configuration>

------------------------------------------

PS:不要忘了,在一臺機器上配置便可,而後分發到其它機器就好了

2.2.4 指定DataNode在tuge3和tuge4上

 cd /opt/hadoop/hadoop-3.2.0/etc/hadoop

 在workers文件裏面指定DataNode

 vim workers

------------------------

 tuge3

 tuge4

--------------------------

PS:弄完了分發到其它機器便可 

2.2.5 指定zookeeper在tuge1,tuge2,tuge3和tuge4上

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/conf

將zoo_sample.cfg複製一份重命名爲zoo.cfg 

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

-------------------------------------

dataDir=/opt/zookeeper/apache-zookeeper-3.5.5-bin/zkData

server.1=tuge1:2888:3888
server.2=tuge2:2888:3888
server.3=tuge3:2888:3888
server.4=tuge4:2888:3888

------------------------------------

PS:弄完了,進行分發

2.2.6 建立myid文件,指定每臺機器的zookeeper ID

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/

mkdir zkData --其它服務器也相應建立下

touch myid

vim myid  --若是是tuge1就寫1,tuge2就寫2

---------------------------

1  

---------------

PS:分發myid到其它機器,並修改數字

 2.2.7 格式化NameNode

在格式化之間,要先開啓journalnode

hdfs --daemon start journalnode

而且要關閉防火牆

查看防火牆狀態: systemctl status firewalld.service

執行關閉命令: systemctl stop firewalld.service

再次執行查看防火牆命令:systemctl status firewalld.service

執行開機禁用防火牆自啓命令  : systemctl disable firewalld.service

作完以上步驟後在如下文件添加點內容:

在start-dfs.sh和stop-dfs.sh文件裏面添加

---------------------------------------------

HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root

在$HADOOP_HOME/etc/hadoop/hadoop-env.sh下面添加
export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export JAVA_HOME=/opt/java/jdk1.8.0_221

-----------------------------------------------

添加完後分發。

而後選擇任意一臺NameNode開始格式化

hdfs namenode -format

格式化完成後,在另外一臺同步元數據

hdfs namenode -bootstrapStandby

2.2.8 格式化Zookeeper

首先啓動Zookeeper (下面兩個命令tuge1,tuge2,tuge3,tuge4都執行一遍)

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/bin

./zkServer.sh start

查看Zookeeper啓動狀態

./zkServer.sh status

使用jps查看全部java進程

開始格式化

hdfs zkfc -formatZK

好了,通過無數採坑,按照上面步驟終於搭建完了,最終貼下效果圖:

運行命令:

cd /opt/hadoop/hadoop-3.2.0/sbin

./start-dfs.sh

 

瀏覽效果:

 

 

 

系列傳送門

學習官網: http://hadoop.apache.org/ 

相關文章
相關標籤/搜索