hadoop—ha搭建步骤
hadoop—ha搭建步骤
ie四叶草 发表于4个月前
hadoop—ha搭建步骤
  • 发表于 4个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   

1、hadoop高可用节点分布

  NN    DN    JN    ZK  ZKFC  RS  
node1
node2
node3
node4

2、关闭网络防火墙,时间同步,修改IP映射文件

# 关闭网络防火墙
service iptables stop
#Cenos使用:systemctl stop firewalld.service && systemctl disable firewalld.service

# 时间同步,集群中的所有时间要保持一致
sudo apt-get install ntp
ntpdate -u s1b.time.edu.cn

'#修改映射文件,hosts文件位置在:/etc/hosts

sudo vi /etc/hosts

ip1 node1
ip2 node2
ip3 node3

3、安装JDK

'#上传JDK:jdk-8u131-linux-i586.tar.gz,解压,解压命令:
tar -zxvf jdk-8u131-linux-i586.tar.gz

#配置环境变量,修改/etc/profile文件
sudo vi /etc/profile

#在文件后加入以下命令:
export JAVA_HOME=/usr/local/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

4、设置免秘钥登录

# node1需要免密钥登录到node2 、3、4,node2需要免密要登录到node1,node3,node4,
#先设置4台机器本机免秘钥登录,即ssh localhost

#生成公钥,并将公钥追加到认证文件中
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

#将node1,和node2的公钥文件复制到需要免密要登录的机器上,再将此文件追加到各自的认证文件中
#例:在node1复制公钥文件到node2,后面以此类推
scp ~/.ssh/id_dsa.pub node2:/home

''#在node2上追加node1的公钥文件到认证文件中
cat /home/id_dsa.pub >> ~/.ssh/authorized_keys

5、修改配置文件

**********************************************************************
(1)上传解压,配置环境变量
#在node1-4上上传hadoop包hadoop-2.6.1.tar.gz,在node1-3上传zookeeper-3.4.6.tar.gz然后各自机器分别解压:
tar -zxvf hadoop-2.6.1.tar.gz
tar -zxvf zookeeper-3.4.6.tar.gz

#配置hadoop与zookeeper环境变量,修改/etc/profile文件,配置zookeeper环境变量在node1-3,配置hadoop环境变量在node1-4
sudo vi /etc/profile

export HADOOP_HOME=/srv/opt/hadoop-2.6.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 
export ZOOKEEPER_HOME=/srv/opt/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin


#是配置文件生效
source /etc/profile


****************************************************************************************
(2)修改zookeeper配置文件,配置zookeeper
#以下在node1上修改配置文件
#修改zookeeper配置文件,进入zookeeper配置文件目录:zookeeper-3.4.6/conf/,
#将zoo_sample.cfg重命名为zoo.cfg,修改zoo.cfg文件
vi zoo.cfg

#配置zookeeper文件存放目录
dataDir=/opt/zookeeper

#配置zookeeper集群节点位置,node1-3,添加以下命令:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

#在刚刚配置的zookeeper文件存放目录创建myid文件,进入/opt/
mkdir zookeeper
cd zookeeper
vi myid#目前在node1上配置,myid文件中写入1,与配置文件zoo.cfg对应,node2,node3中对应要写如2,3
1


