HadoopHA集群搭建手册 - 图文

更新时间:2023-10-24 12:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Hadoop +HA高可靠集群+Hbase+Zookeeper 环境搭建手册

什么是HA见附件。

集群环境:

Ubuntu15.04 64位操作系统,通过VMWARE虚拟3个节点: master1:192.168.8.101 master2:192.168.8.102 slave1:192.168.8.201

由于只有3个节点,所以master1,master2为nodedate,master2为standby zookeeper,datanode,hbase三个节点都部署 机器名 ip地址 安装软件 运行的进程 master1 192.168.8.101 jdk,hadoop, NameNode,DataNode, hbase,zookeeper hbase Hmaster, hbase HRegionServer QuorumPeerMain,zkfc JournalNode, ResourceManager master2 192.168.8.102 jdk,hadoop, NameNode,DataNode, hbase,zookeeper hbase HRegionServer QuorumPeerMain,zkfc JournalNode, NodeManager slave1 192.168.8.201 jdk,hadoop, DataNode,HRegionSever, hbase,zookeeper QuorumPeerMain, JournalNode, NodeManager 其中zkfc进程是DFSZKFailoverController Jdk1.7.0_79 64位,Hadoop2.6.0,HBase1.0.2,Zookeeper3.4.6 此时我们以master1节点为例,其他节点操作一致

准备工作(可选)

增加一个名为 hadoop 的用户,密码可设置为 hadoop (密码随意指定)。 首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户 : $ sudo useradd -m hadoop -s /bin/bash

创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为shell。

接着使用如下命令修改密码,按提示输入两次密码 hadoop : $ sudo passwd hadoop

可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:

$ sudo adduser hadoop sudo

最后注销当前用户(点击屏幕右上角的齿轮,选择注销),在登陆界面使用刚创建的 hadoop 用户进行登陆。

安装SSH server、配置SSH无密码登陆

集群需要用到SSH登陆(类似于远程登陆,你可以登录某台Linux电脑,并且在上面运行命令)

$ sudo apt-get install ssh 安装后,可以使用如下命令登陆本机: $ ssh localhost

此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。

但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。

首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

$ exit # 退出刚才的 ssh localhost

$ cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost

$ ssh-keygen -t rsa # 会有提示,都按回车就可以 $ cat id_rsa.pub >> authorized_keys # 加入授权

就在.ssh文件夹下生成了2个文件,一个公钥和一个私钥文件, id_rsa id_rsa.pub 这样配置之后就可以实现无密码登录本机。如果需要登录到远程主机,只需要将 authorized_keys文件发送到远程主机的~/.ssh/目录下。

此时再用 ssh localhost 命令,无需输入密码就可以直接登陆了。 如果出现Agent admitted failure to sign using the key

解決方式 使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改 id_rsa) $ ssh-add ~/.ssh/id_rsa 再通过ssh 主机名 就可以实现无密码登录了

1安装jdk

$ sudo mkdir /usr/lib/jvm #创建jdk存放目录

$ sudo tar -zxvf jdk-7u79-linux-x64.tar.gz -C /usr/lib/jvm 添加环境变量

$ sudo gedit ~/.bashrc 在最后添加

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79 export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$PATH 然后在终端

$ source ~/.bashrc # 使变量设置生效 $ echo $JAVA_HOME # 检验是否设置正确 $ echo $PATH

$ java -version #输出如下表示成功

centos在/etc/profile中修改

2.修改/etc/hosts文件

添加集群所有机器,每个节点都如此操作。 192.168.8.101 192.168.8.102 192.168.8.201

master1 master2 slave1

$ sudo vim /etc/hosts

如果之后没有问题不用注释127.0.0.1 localhost 修改本机的hostname

$ sudo vim /etc/hostname 将原来的hostname改成master1即可 重启机器

cenos 修改 hostname:

cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=master1

ip:

cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=\

BOOTPROTO=\

HWADDR=\IPV6INIT=\

NM_CONTROLLED=\ONBOOT=\TYPE=\

UUID=\IPADDR=\NETMASK=\GATEWAY=\

配置HADOOP HBASE ZOOKEEPER

所有文件都放在/usr/local/hadoop下,所有黄色标注的地方建议手动新建相应文件夹

3. 解压hadoop并修改环境变量

$ sudo mkdir /usr/local/hadoop # 存放hadoop,hbase,zookeeper #更改目录所有者权限,以防以后没用户权限 $ sudo chown -R hadoop hadoop

$ sudo tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/hadoop $ sudo vim ~/.bashrc #更改环境变量 在最后添加

export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

$ source ~/.bashrc #使环境变量修改生效

4.修改配置文件

4.1 修改$HADOOP_HOME/etc/hadoop/slaves文件

加入所有slave节点hostname ,这里所有节点都是slave节点,如果机器多可以把Namenode节点分开

