高可用

原文地址: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安装的软件进程
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/hosts
  • 1

加入如下文件:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

拷贝/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/
  • 1
  • 2
  • 3
  • 4
  • 5

开放常用端口(root用户)

#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service
  • 1
  • 2
  • 3
  • 4

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

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

创建组和用户

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

#先创建组cloud
groupadd cloud
#创建用户并加入组cloud
useradd -g cloud hadoop
#修改用户hadoop的密码
passwd hadoop
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将hadoop用户加到sodu列表

1、查看/etc/sudoers的权限

ls -l /etc/sudoers
  • 1

这里写图片描述

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

2、修改权限

chmod 777 /etc/sudoers
  • 1

这里写图片描述

3、将hadoop添加root权限

vim /etc/sudoers
  • 1

这里写图片描述

在root下加入下面hadoop用户

4、还原权限

chmod 440 /etc/sudoers
  • 1

拷贝/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/
  • 1
  • 2
  • 3
  • 4
  • 5

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

切换hadoop用户

su hadoop
  • 1

进入到当前用户的根目录

cd ~ 
  • 1

查看所有文件

ls –la
  • 1

进入.ssh目录

cd .ssh
  • 1

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

ssh-keygen -t rsa
  • 1

执行完这个命令后,会生成两个文件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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

这里写图片描述

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

准备软件

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

cd /home/hadoop
mkdir cloud
mkdir soft-install
  • 1
  • 2
  • 3

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

这里写图片描述

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

安装jdk

解压

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

配置环境变量

# 修改配置文件
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

将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/
  • 1
  • 2
  • 3
  • 4
  • 5

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

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/
  • 1
  • 2
  • 3
  • 4
  • 5

刷新环境变量

source /etc/profile
  • 1

安装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/
  • 1

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

mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
  • 1
  • 2

配置如下:

#修改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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

mkdir data
  • 1

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

vim myid
  • 1

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/
  • 1
  • 2
  • 3

启动Zookeeper

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

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

查看zookeeper的状态

./zkServer.sh status
  • 1

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

这里写图片描述

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

安装hadoop

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

解压

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

配置环境变量

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

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

# 刷新配置文件
source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

测试:

which hadoop
  • 1

这里写图片描述

修改配置文件(6个)

hadoop-env.sh

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

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

slaves

hadoop04
hadoop05
hadoop06
  • 1
  • 2
  • 3

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

mkdir tmp
  • 1

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

将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/
  • 1
  • 2
  • 3
  • 4
  • 5

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

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/
  • 1
  • 2
  • 3
  • 4
  • 5

刷新环境变量

source /etc/profile
  • 1

启动

启动的时候注意启动顺序

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

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

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

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

./bin/hdfs namenode –format
  • 1

并把/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/
  • 1

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

./bin/hdfs zkfc –formatZK
  • 1

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

./sbin/hadoop-daemon.sh start zkfc
  • 1

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

#hadoop-2.7.2/sbin下
./sbin/start-dfs.sh
  • 1
  • 2

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

#hadoop-2.7.2/sbin下
./sbin/start-yarn.sh
  • 1
  • 2

查看结果

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

jps
  • 1

这里写图片描述

这里写图片描述

通过浏览器测试如下:

http://192.168.2.101:50070/
  • 1

这里写图片描述

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

查看YARN的状态

http://192.168.2.103:8088/
  • 1

这里写图片描述

centos安装

 

Vm配置安装CentOS-7-Minimal

原创 2016年05月09日 19:34:15

  • 11978

大部分情况下,我们的工作环境都是Windows,然后当我工作中有需要用到Linux环境的时候我们大多会选择选择虚拟机来安装Linux,这里我记录我在虚拟机里安装CentOS7过程,以便今后工作中参考。

涉及内容:

  1. 安装 vm 12
  2. 配置 vm 12
  3. 安装 CentOS 7
  4. 配置 CentOS 7
  5. 快速克隆虚拟机

一、安装 vm

安装步骤很简单这里就略过了

二、配置 vm 的网络

设置网络模式为NAT模式

1、编辑 – 虚拟网络编辑器

1

2、设置NAT的IP便于修改主机IP

