集群规划

主机名ip安装的软件进程
hadoop01192.168.1.101jdk、hadoopNN、DFSZKFailoverController
hadoop02192.168.1.102jdk、hadoopNN、DFSZKFailoverController
hadoop03192.168.1.103jdk、hadoopRM
hadoop04192.168.1.104jdk、hadoop、zookeeperDN、NM、journalnode
hadoop05192.168.1.105jdk、hadoop、zookeeperDN、NM、journalnode
hadoop06192.168.1.106jdk、hadoop、zookeeperDN、NM、journalnode

六台主机

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

用户名:Hadoop 
密码:12345678

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

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

vi /etc/hosts11

加入如下文件:

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 hadoop06123456123456

这里写图片描述

拷贝/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/1234512345

开放常用端口(root用户)

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

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

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

创建组和用户

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

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

将hadoop用户加到sodu列表

1、查看/etc/sudoers的权限

ls -l /etc/sudoers11

这里写图片描述

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

2、修改权限

chmod 777 /etc/sudoers11

这里写图片描述

3、将hadoop添加root权限

vim /etc/sudoers11

这里写图片描述

在root下加入下面hadoop用户

4、还原权限

chmod 440 /etc/sudoers11

拷贝/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/1234512345

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

切换hadoop用户

su hadoop11

进入到当前用户的根目录

cd ~ 11

查看所有文件

ls –la11

进入.ssh目录

cd .ssh11

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

ssh-keygen -t rsa11

执行完这个命令后,会生成两个文件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.106123456123456

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

这里写图片描述

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

准备软件

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

cd /home/hadoopmkdir cloudmkdir soft-install123123

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

这里写图片描述

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

安装jdk

解压

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

配置环境变量

# 修改配置文件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/profile1234567891012345678910

将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/1234512345

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

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/1234512345

刷新环境变量

source /etc/profile11

安装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/11

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

mv zoo_sample.cfg zoo.cfgvi zoo.cfg1212

配置如下:

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

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

mkdir data11

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

vim myid11

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/123123

启动Zookeeper

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

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

查看zookeeper的状态

./zkServer.sh status11

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

这里写图片描述

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

安装hadoop

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

解压

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

配置环境变量

# 修改配置文件sudo vi /etc/profile# 在最后下添加export HADOOP_HOME=/home/hadoop/cloud/hadoop-2.7.2export PATH=$PATH:$HADOOP_HOME/bin# 刷新配置文件source /etc/profile123456789123456789

测试:

which hadoop11

这里写图片描述

修改配置文件(6个)

hadoop-env.sh

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

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>123456789101112131415161718192021123456789101112131415161718192021

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>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818212345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

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>1234567812345678

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>1234567891011121312345678910111213

slaves

hadoop04
hadoop05
hadoop06123123

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

mkdir tmp11

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

将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/1234512345

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

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/1234512345

刷新环境变量

source /etc/profile11

启动

启动的时候注意启动顺序

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

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

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

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

./bin/hdfs namenode –format11

并把/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/11

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

./bin/hdfs zkfc –formatZK11

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

./sbin/hadoop-daemon.sh start zkfc11

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

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

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

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

查看结果

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

jps11

这里写图片描述

这里写图片描述

通过浏览器测试如下:

http://192.168.2.101:50070/11

这里写图片描述

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

查看YARN的状态

http://192.168.2.103:8088/11

这里写图片描述