添加如下图

4.2 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件

修改JAVA_HOME路径 , 写全路径

4.3 修改$HADOOP_HOME/etc/hadoop/yarn-env.sh文件

4.4 修改$HADOOPHOME/etc/hadoop/core-site.xml

文件详见附件8.5修改

HADOOP_HOME/etc/hadoop/core-site.xml文件 ,红色为需要修改的地方,黄色为需要新建的文件夹

fs.defaultFS hdfs://cluster

hadoop.tmp.dir

/usr/local/hadoop/hadoop-2.6.0/tmp/

ha.zookeeper.quorum

master1:2181,master2:2181,slave1:2181

io.file.buffer.size 131072

dfs.ha.fencing.methods sshfence

yarn.nodemanager.log-dirs

/usr/local/hadoop/hadoop-2.6.0/mydata/yarn/log

yarn.resourcemanager.zk-state-store.address master1:2181,master2:2181,slave1:2181

yarn.resourcemanager.zk-address

master1:2181,master2:2181,slave1:2181

yarn.resourcemanager.store.class

org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

yarn.resourcemanager.cluster-id cluster

yarn.resourcemanager.recovery.enabled true

yarn.resourcemanager.scheduler.class

org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

yarn.scheduler.fair.allocation.file

/usr/local/hadoop/hadoop-2.6.0/etc/hadoop/fairscheduler.xml

新建黄色中的目录并修改权限

(yarn.resourcemanager.ha.id的属性值在master2机器中需要更改为rm2)

4.8 添加$HADOOP_HOME/etc/hadoop/fairscheduler.xml文件

1024 mb, 1 vcores 1536 mb, 1 vcores 5

300

1.0

root,yarn,search,hdfs

1024 mb, 1 vcores 1536 mb, 1 vcores

1024 mb, 1 vcores 1536 mb, 1 vcores

此时Hadoop+HA配置文件已经配好,就差ssh免密码登录+格式化Hadoop系统。等装完所有软件(Zookeeper+hbase),克隆机器后再进行ssh免密码登录及Hadoop格式化。 克隆后还需要更改每个节点的/etc/network中的hostname, 以及更改master2中$HADOOP_HOME/etc/hadoop/yarn- site.xml文件 的yarn.resourcemanager.ha.id属性值为rm2

5. 安装Zookeeper3.4.6

5.1.解压Zookeeper

$ sudo tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/hadoop 5.2 Zookeeper环境变量的配置 $ sudo gedit ~/.bashrc

在最后添加Zookeeper的路径

export ZOOKEEPER_HOME=/usr/local/hadoop/zookeeper-3.4.6 export PATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$PATH $ source ~/.bashrc #使修改生效 5.3.更改配置文件

将conf/zoo_sample.cfg改成conf/zoo.cfg ,然后对zoo.cfg进行更改

5.4.在DataDir路径下创建myid文件

根据配置文件的dataLogDir路径

创建/usr/local/hadoop/zookeeper-3.4.6/var/datalog文件夹 创建/usr/local/hadoop/zookeeper-3.4.6/var/data文件夹 $ sudo mkdir var

再创建/soft/zookeeper-3.4.6/var/data文件夹

$ sudo mkdir var/data

再创建/soft/zookeeper-3.4.6/var/data/myid文件 $ sudo vim var/data/myid $ sudo mkdir var/datalog

向其中输入数字1 (对应zoo.cfg文件server后的数字)

其他节点在克隆后应根据zoo.cfg中对应的值进行更改

最后修改一下conf下的log4j.properties中log的dir地址

6. 安装Hbase1.0.2

6.1 修改本机配置(可以不配)

$ sudo vim /etc/security/limits.conf

$ sudo vim /etc/pam.d/login

如果有不用加

6.2 修改配置文件 $ sudo gedit ~/.bashrc 添加

export HBASE_HOME=/usr/local/hadoop/hbase-1.0.2 export PATH=$HBASE_HOME/bin:$PATH $ source ~/.bashrc

在hbase目录下的conf下修改hbase-env.sh

6.3 修改conf/hbase-site.xml

(注意hbase.rootdir的值 用ip地址表示)

hbase.rootdir

hdfs://192.168.8.101:8020/hbase

hbase.tmp.dir

file:/usr/local/hadoop/hbase-1.0.2/tmp

hbase.cluster.distributed true

hbase.zookeeper.quorum

192.168.8.101,master2,slave1

hbase.zookeeper.property.clientPort 2181

hbase.zookeeper.property.dataDir

/usr/local/hadoop/zookeeper-3.4.6/var/data

8.8.启动所有datanode

在master1上执行命令

$ hadoop-daemons.sh start datanode

执行后在datanode节点上显示的进程datanode

8.9.启动yarn