2

这里可以看到我的VMnet8 默认的子网地址是192.168.133.0 这是因为我安装的vm默认生成的这个地址,这表示如果不修改,你以后的Linux的IP都是192.168.133.x 这样的IP,如果我想以后我的Linux都是192.168.2.x 可以按如下方法修改

打开VMnet8的适配器设置ipv4地址

3

5

6

然后重复步骤1、步骤2

7

这样修改后我们以后的IP就是 192.168.2.x ,

3、下面我们设置 x 的范围

8

然后确定我们的IP范围就是 自己设置的范围,开始范围大于3,因为宿主机的默认为1,而网关为2,那么我们的Linux必须>=3并<=255

4、查看网关

8

记录以下信息,后面配置虚拟机要用到

子网掩码:255.255.255.0
网关:192.168.2.2
  • 1
  • 2

配置好后应用-确定,然后下面开始安装CentOS。

三、安装CentOS 7

1、下载镜像

http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
  • 1

2、创建新的虚拟机

1.第一步 默认

2.第二步 选择iso镜像

9

3.设置用户名,和密码,这里的密码将是root的密码

10

4.选择安装目录

11

5、设置磁盘大小

12

6、自定义硬件-删除声卡、打印机

13

7、等待完成。

中间可能安装提示警告,按yes即可

13

使用用户名root,密码root登录即可

四、配置 CentOS

1、配置防火墙

关闭防火墙
systemctl stop firewalld.service
关闭开机启动防火墙
systemctl disable firewalld.service
  • 1
  • 2
  • 3
  • 4

2、配置网络

cd /etc/sysconfig/network-scripts/
vi ifcfg-eno16777736
  • 1
  • 2
#要修改的数据
BOOTPROTO=static            ### 手动设置IP
#UUID=...                   ### 注释掉UUID方便后面clone虚拟机
IPADDR=192.168.2.100        ### 本机IP 为 192.168.2.100
NETMASK=255.255.255.0       ### 子网掩码
GATEWAY=192.168.2.2         ### 默认网关 对应我们NAT设置里查看的网关IP
DNS1=8.8.8.8                ### DNS 设置为Google的
ONBOOT=yes                  ### 开机启动
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

重启网络

/etc/init.d/network restart
  • 1

查看IP

14

发现我们的IP已经变为192.168.2.100了

测试网络

ping www.baidu.com # 虚拟机里测试能否上网
ping 192.168.2.1   # 虚拟机到宿主机 记得关闭宿主机防火墙
ping 192.168.2.100 # 宿主机到虚拟机 记得关闭虚拟机防火墙
  • 1
  • 2
  • 3

至此vm安装CentOS7完成,下一节,CentOS7安装jdk以及Tomcat并快速克隆虚拟机

五、快速克隆虚拟机

很多时候我们用到的不止一台虚拟机,而且每次安装都要等一定的时间,我们可以通过克隆快速部署更多的虚拟机。

将origin虚拟机关机,右键选-管理-克隆

15

16

17

完成即可,然后安装上面配置IP的方式只需要改IP为 192.168.2.101 等等即可最后一个段随意,这样就可以通过一个虚拟机克隆N多个虚拟机,一个玩坏了,删了再克隆。

2017.5.18添加 
发现主机 执行 yum update 后再克隆,IP不是以前的那个静态IP,而是重新分配了IP,我们的ifcfg-eno16777736网卡变成了ens33 ,如下图:

这里写图片描述

而我们的/etc/sysconfig/network-scripts/没有这个ens33的网卡,这就尴尬了,解决办法如下:

修改ifcfg-eno16777736加入

HWADDR=00:0c:29:ef:e7:72  #这里的值为上图标记的地址
  • 1

并重启虚拟机。

这里写图片描述

发现我们的网卡又变回ifcfg-eno16777736了,这时就可以修改静态IP了

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
service network start

Hadoop2.7.2之集群搭建(三台)

原创 2016年05月27日 12:43:18

  • 9428

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

如果你还没有虚拟机,请参考:http://blog.csdn.net/uq_jin/article/details/51355124 
如果你还没有试过单机模式,请参考:http://blog.csdn.net/uq_jin/article/details/51451995 
参考:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

集群规划

主机名ip安装的软件进程
master192.168.1.111jdk、hadoopnamenode ressourcemanager
slave1192.168.1.112jdk、hadoopdatanode secondnamenode
slave2192.168.1.113jdk、hadoopdatanade

免登录

这里直接用root用户,注意将防火墙关掉:

#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service
  • 1
  • 2
  • 3
  • 4

免密码登录:

cd /root/.ssh/
ssh-keygen -t rsa
  • 1
  • 2

这里上个回车就ok,会在当前目录生成两个文件,一个公钥一个私钥

这里写图片描述

将公钥拷贝到其它机器上,实现免密码登录

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
  • 1
  • 2
  • 3

这样会在slave1 的/root/.ssh/目录下生成一个authorized_keys 就可以实现master免登录到slave1,如下:

ssh slave1
  • 1

安装JDK

在/opt/下创建soft-install文件夹来存放安装的软件,创建soft来安装软件

这里写图片描述

tar -zxvf jdk-8u91-linux-x64.tar.gz -C /opt/soft/
  • 1

修改环境变量:

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

export JAVA_HOME=/opt/soft/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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

安装Hadoop

解压

tar -zxvf ./soft-install/hadoop-2.7.2.tar.gz -C /opt/soft/
  • 1

删除docs

cd /opt/soft/hadoop-2.7.2/share
rm -rf doc/
  • 1
  • 2

修改环境变量

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

export HADOOP_HOME=/opt/soft/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin

# 刷新配置文件
source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

修改配置文件

这些配置文件全部位于 /opt/soft/hadoop-2.7.2/etc/hadoop 文件夹下

hadoop-env.sh

这里写图片描述

core-site.xml

<configuration>
    <!-- 指定HDFS老大(namenode)的通信地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/soft/hadoop-2.7.2/tmp</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

hdfs-site.xml

<configuration>

    <!-- 设置namenode的http通讯地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:50070</value>
    </property>

    <!-- 设置secondarynamenode的http通讯地址 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>

    <!-- 设置namenode存放的路径 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/soft/hadoop-2.7.2/name</value>
    </property>

    <!-- 设置hdfs副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!-- 设置datanode存放的路径 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/soft/hadoop-2.7.2/data</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

mapred-site.xml 
必须先

mv mapred-site.xml.template mapred-site.xml
  • 1
<configuration>
    <!-- 通知框架MR使用YARN -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

yarn-site.xml

<configuration>
    <!-- 设置 resourcemanager 在哪个节点-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>

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

    <property>
         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

masters 
新建一个masters的文件,这里指定的是secondary namenode 的主机

slave1
  • 1

slaves

slave1
slave2
  • 1
  • 2

创建文件夹:

mkdir tmp name data
  • 1

复制到其他主机

复制/etc/hosts(因为少了这个导致secondarynamenode总是在slave1启动不起来)

scp /etc/hosts slave1:/etc/
scp /etc/hosts slave2:/etc/
  • 1
  • 2

复制/etc/profile (记得要刷新环境变量)

scp /etc/profile slave1:/etc/
scp /etc/profile slave2:/etc/
  • 1
  • 2

复制/opt/soft

scp -r /etc/soft slave1:/opt/
scp -r /etc/soft slave2:/opt/
  • 1
  • 2

记得在slave1和slave2上刷新环境变量

启动

第一次启动得格式化

./bin/hdfs namenode -format
  • 1

启动dfs

./sbin/start-dfs.sh
  • 1

启动yarn

./sbin/start-yarn.sh
  • 1

查看

master

这里写图片描述

slave1

这里写图片描述

slave2

这里写图片描述

通过浏览器测试hdfs:

192.168.2.111:50070
  • 1

这里写图片描述

注意这里有数据才是成功,我因为没把hosts文件复制到其他主机,导致启动的进程都是正确的,但是这里就是没数据,后来查资料检查才是没复制hosts文件。复制之后就一切正常了

通过浏览器测试yarn:

192.168.2.111:8088
  • 1

这里写图片描述

可以看到一切正常。2个节点。

