Hadoop2.7.2之集群搭建(高可用)

原文地址:http://blog.csdn.net/uq_jin/article/details/51487439

如果你还没有虚拟机,请参考:http://blog.csdn.net/uq_jin/article/details/51355124
如果你还没有试过单机模式,请参考:http://blog.csdn.net/uq_jin/article/details/51451995
如果你还没有试过集群模式,请参考:http://blog.csdn.net/uq_jin/article/details/51513307

集群规划

主机名 ip 安装的软件 进程
hadoop01 192.168.1.101 jdk、hadoop NN、DFSZKFailoverController
hadoop02 192.168.1.102 jdk、hadoop NN、DFSZKFailoverController
hadoop03 192.168.1.103 jdk、hadoop RM
hadoop04 192.168.1.104 jdk、hadoop、zookeeper DN、NM、journalnode
hadoop05 192.168.1.105 jdk、hadoop、zookeeper DN、NM、journalnode
hadoop06 192.168.1.106 jdk、hadoop、zookeeper DN、NM、journalnode

六台主机

主机名:
hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06
如果不会请参考:http://blog.csdn.net/uq_jin/article/details/51355124

用户名:hadoop
密码:12345678

设置主机名映射(root用户)

将本机的主机名和IP建立映射关系

vi /etc/hosts

加入如下文件:

192.168.2.101 hadoop01
192.168.2.102 hadoop02
192.168.2.103 hadoop03
192.168.2.104 hadoop04
192.168.2.105 hadoop05
192.168.2.106 hadoop06

拷贝/etc/hosts到其它主机

scp /etc/hosts hadoop02:/etc/
scp /etc/hosts hadoop03:/etc/
scp /etc/hosts hadoop04:/etc/
scp /etc/hosts hadoop05:/etc/
scp /etc/hosts hadoop06:/etc/

开放常用端口(root用户)

#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service

创建专有的用户(root用户)

一般是建专有的hadoop用户,不在root用户上面搭建

创建组和用户

这里每台虚拟主机都应该有hadoop用户

#先创建组cloud
groupadd cloud
#创建用户并加入组cloud
useradd -g cloud hadoop
#修改用户hadoop的密码
passwd hadoop

将hadoop用户加到sodu列表

1、查看/etc/sudoers的权限

ls -l /etc/sudoers

可以看的是只读权限,如果我们要修改就必须先改变该文件的权限

2、修改权限

chmod 777 /etc/sudoers

这里写图片描述

3、将hadoop添加root权限

vim /etc/sudoers

在root下加入下面hadoop用户

4、还原权限

chmod 440 /etc/sudoers

拷贝/etc/sudoers到其它主机

scp /etc/sudoers hadoop02:/etc/
scp /etc/sudoers hadoop03:/etc/
scp /etc/sudoers hadoop04:/etc/
scp /etc/sudoers hadoop05:/etc/
scp /etc/sudoers hadoop06:/etc/

配置免密码登录(hadoop用户)

切换hadoop用户

su hadoop

进入到当前用户的根目录

cd ~ 

查看所有文件

ls –la

进入.ssh目录

cd .ssh

生产公钥和私钥(四个回车)

ssh-keygen -t rsa

执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

这里写图片描述

将公钥拷贝到要免登陆的机器上

ssh-copy-id 192.168.2.101
ssh-copy-id 192.168.2.102
ssh-copy-id 192.168.2.103
ssh-copy-id 192.168.2.104
ssh-copy-id 192.168.2.105
ssh-copy-id 192.168.2.106

这时会在192.168.2.102主机的.ssh/下产生一个名为authorized_keys的文件,这时通过 ssh 192.168.2.102时可以直接免登陆进入主机
如下:

Hadoop2.7.2之集群搭建(高可用)_第1张图片

同理可以给其他机器也设置免密码登录。

准备软件

在/home/hadoop/下创建cloud文件夹,用来安装相关软件,同时所用安装包放在cloud下的soft-install文件夹下,如:

cd /home/hadoop
mkdir cloud
mkdir soft-install

