安装 HA-hadoop教程,关键流程

1  安装虚拟机

1  修改主机名以及hosts

vi /etc/sysconfig/network

vi /etc/hosts    


2 修改IP  图形化修改。 保证可以ping通主机,外网    


3 关闭防火墙  

重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off 或者 /sbin/chkconfig --level 2345 iptables off


4新增hadoop用户

adduser hadoop  //添加一个名为hadoop  的用户
passwdhadoop  //修改密码
Changing password for user tommy.
New UNIX password:     //在这里输入新密码
Retype new UNIX password:  //再次输入新密码
passwd: all authentication tokens updated successfully.


5、赋予root权限免密码登陆

找到这一行 并且添加如下用户
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)      NOPASSWD:ALL
修改完毕,现在可以用hadoop帐号登录,然后用命令 su - ,即可获得root权限进行操作。

6修改机器启动级别

用文本编辑器修改 /etc/inittab文件,把

  代码:  id:5:initdefault: //图形化界面启动

  代码:  id:3:initdefault://字符界面启动


7 ssh免登陆设置, 

在 hadoop用户名下使用    

1 ssh-keygen -t rsa   生成文件

2  ssh-copy-id userb@10.124.84.20    传送文件到目标机器


8 安装jdk配置 

上传文件并且解压 tar -zxvf    jdk-7u55-linux-x64.tar.gz  

vi /etc/profile

export JAVA_HOME=/home/hadoop/app/jdk
export PATH=.:$JAVA_HOME/bin:$PATH



9复制  虚拟机   

配置 是5台  会出现网卡冲突现象解决问题如下

http://blog.csdn.net/a2615381/article/details/54836649

机器安排配置如下

hadoop01192.168.1.201jdk、hadoopNameNode、DFSZKFailoverController(zkfc)、ResourceManager
hadoop02 192.168.1.202 jdk、hadoopNameNode、DFSZKFailoverController(zkfc)、ResourceManager
hadoop03 192.168.1.203 jdk、hadoop 、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop04 192.168.1.204 jdk、hadoop 、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain 
hadoop05 192.168.1.205 jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain

1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
安装步骤:


2.安装配置zooekeeper集群(在hadoop03上)

2.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /weekend/
2.2修改配置
cd /weekend/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/weekend/zookeeper-3.4.5/tmp
在最后添加:
server.1=hadoop03:2888:3888
server.2=hadoop04:2888:3888
server.3=hadoop05:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /weekend/zookeeper-3.4.5/tmp
再创建一个空文件
touch /weekend/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /weekend/zookeeper-3.4.5/tmp/myid

 2.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop04、hadoop05根目录下创建一个hadoop目录:mkdir /hadoop)
scp -r /hadoop/zookeeper-3.4.5/ hadoop04:/hadoop/
scp -r /hadoop/zookeeper-3.4.5/ hadoop05:/hadoop/

注意:修改hadoop04、hadoop05对应/hadoop/zookeeper-3.4.5/tmp/myid内容
hadoop04:
echo 2 > /hadoop/zookeeper-3.4.5/tmp/myid
hadoop05:
echo 3 > /hadoop/zookeeper-3.4.5/tmp/myid


3 安装配置hadoop集群(在hadoop01上操作)

3.1解压
tar -zxvf hadoop-2.4.1.tar.gz -C /hadoop/
3.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
#将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=/home/hadoop/app/jdk
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /home/hadoop/app/hadoop-2.4.1/etc/hadoop

3.3 修改hadoo-env.sh
export JAVA_HOME=/home/hadoop/app/jdk1.7.0_55

3.4修改core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- ??¨hadoopá??? -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hadoop/tmp</value>
</property>
<!-- ??¨zookeeperμ?· -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
</configuration>


3.5修改hdfs-site.xml

<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<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:9000</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:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/app/hadoop/journaldata</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隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>


3.6 修改mapred-site.xml

<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        </property>
</configuration>

3.7修改yarn-site.xml

<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>

3.8 修改slaves(slaves是指定子节点的位置,因为要在hadoop01上启动HDFS、在hadoop01启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoop03上的slaves文件指定的是nodemanager的位置)
hadoop03
hadoop04
hadoop05


3.9 配置免密码登录。为了方便,所有机器互通。复制文件给其他机器

scp -r /hadoop   hadoop@hadoop02:/home/hadoop/app   (同理复制)


4 启动顺序

4.1启动zookeeper集群(分别在hadoop03,hadoop04,hadoop04上面启动ZK)

cd /app/zookeeper/bin/

./zkServer.sh start

#查看状态   一个  leader,两个 follower

./zkServer.sh status

4.5 启动  journalnode(分别在hadoop03,04,05上面执行)

cd /app/hadoop/sbin

./hadoop-daemon.sh start journalnode

#运行jps命令检验  hadoop03,04,05 上面多了JournalNode进程


5格式化HDFS

#在hadoop01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/hadoop/hadoop-2.4.1/tmp,然后将/hadoop/hadoop-2.4.1/tmp拷贝到hadoop02的/hadoop/hadoop-2.4.1/下。
scp -r tmp/ hadoop02:/home/hadoop/app/hadoop-2.4.1/
##也可以这样,建议hdfs namenode -bootstrapStandby

格式化ZKFC(在hadoop01上执行即可)
hdfs zkfc -formatZK

启动HDFS(在hadoop01上执行)
sbin/start-dfs.sh


6启动YARN(#####注意#####:是在hadoop01上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,

因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
sbin/start-yarn.sh
启动 resourcemanager:
./yarn-daemon.sh start resourcemanager


到此,hadoop-2.4.1配置完毕,可以统计浏览器访问:
http://192.168.1.201:50070
NameNode 'hadoop01:9000' (active)
http://192.168.1.202:50070
NameNode 'hadoop02:9000' (standby)

7验证HDFS HA

首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.1.202:50070
NameNode 'hadoop02:9000' (active)
这个时候hadoop02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode 'hadoop01:9000' (standby)

验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out


额外配置功能

由于每次开机都要启动5台机器。以及关机,重启虚拟机比较麻烦。所以在主机写一个脚本 一件调用控制5台机器,方便使用

脚本1

#!/bin/bash  
ssh -t -p 22 hadoop@hadoop03  sh /home/hadoop/startZK.sh    代表执行hadoop03下的starkZK.sh脚本位置

脚本2

#!/bin/bash  
ssh -t -p 22 hadoop@hadoop05  sudo shutdown -h now   代表控制hadoop05关机功能


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值