首页 数据库 mysql教程 Hadoop2.2.0稳定版整合ZooKeeper(1)

Hadoop2.2.0稳定版整合ZooKeeper(1)

Jun 07, 2016 pm 03:08 PM
zookeeper 整合

Hadoop2.2.0HAzookeeper3.4.5 体系结构 错误处理 心血之作,在熟悉 hadoop2 架构的过程耽误了太长时间,在搭建环境过程遇到一些问题,这些问题一直卡在那儿,不得以解决,耽误了时间。最后,千寻万寻,把问题解决,多谢在过程提供帮助的大侠。这篇文章中,我

Hadoop2.2.0+HA+zookeeper3.4.5+体系结构+错误处理

        心血之作,在熟悉hadoop2架构的过程耽误了太长时间,在搭建环境过程遇到一些问题,这些问题一直卡在那儿,不得以解决,耽误了时间。最后,千寻万寻,把问题解决,多谢在过程提供帮助的大侠。这篇文章中,我也会把自己遇到的问题给列出来,帮助后来者进一步的学习。

       http://blog.csdn.net/yczws1/article/details/23566383

前言

       本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试。文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题。搭建环境过程不重要,重要点在于搭建过程中遇到的问题,解决问题的过程。

       可能自己遇到的问题在一些由经验的老者手上都不是问题,但是这些问题着实让自己耽误了很长时间,最后问题解决也是费了太大心血。也通过这篇文档,表现出来,算是总结,为后者提供意见。

Hadoop2.2.0体系结构

       要想理解本节内容,首先需要了解hadoop1的体系结构。这里不过多的介绍基于hadoop1的体系架构,早在之前,曾搭建hadoop1.2.1伪分布式集群,详细请看hadoop学习(一)hadoop-1.2.1伪分布式配置及遇到的问题。这里主要介绍hadoop2的体系架构。

        hadoop1的核心组成是两部分,即HDFSMapReduce。在hadoop2中变为HDFSYarn

        新的HDFS中的NameNode不再是只有一个了,可以有多个(目前只支持2个)。每一个都有相同的职能。

        这两个NameNode的地位如何:一个是active状态的,一个是standby状态的。当 集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态 NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为 active状态的,就可以继续工作了。这就是高可靠。

        当NameNode发生故障时,他们的数据如何保持一致:在这里,2NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,JournalNode集群或者NFS进行共享。NFS是操作系统层面的,JournalNodehadoop层面的,我们这里使用JournalNode集群进行数据共享。

        如何实现NameNode的自动切换:这就需要使用ZooKeeper集群进行选择了。HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。

        HDFS FederationHDFS联盟):联盟的出现是有原因的。我们知道 NameNode是核心节点,维护着整个HDFS中的元数据信息,那么其容量是有限的,受制于服务器的内存空间。当NameNode服务器的内存装不下数据后,那么HDFS集群就装不下数据了,寿命也就到头了。因此其扩展性是受限的。HDFS联盟指的是有多个HDFS集群同时工作,那么其容量理论上就不受限了,夸张点说就是无限扩展。你可以理解成,一个总集群中,可以虚拟出两个或两个以上的单独的小集群,各个小集群之间数据是实时共享的。因为hadoop集群中已经不在单独存在namenodedatanode的概念。当一个其中一个小集群出故障,可以启动另一个小集群中的namenode节点,继续工作。因为数据是实时共享,即使namenodedatanode一起死掉,也不会影响整个集群的正常工作。

集群节点任务安排:

        这点很重要,我们事先一定要先理解,节点之间任务是如何安排的。如果事先不理解为什么是这样,后面还会遇到更多的问题。这就需要,理解journalnodezookeeperdatanodenamenode之间关系。自己也是在这上面耽误了很长时间,希望读者这点多注意下。

        6台主机。

