安装单机habase地报错,好像是zookeeper问题,单机还需要zookeeper么

  • 每台机器的内存为8GB确保每台机器都有 8GB 以上内存,因为 Hbase地 对配置的要求很高如果低于 8GB,有可能会卡到出现各种超时故障。
  • 每台机器的硬盘为 60GB只要保证有一個分区达到30GB以上就可以了,到时候用这个分区来存放Hadoop和Hbase地的数据和日志

配置 /etc/hosts 文件,将所有机器的IP地址和机器名都配置到hosts文件里面去这样可以通过服务器名来SSH或者访问机器,而不用直接输入IP地址:

最后重启一下就会生效了。

首先确保五台机器の间有一个用户可以免密登陆到其他的机器上假设你已经装完了Hadoop,那么你应该已经有一个用户可以用于免密登陆的否则,估计你也装鈈成Hadoop如果没有这样一个用户的话,你需要先配置它

  • 可以通过sudo命令来以root权限运行命令。
  • 可以不加密码直接用SSH在别的机器上执行命令。
  • 所有机器上都要有这个用户名字和权限完全相同。
  • 该用户最好不要是root当然用root也可以,只是生产环境没人这个干太危险了!
  • 如果你不知道怎么取名,就跟我一样用 hadoop 这个用户名吧

具体如何创建该用户以及配置上SSH,在不同的操作系统中有不同的配置
这里我使用的用户名昰 hadoop。我的操作系统是 CentOS 6.5以下是我的具体操作步骤:

然后用vi编辑器打开sudoers文件,在里面添加一句话:

采用默认配置即默认目录和空密码。

记得一定要回答yes

(1) 确认是否存在 ~/.ssh 目录,如果不存在就创建一个
给.ssh文件夹赋予700权限:

会发现你已经可以直接登陆到 nn02 上,而不需要輸入用户名和密码
之后,把这个步骤在其他机器上也做一遍确保机器之间都可以互相SSH,包括自己都可以SSH自己比较简单的方式就是把5囼机器的id_rsa.pub文件放到一起打个包,然后传输到所有机器上最后用 cat 追加进 authorized_keys 文件里面去。

做完这些后请仔仔细细地把所有机器都测试一遍。

友情提示:安装 Hadoop 或者 Hbase地 这种分布式系统最好使用一些执行命令地小工具比如 pssh 或者 dsh 就很不错,否则真的是复制粘贴到令人疯狂

下载完成后查看一下你的系统分区情况。以下是我的系统分区情况:

现在我们地磁盘地最大分区是 /data次大分区是 /,我們要把 Hadoop 的数据文件夹放到 /data 下面程序文件夹放到 /usr/local 下面。

解释一下数据文件夹和程序文件夹:

  • 现在我们下载的是 Hadoop 的发布包Hadoop 不需要安装,只需要解压运行就可以了你可以把这个发布包看成是一个绿色软件。运行的模式类似 Tomcat 或者 Maven即运行文件夹只存放运行的程序,而具体存放數据的目录一般都设定为另外一个文件夹跟程序文件夹分离。

再将 hadoop 文件夹重命名一下:

接着确保 hadoop 文件夹的权限是我们刚刚创建的 hadoop 用户可鉯操作的:

这些环境变量是一定要设置的不然Hadoop会用默认的路径,造成一系列不必要的问题
切换到 hadoop 用户,并编辑 ~/.bashrc 文件添加以下环境变量:

  • HADOOP_HOME 就是设置为我们刚刚移动过来的hadoop程序文件夹的路径。

记得写完之后使用 source 命令加载 ~/.bashrc 文件让配置立即生效:

接下来,记得创建日志文件夹并分配正确的权限,切换到 root 用户然后运行:

这个文件是配置 Hadoop的Web属性的文件。我们需要再节点中增加配置項添加后的节点是这样的:

这个节点负责配置 HDFS 相关的属性。我们需要在 节点中增加配置项添加后的 节点是这样的:

  • (1) dfs.replication 是用于设置数据备份的,我们只是学习所以暂时设置为1.实际开发中千万不要设置成1,因为Hadoop的数据很容易坏坏了不是问题,只要备份就不算真的坏Hadoop会自動使用备份;但是如果没有备份,就比较麻烦了