#将node1中zookeeper配置文件copy到node2,3的zookeeper配置文件目录中
scp   /srv/opt/zookeeper-3.4.6/conf/*   node2:srv/opt/zookeeper-3.4.6/conf/
scp   /srv/opt/zookeeper-3.4.6/conf/*   node3:srv/opt/zookeeper-3.4.6/conf/

#在node2,3上/opt/目录中新建zookeeper文件夹,在此文件夹中新建myid文件分别写入2,3


****************************************************************************************
(3)修改hadoop配置文件
#进入hadoop配置文件目录:hadoop-2.6.1/etc/hadoop/,修改hadoop-env.sh,更改JAVA_HOME路径
vi hadoop-env.sh

export JAVA_HOME=/srv/opt/jdk1.8.0_131

#修改hdfs-site.xml
vi  hdfs-site.xml


<configuration>
<property>
  <name>dfs.nameservices</name>
  <value>zzu</value>#指定nameservices名字
</property>
<property>
  <name>dfs.ha.namenodes.zzu</name>#与指定nameservices名字相同
  <value>nn1,nn2</value>#两台namenode的别名
</property>
<property>#指定两台namenode的rpc访问路径,注意对应nameservices名字,和各自的namenode别名
  <name>dfs.namenode.rpc-address.zzu.nn1</name>
  <value>node1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.zzu.nn2</name>
  <value>node2:8020</value>
</property>
<property>#指定两台namenode的http访问路径,注意对应nameservices名字,和各自的namenode别名
  <name>dfs.namenode.http-address.zzu.nn1</name>
  <value>node1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.node2.nn2</name>
  <value>node2:50070</value>
</property>
<property>#指定JN集群,node2--4,注意分号进行分割
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node2:8485;node3:8485;node4:8485/zzu</value>
</property>
<property>#故障迁移代理,注意对应nameservices名字
  <name>dfs.client.failover.proxy.provider.zzu</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>#指定ssh方式登录
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>#配置ssh私钥文件位置,免密要登录生成的私钥文件位置
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/zzu/.ssh/id_dsa</value>
</property>
<property>#配置edits文件存放目录,/journal/data目录是空目录,或者是不存在
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/journal/data</value>
</property>
</configuration>


#修改core-site.xml文件
vi core-site.xml

<configuration>
<property>#配置hdfs访问路径,nameservices名字,与 hdfs-site.xml文件中的nameservices对应
  <name>fs.defaultFS</name>
  <value>hdfs://zzu</value>
</property>
<property>#配置hdfs文件存放路径
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoop</value>
</property>
</configuration>


**********************************************************************
(4)启动zookeeper
#在node1-3上同时启动zookeeper
zkServer.sh  start
#查看zookeeper状态可以用下面命令,看是否启动,两台机器上显示Mode:follow,一台显示Mode:leader (启动正常)
zkServer.sh  status


**********************************************************************
(5)进入hadoop配置文件目录:hadoop-2.6.1/etc/hadoop/
#修改hdfs-site.xml
vi hdfs-site.xml

#在其中追加一下配置,启动故障自动迁移
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property>

#修改core-sit.xml,追加配置:
<property>
   <name>ha.zookeeper.quorum</name>
   <value>node1:2181,node2:2181,node3:2181</value>
</property>

#最后同步hadoop配置文件,从node1到node2-4
scp  /srv/opt/hadoop-2.6.1/etc/hadoop/   node2: /srv/opt/hadoop-2.6.1/etc/hadoop/ 
scp  /srv/opt/hadoop-2.6.1/etc/hadoop/   node3: /srv/opt/hadoop-2.6.1/etc/hadoop/ 
scp  /srv/opt/hadoop-2.6.1/etc/hadoop/   node4: /srv/opt/hadoop-2.6.1/etc/hadoop/ 


6、在node2-4上分别启动JN

#启动命令:
hadoop-daemon.sh  start   journalnode

7、格式化NN

#在其中一台namenode节点上执行,例:在node1上执行
hdfs namenode -format

#在node1上其中namenode,执行以下命令:
hadoop-daemon.sh  start  namenode

#在另一台namenode(node2)上执行以下命令,同步namenode1的格式化文件
hdfs namenode -bootstrapStandby

8、格式化zookeeper

#在其中一台namenode上执行,例:在node1上执行
hdfs zkfc -formatZK

9、启动dfs

#先停止node1的namenode
hadoop-daemon.sh  stop  namenode

#启动dfs
 start-dfs.sh

#配置完成后,如需要重启集群:
stop-dfs.sh
#在node1-3上启动zookeeper
zkServer.sh  start
#在执行:
 start-dfs.sh

###10、配置mapReduce

#先停止集群运行
stop-dfs.sh
zkServer.sh stop


**********************************************************************************
#在node1上,进入进入hadoop配置文件目录:hadoop-2.6.1/etc/hadoop/
#将mapred-site.xml.template重命名mapred-site.xml
vi mapred-site.xml

#mapReduce运行在yarn上
<configuration>
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
</configuration>


******************************************************************************
#修改yarn-site.xml文件
vi  yarn-site.xml

<configuration>
 <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
 </property>
 <property>#设置resourcemanager高可用
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>#设置resourcemanage  id
   <name>yarn.resourcemanager.cluster-id</name>
   <value>zzu2yarn</value>
 </property>
 <property>#设置两个resourcemanage 的别名
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>#设置两个resourcemanage的所在节点
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>node3</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node4</value>
 </property>
 <property>#设置resourcemanage的所在zookeeper集群节点
   <name>yarn.resourcemanager.zk-address</name>
   <value>node1:2181,node2:2181,node3:2181</value>
 </property>
</configuration>

**************************************************************************
#同步配置文件
scp  ./*.xml  node2:/srv/opt/hadoop-2.6.1/etc/hadoop/
scp  ./*.xml  node3:/srv/opt/hadoop-2.6.1/etc/hadoop/
scp  ./*.xml  node4:/srv/opt/hadoop-2.6.1/etc/hadoop/

11、启动集群

#同时在node1-3上启动zookeeper
zkServer.sh  start

#在任意一台机器上启动hadoop集群,例:在node1
start-all.sh

#在node3,4上分别启动ResourcesManager
yarn-daemon.sh start resourcemanager

# jps 查看集群后台进程
标签: Hadoop
共有 人打赏支持
粉丝 0
博文 43
码字总数 24551
×
ie四叶草
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: