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

来源:互联网 发布:产品外观设计软件 编辑:程序博客网 时间:2024/05/23 15:32

原文地址: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 hadoop01192.168.2.102 hadoop02192.168.2.103 hadoop03192.168.2.104 hadoop04192.168.2.105 hadoop05192.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用户

#先创建组cloudgroupadd cloud#创建用户并加入组clouduseradd -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.101ssh-copy-id 192.168.2.102ssh-copy-id 192.168.2.103ssh-copy-id 192.168.2.104ssh-copy-id 192.168.2.105ssh-copy-id 192.168.2.106

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

这里写图片描述

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

准备软件

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

cd /home/hadoopmkdir cloudmkdir 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_91export PATH=$JAVA_HOME/bin:$PATHexport 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.cfgvi zoo.cfg

配置如下:

#修改dataDir指向我们数据dataDir=/home/hadoop/cloud/zookeeper-3.4.8/data#并在最后添加server.1=hadoop04:2888:3888server.2=hadoop05:2888:3888server.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.2export 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

hadoop04hadoop05hadoop06

并在 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

并把/home/hadoop/cloud/hadoop-2.7.2/tmp 文件夹拷贝到另一台namenode的目录下

scp -r /home/hadoop/cloud/hadoop-2.7.2/tmp hadoop@hadoop02:/home/hadoop/cloud/hadoop-2.7.2/

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

这里写图片描述

这里写图片描述

通过浏览器测试如下:

http://192.168.2.101:50070/

这里写图片描述

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

查看YARN的状态

http://192.168.2.103:8088/

这里写图片描述

0 0