其实为 namenode 节点设置 datanode 的存储目录的确没什么意义。不过在所有节点上用同一份配置文件是 Hadoop 的官方要求所以哪怕是 namenode 节点的配置文件,也包含有 datanode 的存储目录这样做的理由是:

  • (1) 实际生产环境中有可能有成百上千台机器,为不同角色嘚机器设定不同的配置文件实在太麻烦干脆就都用同一份文件,各个角色分别读取属于自己的配置项就好了
  • (2) 配置文件经常需要更新,鼡同一份文件的好处就是当配置更新的时候,全部批量覆盖一边就好了简单粗暴。

配置完记得去创建这几个文件夹我用 root 权限建立这些文件夹并赋权限:

集群(严格来说都不算是个集群,不过姑且这么称呼它吧)这就是单机模式。这样做的好处有:

  • 你可以验证你的配置是否正确
  • 通过前面辛苦的配置你可以看到一点成果。
  • 可以先熟悉以下 Hadoop 的一些基础界面和操作为后面更复杂的配置打基础。

启动的时候注意看有没有什么异常启动完记得看看启动日志有没有什么异常。
通过 tail 命令查看启动日志:

第一件偠做的事是把我们在单机模式上配置好的文件夹复制到其他机器上把环境变量再配置一遍。

(2) 在所有机器上切换到 hadoop 用户然后在 ~/.bashrc 內增加以下环境变量:

不要忘记用source命令让这些环境变量生效。

(3) 在所有机器上建立必要的文件夹

(4) 在所有机器上格式化 namenode (仅仅用来调试,不玳表这些机器都要用作 namenode)

(5) 在所有机器上用 start-hdfs.sh 启动单机模式,通过日志和浏览器访问 :50070 来确保所有机器上的配置都是正确的

单机模式都正常後,用 stop-dfs.sh 来停止所有节点的单机模式然后把所有节点上的 core-site.xml 内的 fs.defaultFS 值都设置成 hdfs://nn01:8020 ,因为我们接下来要把所有的节点按照不同的角色启动起来并連接起来。

我们要清除单机模式留下来的数据在保证所有节点都停止后,在所有节点上清空数据文件夹

4.2.2 连接节点成為集群

终于到了要连接起一个集群的时候了!请进行以下步骤:

如果想停止的话,把上面这条命令的 start 换成 stop 就可以了
用 jps 命令(这个命令用於查看当前运行的 hadoop 进程)执行如下:

(2) nn02(第二个 namenode)不需要启动,等后面配置 HA 的时候在用它现在暂时用不上。

如果想停止的话把上面这条命令的 start 换成 stop 就可以了。

ZooKeeper 可以为分布式应用提供一致性服务所提供的功能包括:配置维护、域名服务、分布式服务、组服务等。

ZooKeeper 最大的功能之一是知道某个节点是否宕机了那么 ZooKeeper 是如何知道某个节点宕机了呢?

答案是每个机器在 ZooKeeper 中都有一个会话(Session),如果某个机器宕机了这个会话(Session)就会过期,与此同时ZooKeeper 就会知道该节点已宕机。

接下来我们具体来安装一下

(1) ZooKeeper的节点总数最好是奇数,这样有利于仲裁耦数个节点,如果遇上五五开就判断不出结果了正好我的节点是5个,所以我就把5台机器都装上 ZooKeeper 先创建 zookeeper 用户:

不要网易使用 root 用户去建立這些文件夹,并分配正确的权限:

(5) 在每一台机器上的 dataDir (我配置的是 /data/zookeeper )目录下手动建立一个文件命名为 myid,并写入这台服务器的 ZooKeeper id(是集群模式才需要的文件)这个 id 数字可以自己随便写,取值范围是 1 ~ 255 .在这里我给每一台机器赋上 id 如图所示:

在别的机器上只需要把1换成具体的id就恏了。

ZooKeeper 会自动根据这里的配置把所有的节点连接成一个集群
接着,把所有其他节点都装上 ZooKeeper 并配置好最后一并启动起来。

(8) 检查一下日志再用 jps 看看进程有没有启动起来。

一切正常就可以继续进行下一步了

这个步骤是可选的,可以不做但是添加自启动脚本是一个好习惯,免得重启之后完全忘记之前是怎么启动这些服务的了我经常重启服务器,如果不设定自启动脚本那么,每次都需要把启动服务的那些命令都敲一遍非常费时。

注:下面的脚本只适用于CentOS及一下版本

保存之后给他一个可执行权限:

你可以用service命令来测试一下这个服务是否囸常(要在root用户下才能执行 service):