在master1上执行命令 $ start-yarn.sh

在master1上多出ResourceManager和NodeManager进程

在master2 slave1 上多出NodeManager进程

8.10.启动ZKFC

在master1和master2上启动zkfc $ hadoop-daemon.sh start zkfc 会启动进程DFSZKFailoverController

8.11.Hadoop启动成功

下图是两个启动后的master节点 ,master1是active,master2是standby

8.12.启动hbase 在master1上执行命令 $ start-hbase.sh

master1会启动hmaster和hregionserver进程,master2和slave1启动hregionserver进程

hbase 下要建 logs 目录 并且修改权限

9 第n次启动

9.1.对于HA,要先启动Zookeeper

zkServer.sh start (每个节点)

9.2.启动hadoop

start-dfs.sh start-yarn.sh (master1节点) 或者start-all.sh

9.3.启动hbase

start-hbase.sh (master1节点)

后续待解决问题

问题一:对于HA框架,hbase-site.xml如何根据当前active的master来配置? 问题二:服务全部停止后重启,hbase显示无法启动。不知为何。我只能全部清空格式化hadoop。 步骤:

1.删除hadoop/mydata下的所有文件夹 再新建yarn文件夹 2.删除hadoop/log文件夹下的所有文件

3.删除zookeeper/var/data下的除了myid的所有文件 4.删除Zookeeper/var/datalog下的所有文件夹 5.删除hbase下的file:文件

6.删除hbase下的logs下的所有文件 7.重新格式化hadoop

附件:

什么是HA?

hadoop2.0之前,namenode只有一个,存在单点问题(虽然hadoop1.0有

secondarynamenode,checkpointnode,buckcupnode这些,但是单点问题依然存在),在hadoop2.0引入了HA机制。hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby。两者的状态是可以切换的,但不能同时两个都是active状态,最多只有1个是active状态。只有active namenode提供对外的服务,standby namenode是不对外服务的。active namenode和standby namenode之间通过NFS或者JN(journalnode,QJM方式)来同步数据。这样,保持了active namenode和standby namenode的数据的实时同步,standby namenode可以随时切换成active namenode(譬如active namenode挂了)。而且还有一个原来hadoop1.0的

secondarynamenode,checkpointnode,buckcupnode的功能:合并edits文件和fsimage文件,使fsimage文件一直保持更新。所以启动了hadoop2.0的HA机制之后,secondarynamenode,checkpointnode,buckcupnode这些都不需要了。

一定要关闭防火墙 centos 关闭防火墙

#查看防火墙状态

sudo service iptables status #关闭防火墙

sudo service iptables stop #查看防火墙开机启动状态 #关闭防火墙开机启动 sudo chkconfig iptables off

sudo chkconfig iptables --list

8.1.启动Zookeeper

分别在每个机器上运行命令zkServer.sh start或者在$ZOOKEEPER_HOME/bin目录下运行./zkServer.sh start命令。

然后可以

通过命令jps来查看Zookeeper启动的进程QuorumPeerMain。

可通过zkServer.sh status命令来查看Zookeeper状态。正常是机器中只有一个leader,其他的都是follow 。所有的机器都start以后再执行此命令

必须全部start以后查看状态。如果查看status出现错误查看日志文件。

8.2.格式化ZooKeeper集群

目的是在ZooKeeper集群上建立HA的相应节点。 在master1机器上执行命令 $ hdfs zkfc -formatZK

他会根据$HADOOP_HOME/etc/hadoop/core-site.xml文件中ha.zookeeper.quorum的值来进行初始化。

8.3.启动journalnode进程 在master1节点上执行

$ hadoop-daemons.sh start journalnode

hadoop目录下可能没有logs,需要新建logs并更改用户所有权限 $ sudo mkdir logs 然后更改目录所有者权限 $ sudo chown -R hadoop logs

查看错误日志 有可能 hadoop目录下的mydata下的journal目录没有权限写入,同样对journal目录执行上面命令

或者在每台机器上执行

$ hadoop-daemon.sh start journalnode

8.4.格式化namenode

在master1上执行命令 $ hdfs namenode -format

会在mydata文件下创建一些文件夹及文件(name或者data以及journal) 如果/etc/hosts里有localhost 127.0.0.1 可能会失败,我是没有

8.5.启动namenode

在master1上执行命令

$ hadoop-daemon.sh start namenode 在master1上多出进程NameNode

8.6.将刚才格式化的namenode信息同步到备用namenode上 在master2机器上执行命令

$ hdfs namenode -bootstrapStandby

8.7.在master2上启动namenode

$ hadoop-daemon.sh start namenode 在master2上多出进程NameNode

在地址栏输入http://master1:50070和http://master2:50070显示如下,两个此时都是standby状态

本文来源:https://www.bwwdw.com/article/qoc2.html

Top