hadoop ha 部署
環境
主機名 | ip | os | 配置 | 硬盤 |
---|---|---|---|---|
hpmaster | 172.16.50.111 | CentOS Linux release 7.5.1804 (Core) | 2核8G | 10G |
hpmaster1 | 172.16.50.135 | CentOS Linux release 7.5.1804 (Core) | 2核8G | 10G |
hpslave1 | 172.16.50.118 | CentOS Linux release 7.5.1804 (Core) | 2核8G | 10G |
hpslave2 | 172.16.50.134 | CentOS Linux release 7.5.1804 (Core) | 2核8G | 10G |
服務器配置只是爲了測試部署方案
部署規劃
主機名 | NameNode | DataNode | Year | Zookeeper | JournalNode | zkfc |
---|---|---|---|---|---|---|
hpmaster | Y | Y | Y | Y | Y | |
hpmaster1 | Y | Y | N | Y | Y | |
hpslave1 | N | Y | Y | Y | N | |
hpslave2 | N | Y | Y | Y | N |
軟件版本
軟件名 | 版本號 |
---|---|
Zookeeper | 3.4.13 |
hadoop | 2.8.5 |
java | 1.8.0.181 |
基礎部署
-
下載zookeeper-3.4.13.tar.gz 下載地址:http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
-
下載hadoop-2.8.5.tar.gz 下載地址:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
-
配置
/etc/hosts
添加如下配置:172.16.50.111 hpmaster 172.16.50.118 hpslave1 172.16.50.134 hpslave2 172.16.50.135 hpmaster1
-
配置 hpmaster hpmaster1 免密登錄 所有服務器
命令:ssh-keygen , ssh-copy-id 步驟略
-
關閉 selinux , 防火牆
-
安裝jdk rsync
yum install java-1.8.0-openjdk rsync -y
Zookeeper 部署
操作服務器服務器[hpmaster,hpslave1,hpslave2]
解壓 zookeeper-3.4.13.tar.gz 到 /data/zookeeper
創建配置文件 /data/zookeeper/conf/zoo.cfg
, 內容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
server.1=hpmaster:2888:3888
server.2=hpslave1:2889:3889
server.3=hpslave2:2890:3890
創建數據目錄 /data/zookeeper/data
:
mkdir /data/zookeeper/data
創建標識文件data/zookeeper/data/myid
:
echo '1' > data/zookeeper/data/myid # 1 爲對應 'server.1=hpmaster:2888:3888'
啓動:
/data/zookeeper/bin/zkServer.sh start
hadoop 部署
操作所有服務器 解壓 hadoop-2.8.5.tar.gz 到 /data/hadoop
在 服務器[hpmaster] 修改配置文件:
-
/data/hadoop/etc/hadoop/core-site.xml
:<configuration> <property> <!-- hadoop數據存儲的臨時文件路徑 --> <name>hadoop.tmp.dir</name> <value>file:/data/hadoop/tmp</value> </property> <property> <!-- 指定hdfs的nameservice爲mycluster --> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <!--指定zookeeper地址--> <name>ha.zookeeper.quorum</name> <value>hpmaster:2181,hpslave1:2181,hpslave2:2181</value> </property> </configuration>
-
/data/hadoop/etc/hadoop/hdfs-site.xml
:<configuration> <property> <!-- 指定HDFS的文件副本數 --> <name>dfs.replication</name> <value>2</value> </property> <property> <!-- 與 fs.defaultFS 相同 --> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <!-- namenodes 節點地址 --> <name>dfs.ha.namenodes.mycluster</name> <value>hpmaster,hpmaster1</value> </property> <property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hpmaster:8485;hpslave1:8485;hpslave2:8485;hpmaster1:8485/mycluster</value> </property> <property> <!-- 啓用故障自動切換 --> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <!-- 自動切換方式 --> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <!-- 指定namenode節點的文件存儲目錄 --> <name>dfs.namenode.name.dir</name> <value>file:/data/hadoop/hdfs/name</value> </property> <property> <!-- 指定datanode節點的文件存儲目錄 --> <name>dfs.datanode.data.dir</name> <value>file:/data/hadoop/hdfs/data</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.hpmaster</name> <value>hpmaster:9000</value> </property> <property> <name>dfs.namenode.http-address.mycluster.hpmaster</name> <value>hpmaster:50070</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.hpmaster1</name> <value>hpmaster1:9000</value> </property> <property> <name>dfs.namenode.http-address.mycluster.hpmaster1</name> <value>hpmaster1:50070</value> </property> <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.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> </configuration>
-
/data/hadoop/etc/hadoop/mapred-site.xml
:<configuration> <property> <!--運行MapReduce作業時框架 local classic yarn --> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
/data/hadoop/etc/hadoop/mapred-site.xml
文件不存在 :cp/data/hadoop/etc/hadoop/mapred-site.xml.template
-
/data/hadoop/etc/hadoop/yarn-site.xml
:<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hpmaster</value> </property> </configuration>
-
/data/hadoop/etc/hadoop/slaves
:hpslave1 hpslave2 hpmaster hpmaster1
-
修改JAVA_HOME :
/data/hadoop/etc/hadoop/hadoop-env.sh :
# export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre
服務配置文件到服務器[hpslave1,hpslave2,hpmaster1]:
scp /data/hadoop/etc/hadoop/* root@hpslave1:/data/hadoop/etc/hadoop/
scp /data/hadoop/etc/hadoop/* root@hpslave2:/data/hadoop/etc/hadoop/
scp /data/hadoop/etc/hadoop/* root@hpmaster1:/data/hadoop/etc/hadoop/
服務器[hpslave1,hpslave2] 上刪除:/data/hadoop/etc/hadoop/slaves
文件
所有服務器配置 /etc/profile 添加內容:
PATH=$PATH:/data/hadoop/bin:/data/hadoop/sbin
創建目錄:
mkdir /data/hadoop/{hdfs,tmp}
啓動集羣:
-
服務器[hpmaster] 執行 :
# hadoop-daemons.sh start journalnode # 啓動JournalNode集羣 # hdfs zkfc -formatZK # 格式化zkfc,讓在zookeeper中生成ha節點 # hadoop namenode -format # 格式化hdfs # hadoop-daemon.sh start namenode # 啓動NameNode
-
服務器[hpmaster1] 執行:
hdfs namenode -bootstrapStandby # 同步數據 hadoop-daemon.sh start namenode # 啓動NameNode
-
服務器[hpmaster] 執行 :
hadoop-daemons.sh start datanode # 啓動datanode節點 start-yarn.sh # 啓動yarn hadoop-daemons.sh start zkfc # 啓動zkfc
檢驗集羣
hdfs 上傳文件
# hadoop fs -put /data/soft/hadoop-2.8.5.tar.gz hdfs://172.16.50.111:9000/
# hadoop fs -put /data/soft/zookeeper-3.4.13.tar.gz hdfs://172.16.50.111:9000/
查看hdfs上的文件情況
hadoop fs -ls /
Found 2 items
-rw-r--r-- 2 root supergroup 246543928 2018-10-12 11:36 /hadoop-2.8.5.tar.gz
-rw-r--r-- 2 root supergroup 37191810 2018-10-12 11:36 /zookeeper-3.4.13.tar.gz