使用 chkconfig 来添加服务到自启动:

现在你可以重启一下机器测试这个自启动脚本是否生效。

HA 的作用是保证茬一个 namenode 挂掉的时候另外一个 namenode 可以立即启动来替代这个挂掉的 namenode。这样就不会发生单点故障问题实现原理简单来说就是:

  • 同时启动两台 namenode,┅台是 active 状态(活跃状态真正在工作的),另外一台是 standby 状态(它唯一要做的事情就是把 active 状态的 namenode 做过的所有事情同步过来方便在第一台 namenode 故障的时候可以无缝切换)。
  • 设想一下既然是故障恢复方案,总得有那么一个机制是用来检测故障的比如做系统心跳之类的,是吧在 HA 方案中,Hadoop 集群利用 ZooKeeper 来做节点维护具体的就是节点的故障检测、状态标定等。这些杂事要自己来写也是很麻烦的所以 Hadoop 九八这些事情交给叻 ZooKeeper。当 ZooKeeper 检测到 active 节点已经宕机就会启动切换机制。
  • 之前提到的 standby 状态的 namenode 所做的唯一的事情就是同步 active 状态节点的数据那么需要一个数据同步嘚机制,是吧这块无论让那个 namenode 来做都不是很合适。所以在这里又引入了一种新的节点,叫做 journalnode这种节点专门用于同步 namenode 的所有操作。standby 节點就是通过 journalnode 集群来同步

有时候你会发现 namenode 自己停掉了(就是自杀了)看日志会发现它留下了这样一行遗言:

遇到这种情况,如果你的机器配置不是很好(生产环境的机器CPU建议值是8核~12核内存是8GB~16GB,而测试的机器通常来说没有那么好)这时你可以在 hdfs-site.xml 里面添加 dfs.qjournal.start-segment.timeout.ms 的配置,来增加 journal 集群之间通信的超时时间:

但是在生产环境下,凡是这些关于超时的参数嗾使在可接受范围内越小越好因为集群越小对于故障的反应越忣时,你的网站客户感受到故障的时间也就越短

failover 可以手动操作,也可以配置成自动之所以叫 HighAvailable,是相对于单点故障而言当系統只有一台 namenode,而这台 namenode 正好宕掉的话整个集群就瘫痪了,这就是所谓的单点故障问题
而配置上自动failover之后,当其中一台宕掉了另一台会迅速地自动进入active状态,开始工作

我们先从手动failover开始。
在自动failover之前先做好手动failover配置。请先停止之前地所有 Hadoop 进程再进行下面的步骤。

再所有节点上修改 $HADOOP_PREFIX/etc/hadoop/hdfs-site.xml 文件(为了简化操作你可以在一台机器上做然后把文件批量推送到其他服务器上,可以用类似 pscp 这样的工具)

现在有两个 namenode 了你不能写死用哪个 namenode ,因为它们会互相切换所以就有了一个新的概念,就是——服务id:

”不要把鸡蛋都放到一个篮子里“工作中如果条件允许,请单独分配几台机器来搭建 journalnode 集群(ZooKeeper集群可以安装到journal集群的机器上来节省成本)namenode如果宕掉了,往往不只是namenode本身的问题有可能那台服务器有问题,比如网络不通或者硬盘坏了,这样一来这台服务器上别的服务也会有问题。如果把 journalnode 配置到

dfs客户端的作用是判断哪个 namenode 是活跃的我们现在偠配置 dfs 客户端的 Java 类名。
目前就一个实现除非你要自己定义一个类,否则照着这个配置写就对了:

杀掉死掉的节点是为叻让活的节点活得更好。当需要”故障切换“(failover)发生的时候被怕段为故障的 namenode 有可能停止下来,这样就有可能引发”脑裂现象“为了防止这种情况,需要配置一个终极解决方案比如直接SSH过去kill掉它!我们配置成SSH手段就好了!

此处,private-key-files 配置成之前我们配置的SSH免密登陆所生成嘚id_rsa文件因为Hadoop到时候会用这个文件来免密登陆到另外一个namenode上去kill掉进程。

这个地方的8020端口配置移到hdfs-site.xml里面了namenode对外开放的URI不再需要指定单独的機器和端口了,因为两个 namenode 已经组成了一个服务集群对外只需要暴露服务ID(nameservice ID)就可以了。

  • 给我一个id我还是不知道怎么连接上去,因为计算机网络的本质还是需要一个ip和端口啊!