至此我们的三台hadoop运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/u010435203/article/details/51513307

 

u010315668

woshiluochen

  • woshiluochen

    2017-07-31 17:063楼

    回复

  • 安装博主所写,成功搭建集群环境。
    好像发现一个命令错误,请博主确认
    复制到其他主机
    复制/opt/soft
    scp -r /etc/soft slave1:/opt/ 中应该是/opt/soft吧

  •  

 

 

 

Hadoop HA高可用集群搭建(2.7.2)

2016年03月24日 22:33:12

  • 13161

 

1.集群规划:

 主机名        IP                安装的软件                            运行的进程
drguo1  192.168.80.149 jdk、hadoop                         NameNode、DFSZKFailoverController(zkfc)、ResourceManager
drguo2 192.168.80.150  jdk、hadoop                         NameNode、DFSZKFailoverController(zkfc)、ResourceManager
drguo3  192.168.80.151  jdk、hadoop、zookeeper     DataNode、NodeManager、JournalNode、QuorumPeerMain
drguo4  192.168.80.152  jdk、hadoop、zookeeper     DataNode、NodeManager、JournalNode、QuorumPeerMain

drguo5 192.168.80.153  jdk、hadoop、zookeeper     DataNode、NodeManager、JournalNode、QuorumPeerMain

排的好好的,显示出来就乱了!!!

2.前期准备:

准备五台机器,修改静态IP、主机名、主机名与IP的映射,关闭防火墙,安装JDK并配置环境变量(不会请看这http://blog.csdn.net/dr_guo/article/details/50886667),创建用户:用户组,SSH免密码登录SSH免密码登录(报错请看这http://blog.csdn.net/dr_guo/article/details/50967442)。

注意:要把127.0.1.1那一行注释掉,要不然会出现jps显示有datanode,但网页显示live nodes为0;

注释之后就正常了,好像有人没注释也正常,我也不知道为什么0.0

3.搭建zookeeper集群(drguo3/drguo4/drguo5)

见:ZooKeeper完全分布式集群搭建

4.正式开始搭建Hadoop HA集群

去官网下最新的Hadoop(http://apache.opencas.org/hadoop/common/stable/),目前最新的是2.7.2,下载完之后把它放到/opt/Hadoop下

[plain] view plain copy

  1. guo@guo:~/下载$ mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/  
  2. mv: 无法创建普通文件"/opt/Hadoop/hadoop-2.7.2.tar.gz": 权限不够  
  3. guo@guo:~/下载$ su root   
  4. 密码:   
  5. root@guo:/home/guo/下载# mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/  

解压

[plain] view plain copy

  1. guo@guo:/opt/Hadoop$ sudo tar -zxf hadoop-2.7.2.tar.gz   
  2. [sudo] guo 的密码:  

解压jdk的时候我用的是tar -zxvf,其中的v呢就是看一下解压的过程,不想看你可以不写。

修改opt目录所有者(用户:用户组)直接把opt目录的所有者/组换成了guo。具体情况在ZooKeeper完全分布式集群搭建说过。

 

[plain] view plain copy

  1. root@guo:/opt/Hadoop# chown -R guo:guo /opt  

 

设置环境变量

[plain] view plain copy

  1. guo@guo:/opt/Hadoop$ sudo gedit /etc/profile  

在最后加上(这样设置在执行bin/sbin目录下的脚本时就不用进入该目录用了)

[plain] view plain copy

  1. #hadoop  
  2. export HADOOP_HOME=/opt/Hadoop/hadoop-2.7.2  
  3. export PATH=$PATH:$HADOOP_HOME/sbin  
  4. export PATH=$PATH:$HADOOP_HOME/bin  

然后更新配置

[plain] view plain copy

  1. guo@guo:/opt/Hadoop$ source /etc/profile  

修改/opt/Hadoop/hadoop-2.7.2/etc/hadoop下的hadoop-env.sh

[plain] view plain copy

  1. guo@guo:/opt/Hadoop$ cd hadoop-2.7.2  
  2. guo@guo:/opt/Hadoop/hadoop-2.7.2$ cd etc/hadoop/  
  3. guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ sudo gedit ./hadoop-env.sh  

进入文件后

[plain] view plain copy

  1. export JAVA_HOME=${JAVA_HOME}#将这个改成JDK路径,如下  
  2. export JAVA_HOME=/opt/Java/jdk1.8.0_73  

然后更新文件配置

[plain] view plain copy

  1. guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ source ./hadoop-env.sh 

前面配置和单机模式一样,我就直接复制了。

注意:汉语注释是给你看的,复制粘贴的时候都删了!!!

修改core-site.xml

[html] view plain copy

  1. <configuration>  
  2. <!-- 指定hdfs的nameservice为ns1 -->  
  3. <property>  
  4. <name>fs.defaultFS</name>  
  5. <value>hdfs://ns1/</value>  
  6. </property>  
  7. <!-- 指定hadoop临时目录 -->  
  8. <property>  
  9. <name>hadoop.tmp.dir</name>  
  10. <value>/opt/Hadoop/hadoop-2.7.2/tmp</value>  
  11. </property>  
  12. <!-- 指定zookeeper地址 -->  
  13. <property>  
  14. <name>ha.zookeeper.quorum</name>  
  15. <value>drguo3:2181,drguo4:2181,drguo5:2181</value>  
  16. </property>  
  17. </configuration>  

修改hdfs-site.xml

[html] view plain copy

  1. <configuration>  
  2.     <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->  
  3.     <property>  
  4.         <name>dfs.nameservices</name>  
  5.         <value>ns1</value>  
  6.     </property>  
  7.     <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->  
  8.     <property>  
  9.         <name>dfs.ha.namenodes.ns1</name>  
  10.         <value>nn1,nn2</value>  
  11.     </property>  
  12.     <!-- nn1的RPC通信地址 -->  
  13.     <property>  
  14.         <name>dfs.namenode.rpc-address.ns1.nn1</name>  
  15.         <value>drguo1:9000</value>  
  16.     </property>  
  17.     <!-- nn1的http通信地址 -->  
  18.     <property>  
  19.         <name>dfs.namenode.http-address.ns1.nn1</name>  
  20.         <value>drguo1:50070</value>  
  21.     </property>  
  22.     <!-- nn2的RPC通信地址 -->  
  23.     <property>  
  24.         <name>dfs.namenode.rpc-address.ns1.nn2</name>  
  25.         <value>drguo2:9000</value>  
  26.     </property>  
  27.     <!-- nn2的http通信地址 -->  
  28.     <property>  
  29.         <name>dfs.namenode.http-address.ns1.nn2</name>  
  30.         <value>drguo2:50070</value>  
  31.     </property>  
  32.     <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->  
  33.     <property>  
  34.         <name>dfs.namenode.shared.edits.dir</name>  
  35.         <value>qjournal://drguo3:8485;drguo4:8485;drguo5:8485/ns1</value>  
  36.     </property>  
  37.     <!-- 指定JournalNode在本地磁盘存放数据的位置 -->  
  38.     <property>  
  39.         <name>dfs.journalnode.edits.dir</name>  
  40.         <value>/opt/Hadoop/hadoop-2.7.2/journaldata</value>  
  41.     </property>  
  42.     <!-- 开启NameNode失败自动切换 -->  
  43.     <property>  
  44.         <name>dfs.ha.automatic-failover.enabled</name>  
  45.         <value>true</value>  
  46.     </property>  
  47.     <!-- 配置失败自动切换实现方式 -->  
  48.     <property>  
  49.         <name>dfs.client.failover.proxy.provider.ns1</name>  
  50.         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
  51.     </property>  
  52.     <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->  
  53.     <property>  
  54.         <name>dfs.ha.fencing.methods</name>  
  55.         <value>  
  56.             sshfence  
  57.             shell(/bin/true)  
  58.         </value>  
  59.     </property>  
  60.     <!-- 使用sshfence隔离机制时需要ssh免登陆 -->  
  61.     <property>  
  62.         <name>dfs.ha.fencing.ssh.private-key-files</name>  
  63.         <value>/home/guo/.ssh/id_rsa</value>  
  64.     </property>  
  65.     <!-- 配置sshfence隔离机制超时时间 -->  
  66.     <property>  
  67.         <name>dfs.ha.fencing.ssh.connect-timeout</name>  
  68.         <value>30000</value>  
  69.     </property>  
  70. </configuration>  

先将mapred-site.xml.template改名为mapred-site.xml然后修改mapred-site.xml

[html] view plain copy

  1. <configuration>  
  2.     <!-- 指定mr框架为yarn方式 -->  
  3.     <property>  
  4.         <name>mapreduce.framework.name</name>  
  5.         <value>yarn</value>  
  6.     </property>  
  7. </configuration>  

修改yarn-site.xml

[html] view plain copy

  1. <configuration>  
  2.     <!-- 开启RM高可用 -->  
  3.     <property>  
  4.        <name>yarn.resourcemanager.ha.enabled</name>  
  5.        <value>true</value>  
  6.     </property>  
  7.     <!-- 指定RM的cluster id -->  
  8.     <property>  
  9.        <name>yarn.resourcemanager.cluster-id</name>  
  10.        <value>yrc</value>  
  11.     </property>  
  12.     <!-- 指定RM的名字 -->  
  13.     <property>  
  14.        <name>yarn.resourcemanager.ha.rm-ids</name>  
  15.        <value>rm1,rm2</value>  
  16.     </property>  
  17.     <!-- 分别指定RM的地址 -->  
  18.     <property>  
  19.        <name>yarn.resourcemanager.hostname.rm1</name>  
  20.        <value>drguo1</value>  
  21.     </property>  
  22.     <property>  
  23.        <name>yarn.resourcemanager.hostname.rm2</name>  
  24.        <value>drguo2</value>  
  25.     </property>  
  26.     <!-- 指定zk集群地址 -->  
  27.     <property>  
  28.        <name>yarn.resourcemanager.zk-address</name>  
  29.        <value>drguo3:2181,drguo4:2181,drguo5:2181</value>  
  30.     </property>  
  31.     <property>  
  32.        <name>yarn.nodemanager.aux-services</name>  
  33.        <value>mapreduce_shuffle</value>  
  34.     </property>  
  35. </configuration>  

修改slaves

[html] view plain copy

  1. drguo3  
  2. drguo4  
  3. drguo5  

把Hadoop整个目录拷贝到drguo2/3/4/5,拷之前把share下doc删了(文档不用拷),这样会快点。
5.启动zookeeper集群(分别在drguo3、drguo4、drguo5上启动zookeeper)

[plain] view plain copy

  1. guo@drguo3:~$ zkServer.sh start  
  2. ZooKeeper JMX enabled by default  
  3. Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg  
  4. Starting zookeeper ... STARTED  
  5. guo@drguo3:~$ jps  
  6. 2005 Jps  
  7. 1994 QuorumPeerMain  
  8. guo@drguo3:~$ ssh drguo4  
  9. Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)  
  10.   
  11.  * Documentation:  https://help.ubuntu.com/  
  12.   
  13. Last login: Fri Mar 25 14:04:43 2016 from 192.168.80.151  
  14. guo@drguo4:~$ zkServer.sh start  
  15. ZooKeeper JMX enabled by default  
  16. Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg  
  17. Starting zookeeper ... STARTED  
  18. guo@drguo4:~$ jps  
  19. 1977 Jps  
  20. 1966 QuorumPeerMain  
  21. guo@drguo4:~$ exit  
  22. 注销  
  23. Connection to drguo4 closed.  
  24. guo@drguo3:~$ ssh drguo5  
  25. Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)  
  26.   
  27.  * Documentation:  https://help.ubuntu.com/  
  28.   
  29. Last login: Fri Mar 25 14:04:56 2016 from 192.168.80.151  
  30. guo@drguo5:~$ zkServer.sh start  
  31. ZooKeeper JMX enabled by default  
  32. Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg  
  33. Starting zookeeper ... STARTED  
  34. guo@drguo5:~$ jps  
  35. 2041 Jps  
  36. 2030 QuorumPeerMain  
  37. guo@drguo5:~$ exit  
  38. 注销  
  39. Connection to drguo5 closed.  
  40. guo@drguo3:~$ zkServer.sh status  
  41. ZooKeeper JMX enabled by default  
  42. Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg  
  43. Mode: leader  