在soft-install里上传我们需要的软件:

上传我们所需要的软件到这个目录

安装jdk

解压

tar -zxvf jdk-8u91-linux-x64.tar.gz -C /home/hadoop/cloud/

配置环境变量

# 修改配置文件
sudo vi /etc/profile
# 在最后下添加

export JAVA_HOME=/home/hadoop/cloud/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 刷新配置文件
source /etc/profile

将jdk和环境变量分别拷贝到其他主机上

可以直接将cloud文件夹复制过去

scp -r cloud/ hadoop02:/home/hadoop/
scp -r cloud/ hadoop03:/home/hadoop/
scp -r cloud/ hadoop04:/home/hadoop/
scp -r cloud/ hadoop05:/home/hadoop/
scp -r cloud/ hadoop06:/home/hadoop/

将环境变量拷贝到其他主机下

sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/
sudo scp /etc/profile hadoop04:/etc/
sudo scp /etc/profile hadoop05:/etc/
sudo scp /etc/profile hadoop06:/etc/

刷新环境变量

source /etc/profile

安装zookeeper

如果不懂Zookeeper请参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/

下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/

安装

前面我们已经安装的jdk,现在我们在hadoop04、hadoop05、hadoop06上安装Zookeeper

1、解压

tar -zxvf zookeeper-3.4.8.tar.gz -C /home/hadoop/cloud/

2、修改Zookeeper的默认配置 conf/zoo_sample.cfg

mv zoo_sample.cfg zoo.cfg
vi zoo.cfg

配置如下:

#修改dataDir指向我们数据
dataDir=/home/hadoop/cloud/zookeeper-3.4.8/data
#并在最后添加
server.1=hadoop04:2888:3888
server.2=hadoop05:2888:3888
server.3=hadoop06:2888:3888

3、在/home/hadoop/cloud/zookeeper-3.4.8/目录下创建data文件夹

mkdir data

4、在data文件夹下创建myid文件指明本机id

vim myid

id 分别对应为hadoop04为1,hadoop05为2,hadoop06为3 后面我们再统一拷贝

5、复制zookeeper-3.4.8到105、106机器上并修改相应的myid

scp -r zookeeper-3.4.8/ hadoop04:/home/hadoop/cloud/
scp -r zookeeper-3.4.8/ hadoop05:/home/hadoop/cloud/
scp -r zookeeper-3.4.8/ hadoop06:/home/hadoop/cloud/

启动Zookeeper

分别在hadoop04、hadoop05、hadoop06上启动Zookeeper

#执行/home/hadoop/cloud/zookeeper-3.4.8/bin目录下的脚本启动
./zkServer.sh start

查看zookeeper的状态

./zkServer.sh status

在bin/目录下运行,运行结果如下说明成功(此时至少运行2台)

其实我们可以找到leader 然后stop,会发现Zookeeper会立即切换Leader

安装hadoop

安装(现在hadoop01安装,然后复制其他机器)

解压

tar -zxvf hadoop-2.7.2.tar.gz -C /home/hadoop/cloud/

配置环境变量

# 修改配置文件
sudo vi /etc/profile
# 在最后下添加

export HADOOP_HOME=/home/hadoop/cloud/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin

# 刷新配置文件
source /etc/profile

测试:

which hadoop

这里写图片描述

修改配置文件(6个)

hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=/home/hadoop/cloud/jdk1.8.0_91

core-site.xml

<configuration>

    <!-- 指定hadoop运行时产生文件的存储路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/cloud/hadoop-2.7.2/tmp</value>
    </property>

    <!-- 指定hdfs的nameservice为ns1 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>

    <!-- 指定zookeeper地址,多个用,分割 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value>
    </property>

</configuration>

hdfs-site.xml