答案是各个客户端都是拿这个服务ID(nameservice ID)去ZooKeeper集群中查出活跃状态(active)的namenode的ip和端口在进行连接的。

啟动 journalnode你想启动几个 journalnode 就启动几个,在这里除了数量必须是奇数的以外没有别的要求我用作例子的机器有5台,所以我就在5台上都启动了 journalnode啟动的命令如下:

同样地,不要敲完命令就不管了下面几个事情还是要做地。

(2) 如果没有就看看journalNode地日志解决一下错误。启动日志在你启動后会有一句话输出比如:

(3) 如果想停止,就把启动命令中地 start 换成 stop 就行了

接下来,初始化第二个 namenode这样做地目的是清空第二个 namenode,让它完铨做好作为备份机的准备我的第二个namenode是nn02,所以我在nn02上执行:

然后初始化journalnode中的记录在第一台namenode上(nn01)执行一下命令:

之后,你可以打开浏覽器访问这两个 namenode 的 50070 管理页面你会发现这两个namenode的名字后面都出现了一个括号来显示它们的状态,现在他们都处于备份(standby)状态这是因为茬HA中的namenode启动的时候都是standby状态,只有执行了手动切换或者自动切换后才会变成active状态

这个命令的意思是强制把nn02切换为standby状态(现在nn02已经是standby状态叻,所以不会对nn02有什么影响)把nn01切换到active状态。这个命令如果执行成功的话会打印出一句话:

这个时候我们再去看nn01的控制台,我们就可鉯看到nn01的状态已经被成功地切换成active了。

Kill掉非正常的namenode的目的就是防止脑裂现象因为zkcf判断namenode是否宕机是基于超时机制的。如果当时網络状况不好或者机器负载过重造成响应很慢,也有可能被判断为宕机一旦判断为该机为宕机,zkcf会立即将另外一个standby的namenode设置为active状态此時由于之前那台active的namenode有可能进程还活着,客户端还在往里面写数据如果不将其kill掉,等这台被误认为是已经宕机的namenode恢复了工作后就会造成系统中同时有两个namenode在工作,数据就混乱了这就是脑裂现象。

zkfc好行不是那么稳定
在使用skfc的时候你会发现在硬件条件不那么好的情况下,zkfc鈈稳定

按以下步骤配置自动failover:

使用Hadoop自带的hdfs工具初始化ZooKeeper集群。随便在一台只要能访问到ZooKeeper集群的机器上这里我在nn01(我的第一个namenode)仩操作初始化ZooKeeper的动作。执行以下命令:

可以看到多出来一个 hadoop-ha 目录说明初始化正确。

再两台机器上都停止 namenode:

启动之后通过浏览器访问 :50070 控制囼可以看到两台 namenode 目前都处于 standby 状态。这回我们不使用手动failover我们使用zkfc的自动failover功能让他们中的其中一台namenode自动切换为active。

Hadoop有一个akfc进程这个进程鼡户跟ZooKeeper通信,然后根据通信的结果来进行故障切换(failover)所以,实际上是这个进程再帮我做自动的failover首先,再两个 namenode 上都执行以下命令:

用jps查看进程是否启动了:

然后在进行接下来的操作之前请先关闭整个Hadoop集群。

(7) 由于做HA的过程中 namenode 被格式化了所以我们需要把之前的 datanode 数据文件夾清空,以避免 datanode 由于找不到自己的数据块在 namnode 中的注册信息而连接不上 namenode 的情况发生:

}

ZooKeeper是一个开源的分布式协调服务甴雅虎创建,是Google Chubby的开源实现分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

ZooKeeper是一个开源的分布式协调服务由雅虎创建,是Google Chubby的开源实现分布式应用程序可以基于ZooKeeper实现诸如数據发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。

本节将介绍ZooKeeper的几个核心概念这些概念贯穿于之后对ZooKeeper更深入的讲解,因此有必要预先了解这些概念

}

发布时间: 浏览量:4950 下载量:674 文檔编号:EDOC

华为采用机器翻译与人工审校相结合的方式将此文档翻译成不同语言希望能帮助您更容易理解此文档的内容。 请注意:即使是朂好的机器翻译其准确度也不及专业翻译人员的水平。 华为对于翻译的准确性不承担任何责任并建议您参考英文文档(已提供链接)。

文档添加到圈子操作成功

}

我要回帖

更多关于 base地 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信