6.启动journalnode(分别在drguo3、drguo4、drguo5上启动journalnode)注意只有第一次需要这么启动,之后启动hdfs会包含journalnode。

[plain] view plain copy

  1. guo@drguo3:~$ hadoop-daemon.sh start journalnode  
  2. starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo3.out  
  3. guo@drguo3:~$ jps  
  4. 2052 Jps  
  5. 2020 JournalNode  
  6. 1963 QuorumPeerMain  
  7. guo@drguo3:~$ ssh drguo4  
  8. Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)  
  9.   
  10.  * Documentation:  https://help.ubuntu.com/  
  11.   
  12. Last login: Fri Mar 25 00:09:08 2016 from 192.168.80.149  
  13. guo@drguo4:~$ hadoop-daemon.sh start journalnode  
  14. starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo4.out  
  15. guo@drguo4:~$ jps  
  16. 2103 Jps  
  17. 2071 JournalNode  
  18. 1928 QuorumPeerMain  
  19. guo@drguo4:~$ exit  
  20. 注销  
  21. Connection to drguo4 closed.  
  22. guo@drguo3:~$ ssh drguo5  
  23. Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)  
  24.   
  25.  * Documentation:  https://help.ubuntu.com/  
  26.   
  27. Last login: Thu Mar 24 23:52:17 2016 from 192.168.80.152  
  28. guo@drguo5:~$ hadoop-daemon.sh start journalnode  
  29. starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo5.out  
  30. guo@drguo5:~$ jps  
  31. 2276 JournalNode  
  32. 2308 Jps  
  33. 1959 QuorumPeerMain  
  34. guo@drguo5:~$ exit  
  35. 注销  
  36. Connection to drguo5 closed.  