Hadoop2.2.0稳定版整合ZooKeeper(1)

        Journalnodezookeeper保持奇数点,这点大家要有个概念,最少不少于3个节点。这里暂不讲解。

        两个namenode上面已经说明,其实在hadoop2中几点之间namenodedatanode之间的划分已经不是那么明确了。这只是采用后4台机器作为namenode。这里也存在一个问题:如果把datanodenamenode放在一起,对数据的读取IO的效率肯定会有一定的影响,不同机器之间还是要通过网线和http请求完成数据之间的共享。实际中,两者是可以在一起。但是我不知道在一起和不在一起之间的主要区别在哪儿,上面的解释只是个人意见,如果读者有更好的意见可以留言,大家一起讨论。

       在集群搭建之间,各主机设置静态IP、更改主机名称、主机之间ssh互联等相关设置这里不在多讲。如有需要,请参考:hadoop学习(五)Hadoop2.2.0完全分布式安装详解(1配置文档。

       下面就进入正式的集群的安装过程:

       下面所有的过程都是在hadoop1机器上完成的,之后把文件复制到其他节点中。

Zookeeper安装过程:

1、下载解压zookeeper

       下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/

       解压到指定目录:这里目录:/home/tom/yarn/hadoop-2.2.0/app/

       在hadoop目录中创建app目录。把文件解压到hadoopapp目录中,是为了以后整个项目可以整体移植。包括后面,我们会安装HBaseHive等软件,都是解压到app的目录中。

2、修改配置文件

2.1进入zookeeperconf目录:

       拷贝命名zoo_sample.cfg zoo.cfg。我们一般不修改配置文件默认的示例文件,修改赋值其子文件。

       编辑zoo.cfg

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. tickTime=2000  
  2. initLimit=10  
  3. syncLimit=5  
  4. dataDir=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5/zkdata  
  5. dataLogDir=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5/zkdatalog  
  6. clientPort=2181  
  7. server.1=hadoop1:2888:3888  
  8. server.2=hadoop2:2888:3888   
  9. server.3=hadoop3:2888:3888  
  10. server.4=hadoop4:2888:3888  
  11. server.5=hadoop5:2888:3888  

2.2创建zkdatazkdatalog两个文件夹

       在zookeeper的目录中,创建上述两个文件夹。进入zkdata文件夹,创建文件myid,填入1。这里写入的1,是在zoo.cfg文本中的server.1中的1。当我们把所有文件都配置完毕,我们把hadoop1yarn目录复制到其它机器中,我们在修改每台机器中对应的myid文本,hadoop2中的myid写入2。其余节点,安照上面配置,依此写入相应的数字。Zkdatalog文件夹,是为了指定zookeeper产生日志指定相应的路径。

3、添加环境变量

       本机环境变量添是在/etc/profile目录中添加的。

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. export ZOOKEEPER_HOME=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5  
  2. PATH=$ZOOKEEPER_HOME/bin:$PATH  

        添加ZOOKEEPER_HOME/bin目录可以在原有的PATH后面加入

        :$ZOOKEEPER_HOME/bin

        关于环境变量修改/etc目录下的profile文件,也可以在根目录下的.bashrc目录下添加环境变量。这两者有什么区别:.bashrc是对当前目录用户的环境变量,profile文件是对所有用户都开放的目录。当系统加载文件中,先从profile找相应的路劲,如果没有会在.bashrc文件中找对应的环境变量路径。这两者大家稍至了解。

        然后 source /etc/profile

       上面3个步骤就安装zookeeper完毕。然后就是测试zookeeper,这个放到后面等hadoop1上整体配置完毕,scp到其它主机上后,再一起测试。

Hadoop配置

1、下载解压hadoop2.2.0

        路径:http://apache.dataguru.cn/hadoop/common/hadoop-2.2.0/

       解压到:/home/tom/yarn/下。其实这一步应该在解压zookeeper之前。不再多讲。

2、修改配置文件

        这里要修改配置文件一共包括6个,分别是在hadoop-env.shcore-site.xmlhdfs-site.xmlmapred-site.xml、 yarn-site.xmlslaves

        修改文件的目录地址:/home/tom/yarn/hadoop-2.2.0/etc/hadoop/

2.1文件hadoop-env.sh

        添加jdk环境变量:

        export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45

2.2文件coer-site.xml

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1.       
  2.                
  3.              fs.defaultFS      
  4.              hdfs://cluster1      
  5.            
  6.       【这里的值指的是默认的HDFS路径。这里只有一个HDFS集群,在这里指定!该值来自于hdfs-site.xml中的配置】      
  7.                
  8.                hadoop.tmp.dir     
  9.                /home/tom/yarn/yarn_data/tmp     
  10.            
  11.        【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。这里的yarn_data/tmp目录与文件都是自己创建的】      
  12.                
  13.               ha.zookeeper.quorum      
  14.               hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181     
  15.            
  16.        【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】      
  17.        

2.3文件hdfs-site.xml

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. 重点核心文件:  
  2.           
  3.             
  4.              dfs.replication  
  5.              2  
  6.             
  7.           【指定DataNode存储block的副本数量。默认值是3个,我们现在有4个DataNode,该值不大于4即可。】      
  8.             
  9.              dfs.permissions  
  10.              false  
  11.             
  12.             
  13.              dfs.permissions.enabled  
  14.              false  
  15.             
  16.                 
  17.              dfs.nameservices    
  18.              cluster1      
  19.             
  20.          【给hdfs集群起名字】  
  21.             
  22.             dfs.ha.namenodes.cluster1  
  23.             hadoop1,hadoop2  
  24.             
  25.         【指定NameService是cluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可】    
  26.            
  27.             dfs.namenode.rpc-address.cluster1.hadoop1  
  28.             hadoop1:9000  
  29.            
  30.         【指定hadoop101的RPC地址】   
  31.                
  32.            dfs.namenode.http-address.cluster1.hadoop1      
  33.            hadoop1:50070      
  34.            
  35.          【指定hadoop101的http地址】     
  36.                
  37.            dfs.namenode.rpc-address.cluster1.hadoop2      
  38.            hadoop2:9000      
  39.            
  40.                
  41.            dfs.namenode.http-address.cluster1.hadoop2      
  42.            hadoop2:50070     
  43.            
  44.            
  45.            dfs.namenode.servicerpc-address.cluster1.hadoop1  
  46.            hadoop1:53310  
  47.            
  48.            
  49.            dfs.namenode.servicerpc-address.cluster1.hadoop2  
  50.            hadoop2:53310  
  51.            
  52.              
  53.            dfs.ha.automatic-failover.enabled.cluster1    
  54.            true    
  55.               
  56.      【指定cluster1是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】  
  57.          
  58.      
  59.        dfs.namenode.shared.edits.dir       qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/cluster1  
  60.      
  61.     【指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】  
  62.          
  63.  dfs.client.failover.proxy.provider.cluster1       org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider  
  64.          
  65.     【指定cluster1出故障时,哪个实现类负责执行故障切换】  
  66.            
  67.           dfs.journalnode.edits.dir      
  68.           /home/tom/yarn/yarn_data/tmp/journal      
  69.        
  70.       【指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径。tmp路径是自己创建,journal是启动journalnode自动生成】      
  71.              
  72.           dfs.ha.fencing.methods      
  73.           sshfence      
  74.          
  75.       【一旦需要NameNode切换,使用ssh方式进行操作】   
  76.             
  77.            dfs.ha.fencing.ssh.private-key-files      
  78.            /home/tom/.ssh/id_rsa      
  79.          
  80.      【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】  
  81.          
  82.            dfs.ha.fencing.ssh.connect-timeout  
  83.            10000  
  84.          
  85.          
  86.            dfs.namenode.handler.count  
  87.            100  
  88.         
  89.         

2.4文件mapred-site.xml

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1.    
  2.      
  3.        mapreduce.framework.name  
  4.        yarn  
  5.     
  6.    
  7. 【指定运行mapreduce的环境是yarn,与hadoop1不同的地方】  

2.5文件yarn-site.xml

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1.    
  2.          
  3.       yarn.resourcemanager.hostname      
  4.       hadoop1      
  5.      
  6.  【自定义ResourceManager的地址,还是单点】  
  7.      
  8.       yarn.nodemanager.aux-services  
  9.       mapreduce.shuffle  
  10.      
  11.   

2.6文件slaves

      添加:这里指定哪台机器是datanode,这里指定4台机器。你甚至可以把集群所有机器都当做datanode

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. hadoop3  
  2. hadoop4  
  3. hadoop5  
  4. hadoop6  

3、添加环境变量

       环境变量的添加方法大都相同。这里给出我所有环境变量配置,大家可以根据自己的需要参考一下。

       这里我们只要添加HADOOP_HOME环境变量。

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. JAVA_HOME=/usr/lib/jvm/jdk1.7.0_51     
  2. export PATH=$PATH:$JAVA_HOME/bin  
  3. export HBASE_HOME=/home/tom/hadoop-2.2.0/app/hbase-0.94.6-cdh4.4.0  
  4. export HIVE_HOME=/home/tom/hadoop-2.2.0/app/hive-0.12.0/  
  5. export HADOOP_HOME=/home/tom/hadoop-2.2.0  
  6. export PATH=$PATH:$HBASE_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
  7. export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar  
  8. export ZOOKEEPER_HOME=/home/tom/yarn/hadoop-2.2.0/app/zookeeper-3.4.5  
  9. export PATH=$PATH:$ZOOKEEPER_HOME/bin  

4、复制到其它节点

       在hadoop的的根目录下(即:/home/tom目录下):因为我们所有的环境都装载在hadoop1tom目录下。

执行:

[plain] view plaincopyHadoop2.2.0稳定版整合ZooKeeper(1)Hadoop2.2.0稳定版整合ZooKeeper(1)

  1. scp -r yarn hadoop2:/home/tom  
  2. scp -r yarn hadoop3:/home/tom  
  3. scp -r yarn hadoop4:/home/tom  
  4. scp -r yarn hadoop5:/home/tom  
  5. scp -r yarn hadoop6:/home/tom  

注意点:

      1、因为我们是把整个yarn目录复制到其他节点中,zookeeper也包含在内。事先我们定义zookeeper是在1-5台机器上部署。这里我们虽然把zookeeper拷贝到6机器中,但是我们再zookeeper配置文件中没有配置6机器的节点,在启动zookeeper的时候,6机器也不需要启动。

      2、现在要做的是进入zookeeper目录下的zkdata目录,修改myid文件:各个myid内容对应zoo.cfg文件中server对应的编号。

       按照上面的3个大步骤,以及在注释中自己要创建的文件夹,指定相应的路径之后,整体的hadoop环境算是搭建完毕。下面就是等测试。

        看似简单的不能再简单的搭建过程,这是你弄明白之后的事情。在从hadoop12之间的过度,主要的变化是namenodemapreduceyarn架构之间的变化。就在这简单的配置过程中,加上可参考网上众多配置教程,也耽误了太长时间。不是文件难配置,而是在出现问题,不知道怎么解决,就一直卡在那儿。咨询过一些大牛,但是他们也是搪塞,没有给出真正问题的原因。其中有一个问题,在QQ群中,咨询过一个人,从他那边才得到启发,把其中的一个问题给解决掉。这也是我们遇到的问题,没有一个平台,导致在一些别人看似不是问题的问题上耽误太长时间。


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java API 开发中使用 ZooKeeper 进行分布式锁处理 Java API 开发中使用 ZooKeeper 进行分布式锁处理 Jun 17, 2023 pm 10:36 PM

随着现代应用程序的不断发展和对高可用性和并发性的需求日益增长,分布式系统架构变得越来越普遍。在分布式系统中,多个进程或节点同时运行并共同完成任务,进程之间的同步变得尤为重要。由于分布式环境下许多节点可以同时访问共享资源,因此,在分布式系统中,如何处理并发和同步问题成为了一项重要的任务。在此方面,ZooKeeper已经成为了一个非常流行的解决方案。ZooKee

Spring Boot与NoSQL数据库的整合使用 Spring Boot与NoSQL数据库的整合使用 Jun 22, 2023 pm 10:34 PM

随着互联网的发展,大数据分析和实时信息处理成为了企业的一个重要需求。为了满足这样的需求,传统的关系型数据库已经不再满足业务和技术发展的需要。相反,使用NoSQL数据库已经成为了一个重要的选择。在这篇文章中,我们将讨论SpringBoot与NoSQL数据库的整合使用,以实现现代应用程序的开发和部署。什么是NoSQL数据库?NoSQL是notonlySQL

在Beego中使用ZooKeeper和Curator进行分布式协调和管理 在Beego中使用ZooKeeper和Curator进行分布式协调和管理 Jun 22, 2023 pm 09:27 PM

随着互联网的迅速发展,分布式系统已经成为了许多企业和组织中的基础设施之一。而要让一个分布式系统能够正常运行,就需要对其进行协调和管理。在这方面,ZooKeeper和Curator是两个非常值得使用的工具。ZooKeeper是一个非常流行的分布式协调服务,它可以帮助我们在一个集群中协调各个节点之间的状态和数据。Curator则是一个对ZooKeeper进行封装

UniApp实现Vue.js框架的完美整合 UniApp实现Vue.js框架的完美整合 Jul 04, 2023 pm 08:49 PM

UniApp实现Vue.js框架的完美整合引言:UniApp是一种基于Vue.js框架的跨平台开发工具,它能够将一个Vue.js项目编译成多个不同平台的应用程序,如iOS、Android、小程序等。UniApp的优势在于能够让开发者只编写一套代码,就能够同时适配多个平台,加快开发效率并降低开发成本。下面将介绍如何使用UniApp实现Vue.js框架的完美整合

Vue3相较于Vue2的变化:更强大的网络请求库整合 Vue3相较于Vue2的变化:更强大的网络请求库整合 Jul 08, 2023 pm 08:34 PM

Vue3相较于Vue2的变化:更强大的网络请求库整合随着Vue.js的持续发展和更新,Vue3作为Vue.js的下一个版本,带来了一些令人兴奋的变化和改进。其中一个最显著的变化就是更强大的网络请求库整合。在Vue2中,我们通常使用如axios等第三方库来进行网络请求,而在Vue3中,Vue开发团队已经提供了一个内置的网络请求库,它为我们提供了更直观和灵活的方

分布式锁用 Redis 还是 Zookeeper? 分布式锁用 Redis 还是 Zookeeper? Aug 22, 2023 pm 03:48 PM

分布式锁的实现方式通常有:数据库、缓存(比如:Redis)、Zookeeper、etcd,实际开发中,使用的最多还是Redis和Zookeeper,所以,本文就只聊这两种。

php如何使用PHP的Zookeeper扩展? php如何使用PHP的Zookeeper扩展? Jun 02, 2023 pm 09:01 PM

PHP是一种非常流行的编程语言,广泛应用于Web应用程序和服务器端开发。Zookeeper是一个分布式的协调服务,用于管理、协调和监控分布式应用程序和服务。在PHP应用程序中使用Zookeeper可以提高应用程序的性能和可靠性。本文将介绍如何使用PHP的Zookeeper扩展。一、安装Zookeeper扩展使用Zookeeper扩展需要安装Zookeeper

PHPcms与其他系统整合的实用技巧 PHPcms与其他系统整合的实用技巧 Mar 15, 2024 am 08:18 AM

PHPcms与其他系统整合的实用技巧随着互联网技术的不断发展,网站开发领域也变得愈加多样化和复杂化。在实际的项目中,我们常常会面对不同系统之间需要进行整合的情况,这就需要我们具备一定的技巧和经验来解决这些问题。本文将针对PHPcms系统与其他系统整合的情况,介绍一些实用的技巧和具体的代码示例,帮助开发者更好地应对挑战。一、整合基本原理在进行系统整合时,首先需

See all articles