本节书摘来自华章出版社《HBase企业应用开发实战》一 书中的第2章,第2.2节,作者:马延辉 孟鑫 李立松 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
HBase有两种运行模式:单机模式和分布式模式。在默认情况下HBase运行在单机模式下,如果要运行分布式模式的HBase,需要编辑安装目录下conf文件夹中相关的配置文件。不管运行在什么模式下,都需要编辑安装包的conf目录下的hbase-env.sh文件来告知HBase Java的安装路径。在这个文件中还可以设置HBase的运行环境,诸如Heap Size和其他有关JVM的选项,还有日志文件保存目录、进程优先级等。最重要的是设置JAVA_HOME指向Java安装的路径,在该文件中搜索JAVA_HOME,找到如下一行:
# export JAVA_HOME=/usr/java/jdk1.6.0/去掉前面的#注释,将JAVA_HOME配置为实际的Java安装路径。
这是HBase默认的运行模式,在单机模式中,HBase使用本地文件系统,而不是HDFS,所有的服务和ZooKeeper都运行在一个JVM中。ZooKeeper监听一个端口,这样客户端就可以连接HBase了。1.?配置JDK需要安装64位版本的JDK,推荐Oracle公司的发行版,可以在www.oracle.com/us/downloads下载并安装,同时在环境变量中设置JAVA_HOME和Classpath。2.?HBase安装在Apache的网站上下载一个稳定版本的安装包,可以在这里找到www.apache.org/dyn/closer.cgi/hbase/,本书使用的版本是0.94.18。在待安装的目录下解压缩安装包:tar zxf hbase-0.94.18.tar.gz除了在安装包的conf目录下修改hbase-env.sh的JAVA_HOME外,还需要修改该目录下的hbase-site.xml文件,示例如下:
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hbase.rootdir</name> <value>file:///DIRECTORY/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/DIRECTORY/zookeeper</value> </property> </configuration>其中:hbase.rootdir代表HBase数据存放的位置,单机模式下存储到本地目录。hbase.zookeeper.property.dataDir代表ZooKeeper数据存放的位置。3.?启动HBase运行如下脚本启动HBase:bin/start-hbase.sh启动成功后通过JPS命令应该可以看到如下信息:4496 HMaster通过如下命令可以连接到HBase表示安装成功:bin/hbase shell连接成功后显示:HBase Shell; enter 'help' for list of supported commands.Type "exit" to leave the HBase ShellVersion 0.94.18, r1577788, Sat Mar 15 04:46:47 UTC 2014
hbase(main):001:0>
HBase分布式模式有两种。伪分布式模式是把所有进程运行在一台机器上,但不是一个JVM上;而完全分布式模式就是把整个服务分布在各个节点上。无论采用哪种分布式模式,都需要使用HDFS。在操作HBase之前,要确认HDFS可以正常运行。在安装HBase之后,需要确认伪分布式模式或完全分布式模式的配置是否正确,这两种模式可以使用相同的验证脚本。1.?伪分布式模式伪分布式模式是一个相对简单的分布式模式,是用于测试的。不能把这个模式用于生产环节,也不能用于测试性能。确认HDFS安装成功之后,就可以先编辑安装包conf目录下的hbase-site.xml。在这个文件中可以加入自己的配置,这个配置会覆盖HBase默认配置(默认配置在hbase-default.xml中)。运行HBase需要设置hbase.rootdir属性。该属性是指HBase在HDFS中使用的目录的位置。例如,HBase根目录是/hbase,NameNode监听locahost的9000端口,只有一份数据副本(HDFS默认是3份副本)。可以在hbase-site.xml写上如下内容:
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>由HBase自己创建hbase.rootdir。上面HDFS绑定到localhost,也就是说除了本机,其他机器连不上HBase。所以需要将localhost设置成主机名,其他机器才能访问它。(1)启动HBase可以使用如下命令启动HBase:bin/start-hbase.sh也可以在同一服务器启动额外备份HMaster:bin/local-master-backup.sh start 1“1”表示使用端口60001和60011,该备份的HMaster及其日志文件放在logs/hbase-${USER}-1-master-${HOSTNAME}.log中。启动多个备份HMaster:bin/local-master-backup.sh start 2 3可以启动9个备份HMaster,最多可以有10个HMaster。如果要启动更多RegionServer,可以执行如下命令:bin/local-regionservers.sh start 1“1”表示使用端口60201和60301,日志文件存放在logs/hbase-${USER}-1-regionserver$-{HOSTNAME}.log中。在刚运行的RegionServer上增加4个额外RegionServer,最多可以支持100个。bin/local-regionservers.sh start 2 3 4 5(2)停止HBase假设想停止备份HMaster 1,运行如下命令:cat /${PID_DIR}/hbase-${USER}-1-master.pid |xargs kill -9停止RegionServer,可以运行如下命令:bin/local-regionservers.sh stop 12.?分布式模式(1)安装ZooKeeper下载stable版本的ZooKeeper,可以在Apache官方网站下载,地址是http://www.apache. org/dyn/closer.cgi/zookeeper/,本书使用的是3.4.5版本。解压缩安装包:tar zxf zookeeper-3.4.5.tar.gz将安装包conf目录下的zoo_sample.cfg文件复制一份,命名为zoo.cfg。修改zoo.cfg配置文件,示例如下:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/home/hadoop/zookeeper-3.4.5/zookeeperdir/zookeeper-data dataLogDir=/home/hadoop/zookeeper-3.4.5/zookeeperdir/logs # the port at which the clients will connect clientPort=2181 # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 # 2888,3888 are election port server.1=host1:2888:3888其中,2888是ZooKeeper服务之间通信的端口,而3888是ZooKeeper与其他应用程序通信的端口。initLimit:这个配置项用来配置ZooKeeper接收客户端(这里所说的客户端不是用户连接ZooKeeper服务器的客户端,而是ZooKeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。这里设置为10,说明如果超过10个心跳时间(也就是10倍tickTime)长度后ZooKeeper服务器还没有收到客户端的返回信息,就表明这个客户端连接失败。总的时间长度就是10×2000=20(s)。syncLimit:这个配置项标识Leader与Follower之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime的时间长度,这里设置为5,表明总的时间长度就是5×2000=10(s)。server.A=B:C:D:其中A是一个数字,表示这是第几号服务器;B是这台服务器的IP地址;C表示的是这台服务器与集群中的Leader服务器交换信息的端口;D表示的是万一集群中的Leader服务器死机了,需要一个端口来重新进行选举,选出一个新的Leader服务器,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是一样的,因此不同的ZooKeeper实例通信端口不能一样,要为它们分配不同的端口。创建dataDir参数指定的目录(这里指的是/home/hadoop/zookeeper-3.4.5/zookeeperdir/zookeeper-data),并在此目录下创建文件,命名为myid。编辑myid文件,并在对应的主机名的机器上输入对应的编号。例如,在host1上,myid文件内容就是1。由于本次只在单点上进行安装配置,所以只有一个server.1。若还有其他服务器,比如主机名为host2,则在zoo.cfg文件中还需加入server.2=host2:2888:3888,那么myid文件在host2服务器上的内容就是2。至此,如果是多服务器配置,只需要将zookeeper-3.4.5目录复制到其他服务器,然后按照上述方法修改myid。设置环境变量:export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.5PATH=$ZOOKEEPER_HOME/bin:$PATHexport PATH(2)启动并测试ZooKeeper在所有服务器中执行:zkServer.sh start使用jps命令查看进程:19361 QuorumPeerMain其中,QuorumPeerMain是ZooKeeper进程,说明启动正常。查看服务状态命令:zkServer.sh status打印输出结果:JMX enabled by defaultUsing config: /home/hadoop/zookeeper-3.4.5/bin/../conf/zoo.cfgMode: standalone启动客户端脚本:zkCli.sh -server host1:2181停止ZooKeeper进程:zkServer.sh stop(3)配置HBase一个分布式运行的Hbase依赖一个ZooKeeper集群。所有的节点和客户端都必须能够访问ZooKeeper。在默认情况下,HBase会管理一个ZooKeeper集群。这个集群会随着HBase的启动而启动。当然,也可以自己管理一个ZooKeeper集群,需要修改conf/hbase-env.sh中的HBASE_MANAGES_ZK来切换。HBASE_MANAGES_ZK的默认值是true,作用是让HBase启动的同时也启动ZooKeeper。让HBase使用一个现有的不被HBase托管的ZooKeeper集群,需要设置conf/hbase-env.sh文件中的HBASE_MANAGES_ZK属性为false。由于本书中使用HBase管理ZooKeeper,因此hbase-env.sh中配置如下:export HBASE_MANAGES_ZK=true(4)配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://host1:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>host1,host2,host3</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/zookeeperdata</value> </property> </configuration>hbase.rootdir:这个目录是RegionServer的共享目录,用来持久化HBase。URL需要是“完全正确”的,还要包含文件系统的scheme。例如,“/hbase”表示HBase在HDFS中占用的实际存储目录,HDFS的NamenoNde运行在主机名为host1的9000端口,则hbase.rootdir的设置应为hdfs://host1:9000/hbase。在默认情况下HBase是写到/tmp中的。不修改这个配置,数据会在重启的时候丢失。默认为file:///tmp/hbase-${user.name}/hbase。hbase.cluster.distributed:HBase的运行模式。为false表示单机模式,为true表示分布式模式。若为false,HBase和ZooKeeper会运行在同一个JVM中。默认值是false。当HBase管理ZooKeeper的时候,可以通过修改zoo.cfg来配置ZooKeeper。一个更加简单的方法是在conf/hbase-site.xml中修改ZooKeeper的配置。ZooKeeper的配置作为property写在hbase-site.xml中。对于ZooKeeper的配置,至少要在hbase-site.xml中列出全部的ZooKeeper的主机,具体的参数是hbase.zookeeper.quorum,该属性的默认值是localhost,这个值对于分布式应用显然是不可用的(远程连接无法使用)。ZooKeeper集群的地址列表用逗号分隔,例如:“host1,host2,host3”。默认是localhost,是供伪分布式模式使用的,修改才能在完全分布式模式下使用。如果在hbase-env.sh中设置HBASE_MANAGES_ZK为true,这些ZooKeeper节点就会和Hbase一起启动。hbase.zookeeper.property.clientPort:表示客户端连接ZooKeeper的端口。运行只有1台主机的ZooKeeper也是可以的,但是在生产环境中,最好部署3、5、7个节点。部署得越多,可靠性就越高,当然只能部署奇数个,偶数个是不可以的。需要分配给每个ZooKeeper 1GB左右的内存,有可能的话最好分配独立的磁盘。(独立磁盘可以确保ZooKeeper是高性能的。)如果集群负载很重,不要把ZooKeeper和RegionServer运行在同一台机器上。base.zookeeper.property.dataDir:这个参数用于设置ZooKeeper快照的存储位置。默认值是/tmp,在操作重启的时候该目录会被清空,应该修改默认值到其他目录,可以修改到/home/hadoop/zookeeperdata(这个路径需要运行HBase的用户拥有读写操作权限)。对于独立的ZooKeeper,要指明ZooKeeper的主机和端口,可以在hbase-site.xml中设置,也可以在HBase的CLASSPATH下面加一个zoo.cfg配置文件。HBase会优先加载zoo.cfg中的配置,覆盖hbase-site.xml中的。(5)配置regionservers文件在完全分布式模式下还需要修改安装包的conf目录下的regionservers文件。在这里列出了希望运行的全部RegionServer,一行写一个主机名(就像Hadoop中的slaves一样)。这里列出的Server会随着集群的启动而启动,集群的停止而停止。regionservers文件示例:host1host2(6)替换Hadoop的jar包复制Hadoop安装路径的lib目录下的hadoop-core-*.jar包到HBase的lib目录下覆盖HBase自带的Hadoop jar包,否则HBase集群在运行时可能出现一些难以解决的问题。(7)运行HBase当ZooKeeper由HBase托管的时候,Zookeeper集群的启动是Hbase启动脚本的一部分。首先确认HDFS是运行着的,然后用如下命令启动HBase:bin/start-hbase.sh这个脚本在HBASE_HOME的bin目录中。现在HBase已经启动了。HBase把log记在logs子目录中,当Hbase启动出问题的时候,可以查看log文件。HBase有一个Web界面,上面会列出重要的属性。该Web应用默认启动在HBase HMaster的60010端口上(HBase的RegionServer会默认绑定60020端口,在端口60030上有一个展示信息的界面)。如果Master运行在host1,端口是默认的,可以在浏览器输入http://host1:60010后看到主界面。一旦HBase启动,可以使用命令创建表,插入数据,扫描数据表,还有禁用这个表,最后把它删掉。可以通过如下脚本停止HBase集群:$./bin/stop-hbase.sh停止操作需要一些时间,而且集群越大,停的时间可能会越长。如果正在运行一个分布式的操作,要确认在Hbase彻底停止之前,Hadoop不能停止。可以使用如下命令单独启动或停止ZooKeeper而不启动Hbase:${HBASE_HOME}/bin/hbase-daemons.sh {start,stop} zookeeper(8)验证安装可以使用jps命令查看进程,在HMaster上:8371 HMaster8314 HQuorumPeer在RegionServer节点上:4256 HRegionServer4594 HQuorumPeer
相关资源:敏捷开发V1.0.pptx