<configuration>
    <!-- dfs.nameservices 命名空间的逻辑名称,多个用,分割 -->
    <property>
      <name>dfs.nameservices</name>
      <value>ns1</value>
    </property>

    <!-- 指定ns1下有两个namenode,分别是nn1,nn2 -->
    <property>
      <name>dfs.ha.namenodes.ns1</name>
      <value>nn1,nn2</value>
    </property>

    <!-- 指定nn1的RPC通信地址 -->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn1</name>
      <value>hadoop01:8020</value>
    </property>

    <!-- 指定nn1的HTTP通信地址 -->
    <property>
      <name>dfs.namenode.http-address.ns1.nn1</name>
      <value>hadoop01:50070</value>
    </property>

    <!-- 指定nn2的RPC通信地址 -->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn2</name>
      <value>hadoop02:8020</value>
    </property>

    <!-- 指定nn2的HTTP通信地址 -->
    <property>
      <name>dfs.namenode.http-address.ns1.nn2</name>
      <value>hadoop02:50070</value>
    </property>

    <!-- 指定namenode的元数据存放的Journal Node的地址,必须基数,至少三个 -->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1</value>
    </property>

    <!--这是JournalNode进程保持逻辑状态的路径。这是在linux服务器文件的绝对路径-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/home/hadoop/cloud/hadoop-2.7.2/journal/</value>
    </property>

    <!-- 开启namenode失败后自动切换 -->
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>

    <!-- 配置失败自动切换实现方式 -->
    <property>
      <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!-- 配置隔离机制方法,多个机制用换行分割 -->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>
        sshfence
        shell(/bin/true)
      </value>
    </property>

    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>

    <!-- 配置sshfence隔离机制超时时间30秒 -->
    <property>
       <name>dfs.ha.fencing.ssh.connect-timeout</name>
       <value>30000</value>
    </property>
</configuration>

mapred-site.xml.template
需要重命名: mv mapred-site.xml.template mapred-site.xml

<configuration>
    <!-- 通知框架MR使用YARN -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
    <!-- 指定YARN的老大(RM)的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop03</value>
    </property>

    <!-- reducer取数据的方式是mapreduce_shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

slaves

hadoop04
hadoop05
hadoop06

并在 hadoop-2.7.2文件下 创建tmp文件:

mkdir tmp

将配置好的文件拷贝到其他主机

将hadoop-2.5.2拷贝到其他主机下

scp -r hadoop-2.7.2 hadoop02:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop03:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop04:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop05:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop06:/home/hadoop/cloud/

将环境变量拷贝到其他主机下

sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/
sudo scp /etc/profile hadoop04:/etc/
sudo scp /etc/profile hadoop05:/etc/
sudo scp /etc/profile hadoop06:/etc/

刷新环境变量

source /etc/profile

启动

启动的时候注意启动顺序

1、启动zookeeper(在hadoop04、05、06 )

2、启动journal node(在hadoop04、05、06)

#hadoop-2.7.2/sbin下
./sbin/hadoop-daemon.sh start journalnode

3、格式化HDFS(namenode)第一次要格式化(在hadoop01、02)(这里直接复杂会有问题,最好手动输入)

./bin/hdfs namenode –format

4、格式化 zk(在hadoop01即可)(这里直接复杂会有问题,最好手动输入)

./bin/hdfs zkfc –formatZK

5、启动zkfc来监控NN状态(在hadoop01、02)

./sbin/hadoop-daemon.sh start zkfc

6、启动HDFS(namenode)(在hadoop01即可)

#hadoop-2.7.2/sbin下
./sbin/start-dfs.sh

7、启动YARN(MR)(在hadoop03即可)

#hadoop-2.7.2/sbin下
./sbin/start-yarn.sh

查看结果

如果上面的启动没有报错的的话,这时在我们的虚拟主机上应该分别有自己的进程,如前文我们规划的一样。
查看本机的java进程

jps

这里写图片描述

Hadoop2.7.2之集群搭建(高可用)_第2张图片

通过浏览器测试如下:

http://192.168.2.101:50070/

Hadoop2.7.2之集群搭建(高可用)_第3张图片

可以看出hadoop01的namenode是处于一种standby状态,那么hadoop02应该是处于active状态

查看YARN的状态

http://192.168.2.103:8088/

你可能感兴趣的:(hadoop,集群,高可用)