一、Hadoop HA 机制的学习

  1.1、Hadoop 2.X 的架构图

    

  2.x版本中,HDFS架构解决了单点故障问题,即引入双NameNode架构,同时借助共享存储系统来进行元数据的同步,共享存储系统类型一般有几类,如:Shared NAS+NFS、BookKeeper、BackupNode 和 Quorum Journal Manager(QJM),上图中用的是QJM作为共享存储组件,通过搭建奇数结点的JournalNode实现主备NameNode元数据操作信息同步。

  1.2、QJM原理

  QJM全称是Quorum Journal Manager, 由JournalNode(JN)组成,一般是奇数点结点组成。每个JournalNode对外有一个简易的RPC接口,以供NameNode读写EditLog到JN本地磁盘。当写EditLog时,NameNode会同时向所有JournalNode并行写文件,只要有N/2+1结点写成功则认为此次写操作成功,遵循Paxos协议。其内部实现框架如下:

1.3、主备切换机制

  要完成HA,除了元数据同步外,还得有一个完备的主备切换机制,Hadoop的主备选举依赖于ZooKeeper。下面是主备切换的状态图:

  

  上面介绍了下关于HadoopHA机制,归纳起来主要是两块:元数据同步和主备选举。元数据同步依赖于QJM共享存储,主备选举依赖于ZKFC和Zookeeper。整个过程还是比较复杂的,如果能理解Paxos协议,那也能更好的理解这个。

  详细请参考:https://www.cnblogs.com/qcloud1001/p/7693476.html

二、hadoop2.8.5 的HA 集群搭建准备

  2.1、集群搭建准备

    这里使用的是:  CentOS7.0   VMware Workstation 14  SecureCRT连接工具

             Hadoop-2.8.5   jdk-1.8.0_191  zookeeper-3.4.6

    apache全系列资源官网下载:http://mirror.bit.edu.cn/apache/

  2.2、虚拟机设置

    打开VMware Workstation 14  通过ALT+E+N打开虚拟网络编辑器