在drguo4/5启动时发现了问题,没有journalnode,查看日志发现是因为汉语注释造成的,drguo4/5全删了问题解决。drguo4/5的拼音输入法也不能用,我很蛋疼。。镜像都是复制的,咋还变异了呢。
7.格式化HDFS(在drguo1上执行)

[plain] view plain copy

  1. guo@drguo1:/opt$ hdfs namenode -format  

这回又出问题了,还是汉语注释闹得,drguo1/2/3也全删了,问题解决。
注意:格式化之后需要把tmp目录拷给drguo2(不然drguo2的namenode起不来)

[plain] view plain copy

  1. guo@drguo1:/opt/Hadoop/hadoop-2.7.2$ scp -r tmp/ drguo2:/opt/Hadoop/hadoop-2.7.2/  

8.格式化ZKFC(在drguo1上执行)

[plain] view plain copy

  1. guo@drguo1:/opt$ hdfs zkfc -formatZK  

9.启动HDFS(在drguo1上执行)

[plain] view plain copy

  1. guo@drguo1:/opt$ start-dfs.sh   

10.启动YARN(在drguo1上执行)

[plain] view plain copy

  1. guo@drguo1:/opt$ start-yarn.sh   

PS:
1.drguo2的resourcemanager需要手动单独启动:

yarn-daemon.sh start resourcemanager

2.namenode、datanode也可以单独启动:

hadoop-daemon.sh start namenode

hadoop-daemon.sh start datanode
3.NN 由standby转化成active
hdfs haadmin -transitionToActive nn1 --forcemanual

大功告成!!!

是不是和之前规划的一样0.0

 

yxh11028

  • yxh11028

    2018-01-05 15:474楼

    回复

  • 很不错的博文,想问一下resourcemanager有没有一键启动俩个的命令?还是必须手动启动

  •  

Dr_Guo

  • Dr_Guo

    2016-06-14 14:003楼

    回复

  • nn standby切换为 active:hdfs haadmin -transitionToActive nn1 --forcemanual

  •  

Dr_Guo

  • Dr_Guo

    2016-06-13 13:002楼

    回复

  • ssh先创建公钥私钥,然后把公钥发给其它节点,如果节点有.ssh目录,直接拷进去就可以了,没有的话创建一下私钥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值