以下1、2、3 需要记录,需要在虚拟机中配置

  通过cmd也能找到网卡设置

    cmd  >   ipconfig

  2.3、虚拟机设置

  虚拟机安装可以参考: https://www.cnblogs.com/sxdcgaq8080/p/7466529.html

  网络适配器:NAT

  内存:512MB~1024MB即可

  安装可以选择:最小安装

  安装一台虚拟机即可,其他几台可以使用克隆方法:(其他几台虚拟机也可以在单机配置完毕后进行复制

    

  2.4、各虚拟机设置

    2.4.1 静态ip的设置

    2.4.2 主机名的设置

    2.4.3 hosts设置

    2.4.3 ssh密钥的设置

    下面进行设置:可以参考我这里的配置

  

    修改静态ip

  这里的ifcfg-ens33需要根据个人虚拟机的网络名

cd /etc/sysconfig/network-scripts
ls
vi ifcfg-ens33

    这里修改:ONBOOT=yes,BOOTPROTO=static

      添加:IPADDR=192.168.182.135  #参考前面的网卡设置
           NETMASK=255.255.255.0  #参考前面的网卡设置
         GATEWAY=192.168.182.2 #参考前面的网卡设置
         DNS1=8.8.8.8

      

service network restart

  进行网络重启后连接测试(个人/外网):ping 主机ip/www.baidu.com

  其他三台虚拟机设置如上,只有ip需要修改

  主机名修改:

hostname node1
su
vi /etc/sysconfig/network
vi /etc/hostnamereboot

  network中添加:NETWORKING=yes

         HOSTNAME=node1

  hostname中添加:node1

  之后重启:reboot

  其他三台虚拟机设置如上,分别修改主机名为node2,node3,node4

  hosts的设置:

vi /etc/hosts

  node1的修改如下:

  其他三台虚拟机设置如上,没有变化

  ssh密钥的设置:

    以下命令用于生成ssh键值对,复制公钥形成 id_rsa.pub 到authorized_keys 文件中,并提供拥有者具有authorized_keys文件的读写权限。

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

  

  其他三台虚拟机执行以上命令后,需要对node1进行设置,以后能通过node1免密访问其他主机。

  通过SecureCRT分别连接4台虚拟机,需要将node1的公钥发送到其他主机进行记录

scp ~/.ssh/id_rsa.pub root@node2:~/.ssh/id_rsa_n1.pub
scp ~/.ssh/id_rsa.pub root@node3:~/.ssh/id_rsa_n1.pub
scp ~/.ssh/id_rsa.pub root@node4:~/.ssh/id_rsa_n1.pub

  

   发送完毕后,将id_rsa_n1.pub中的内容追加到authorized_keys中

cat ~/.ssh/id_rsa_n1.pub >> ~/.ssh/authorized_keys

  

  三台虚拟机完成上面操作可在node1主机中进行验证

ssh node2
ssh node3

  正确的设置下登陆是不需要密码的,用exit退出登录

  2.5、jdk1.8.0的设置安装及hadoop2.8.5的安装

    2.5.1 jdk1.8的安装

  首先卸载原centOS系统中附带的jdk

    通过以下两个命令查找系统中的jdk

rpm -qa | grep jdk
rpm -qa | grep gcj

  可能的结果是:(也有可能有其他的)

    libgcj-4.1.2-42.el5

    java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

  之后通过  yum -y remove <file>命令卸载

yum -y remove java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

  最后输入java -version验证虚拟机中是否还有jdk

  接下来是安装的过程

1、通过SecureCRT将linux版本的jdk,hadoop,zookeeper(为了后面的搭建)发送到虚拟机上

通过SFTP进行发送

  发送后的tar.gz文件在~文件夹内

     

使用    tar -zxvf <file>    进行解压
之后使用    mv ~/<file> /usr/local/java/    移动到/usr/local目录下

  这里我的目录是在/usr/local下

  

2、各种环境的配置

  linux的环境配置在/etc/profile中

vi /etc/profile

  在文件的最后添加如下的配置(后面的也一并配置了)

  这里注意各个软件的目录位置

export HADOOP_HOME=/usr/local/hadoop2.8.5
export JAVA_HOME=/usr/local/java/jdk1.8.0
export ZOOKEEPER_HOME=/usr/local/zookeeperexport HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOMEexport PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH

  后面使用  source /etc/profile  刷新文件即可

  下面进行验证:

  到这里验证通过就说明安装成功了。

三、HA集群搭建的设置

  

以上是各node上的分布:

NN:namenode  DN:datanode  ZK : zookeeper(QuorumPeerMain)  

ZKFC : DFSZKFailoverController  JN : JournalNode  RM:ResourceManager  

DM:DataNode、NodeManager  

以下配置参考hadoop HA 官网配置:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

  各hadoop文件配置:

cd $HADOOP_HOME
ls
cd etc/hadoop

  该目录下进行hadoop的配置(均在configuration标签中配置):

hadoop-env.sh

修改(JDK的路径):export JAVA_HOME=/usr/local/java/jdk1.8.0

添加:export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"

core-site.xml

<property><name>fs.defaultFS</name><value>hdfs://mycluster</value>
</property>
<property><name>ha.zookeeper.quorum</name><value>node1:2181,node2:2181,node3:2181</value>
</property>
<property><name>hadoop.tmp.dir</name><value>/opt/hadoopHA</value>
</property>

View Code

hdfs-site.xml

 <property><name>dfs.nameservices</name><value>mycluster</value></property><property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>node1:8020</value></property><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>node2:8020</value></property><property><name>dfs.namenode.http-address.mycluster.nn1</name><value>node1:50070</value></property><property><name>dfs.namenode.http-address.mycluster.nn2</name><value>node2:50070</value></property><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value></property><property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><property><name>dfs.journalnode.edits.dir</name><value>/opt/journal/data</value></property><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>

View Code

cp mapred-site.xml.template mapred-site.xml

  通过这个创建mapred-site.xml配置

mapred-site.xml

<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>

View Code

yarn-site.xml

<property><name>yarn.resourcemanager.hostname</name><value>node1</value>
</property>
<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>

View Code

编辑slaves文件,添加以下内容

node2
node3
node4

View Code

所有配置完成之后,要全部同步到其他几台虚拟机

scp ./* root@node2:/usr/local/hadoop2.8.5/etc/hadoop/
scp ./* root@node3:/usr/local/hadoop2.8.5/etc/hadoop/
scp ./* root@node4:/usr/local/hadoop2.8.5/etc/hadoop/

  对于zookeeper进行配置

cd $ZOOKEEPER_HOME/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改:dataDir=/opt/zookeeper  #这里指定zookeeper的data数据目录(没有,需要手动创建)
在最后添加:

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

现在保存并去创建zookeeper的data数据目录,在该目录下

vi myid

  在该文件中不同zookeeper虚拟机中配置不同(不能有错),跟zoo.cfg后面配置的server有关,myid文件中只有1个数字即可。

node1:1

node2:2

node3:3

四、集群服务的启动验证

1、(node1,node2,node3)虚拟机上的zookeeper启动

  cd $ZOOKEEPER_HOME/bin

  ./zkServer.sh start

  启动完成后可通过  ./zkServer.sh status  进行查看

2、在node1上进行验证

  2.1、格式化操作

    cd $HADOOP_HOME/bin

     zkfc格式化:hdfs zkfc -format

     hdfs格式化:hdfs namenode -format

  2.2、HA的启动

    cd $HADOOP_HOME/sbin

    ./start-dfs.sh(启动HDFS)

    ./start-yarn.sh(启动YARN)

  2.3、HA的验证

    各node主机的hadoop端口验证

  zookeeper各节点验证

  2.4 、外部网站验证

            

转载于:https://www.cnblogs.com/null-/p/10000309.html

Hadoop-2.8.5的HA集群搭建相关推荐

  1. 深入浅出学大数据(五)Hadoop再探讨High Availability(HA)集群搭建及YARN原理介绍

      大家好,我是不温卜火,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样 ...

  2. Hadoop 2.x 完全分布式HA集群环境搭建

    Hadoop 2.x 完全分布式HA集群环境搭建 目录 Hadoop 2.0 环境搭建 前提:环境准备 第一步:修改hadoop-env.sh配置文件,配置好JAVA_HOME环境变量 第二步:修改h ...

  3. hadoop2.8 ha 集群搭建

    简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...

  4. 7.HDFS之——NameNode的概述、自动Name的概述、NameNode HA 集群搭建

    7.HDFS NameNode HA 7.1 NameNode HA概述 所谓HA(High Availablity [əˌveɪlə'bɪləti] ),即高可用(7x24小时服务不中断).通过主备 ...

  5. 大数据系列(hadoop) Hadoop+Zookeeper 3节点高可用集群搭建

    ---恢复内容开始--- 一.集群规划 主机名 ip NameNode DataNode Yarn ZooKeeper JournalNode node01 192.168.1.201 是 是 否 是 ...

  6. spark ui的访问地址_Spark篇之HA集群搭建

    一.下载Spark安装包 可以从官网下载,本集群选择的版本是spark-1.6.0-bin-hadoop2.6 二.部署和规划Spark集群 提前准备好四台虚拟主机,三台主机 node1 node2 ...

  7. eureka注册中心HA集群搭建

    今天我们讲一下高可用的eureka注册中心(eureka server cluster) SpringCloud支持Eureka.Zookeeper.Consul作为注册中心,这里我们选择Eureka ...

  8. 基于ZooKeeper的Hadoop HA集群搭建

    集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...

  9. hadoop HA集群搭建(亲测)

    1.hadoop-env.sh 2.core-site.xml <configuration> <!-- 指定hdfs的nameservice为ns1 --> <prop ...

最新文章

  1. usaco Runaround Numbers
  2. PAT甲级1093 Count PAT‘s :[C++题解]DP、状态机模型dp
  3. 03.shard_allocation_和_cluster的routing设置
  4. Android QQ登录 程序奔溃的问题
  5. 01-MyBatis入门程序
  6. 【渝粤题库】陕西师范大学180208 产品管理 作业(专升本)
  7. MySQL的未来在哪?
  8. 0918类对象重载,作业3
  9. system health_Health Hack 2014:开源,开放数据和跨学科协作的力量
  10. 使用SimpleDateFormat出现时差
  11. BOM对象有哪些,列举window对象?
  12. 推荐FPGA入门书籍
  13. 计算机专业学生毕业实习周记
  14. 知识库管理系统——项目
  15. mysql linux .frm位置_linux 使用mysqlfrm
  16. 计算机系的同学应该有更高的雄心壮志
  17. em表示什么长度单位_css中pt、px、em、ex、in等这类长度单位详细说明
  18. iOS 3级滚动地址
  19. 程序员转正述职报告_程序员个人转正述职报告
  20. 时序建模:时间戳与时序特征衍生思路汇总

热门文章

  1. Nessus Scan
  2. 漫画算法:什么是一致性哈希?
  3. C#串口通信学习笔记
  4. 我的第一个Android程序
  5. 【Linux开发】linux设备驱动归纳总结(七):2.内核定时器
  6. Sharepoint 2010 网站无法检索到部分AD用户
  7. js基础-字符串常用属性合集
  8. Abaqus中施加移动车辆荷载(待整理)
  9. Python_logging模块
  10. [kuangbin] M - Find a way(简单广搜)