hbase使用随记1
hbase集群安装
默认前提是安装完hadoop 0.20.2版本:(安装流程可参考hadoop使用随记相关文章)
?
1、下载最新版本hbase 0.90.4 解压hbase到hadoop用户目录下。tar -zxvf hbase-0.20.5.tar.gz
?
2、修改hbase 0.90.4/conf/hbase-env.sh文件。指定本地的JDK安装路径:
??? (1)export JAVA_HOME=/home/tbs/java/java6 (同hadoop安装过程中的配置)
??? (2)export HBASE_MANAGES_ZK=true(由于hbase0.90.4版本自带了zookeeper,设置此项的为true的目的是让使用hbase自带的zookeeper,hbasestart的时候会先启动zookeeper,然后再启动regionserver,如果不想用hbase自带的zookeeper而自己安装管理zookeeper,可以将此项的值设为false)
?
??? (3)export HBASE_HOME=/home/hadoop/HadoopInstall/hbase-0.90.4(此项为可选项)
?
??? (4)export HADOOP_HOME=/home/hadoop/HadoopInstall/hadoop-0.20.2(此项为可选项)
?
3、修改hbase 0.90.4/conf/hbase-site.xml。内容如下:
?<configuration>
? <property>
??? <name>hbase.rootdir</name>
??? <value>hdfs://dev66:9000/hbase</value>?<!--说明:红色部分为hadoop master的主机名,在这里必须使用hadoop master的主机名而不是ip地址,如果是ip地址,hbase master启动的时候会报Wrong FS错误,具体原因会在下文说明-->
? </property>
??<property>
??? <name>hbase.cluster.distributed</name><!--说明:将此项值设置为true,是告诉hbase采用完全分布模式-->
??? <value>true</value>
? </property>
? <property>???
??? <name>hbase.zookeeper.quorum</name><!--说明:此项设置了管理hbase的zookeeper集群节点的ip地址或主机名或dns映射名,建议为奇数个数-->?
??? <value>192.168.38.66,192.168.38.60,192.168.38.9</value>
? </property>
? <property>???
??? <name>hbase.zookeeper.property.dataDir</name>??<!--说明:使用hbase自带zookeeper的时候,此项设置zookeeper文件存放的地址,注:没有存放在hdfs系统里边-->??
??? <value>/home/hadoop/zookeeper</value>????
??</property>
</configuration>
?
4、修改hbase0.90.4/conf/regionservers文件(同hadoop的slaves文件内容相同),内容如下:(可以是ip地址或主机名或dns映射名)
192.168.38.9
192.168.38.60
192.168.38.73
?
5、参照hadoop安装流程,将配置好的hbase0.90.4目录copy到集群中的所有机器上
?
6、此部分内容最为关键,如下:
??? 如果按照hadoop安装方式,此时就可以在master机器上使用命令/hbase0.90.4/bin/start-hbase.sh启动hbase集群了(该命令会首先在上述hbase-site.xml文件配置的ip地址机器上启动zookeeper集群,然后在本机启动HMaster,最后在上述regionservers文件配置的ip地址机器上分别启动regionserver),但是由于在安装hadoop的时候偷了个懒,因为只是4台机器做集群,在hadoop中就直接使用了ip地址来配置master和slave,结果导致了hbase的regionserver无法找到hbase的master,原因是hbase的master在启动的时候向zookeeper报告的是自己的hostname(linux上使用hostname命令打印出来的名字),regionserver启动后需要与master连通做通讯,于是regionserver在zookeeper上查找master的地址,查到的是master的主机名而不是master的ip地址,因此就出现了regionserver找不到master机器的情况(dns查找不到master主机名错误,regionserver之间相互通信的时候也是同样的报错,因为regionserver在zookeeper上报告的也是自己的主机名)
因此,解决办法如下:编辑每台机器的/etc/hosts文件,将主机名和ip地址进行映射:(注:安装suse的时候主机名没有设置,默认为localhost,因此在映射之前还要修改localhost主机名的机器,编辑/etc/HOSTNAME,将主机名修改为非localhost,然后使用命令hostname -F /etc/HOSTNAME即可,root用户)
映射文件示例如下:
#
# hosts???????? This file describes a number of hostname-to-address
#?????????????? mappings for the TCP/IP subsystem.? It is mostly
#?????????????? used at boot time, when no name servers are running.
#?????????????? On small systems, this file can be used instead of a
#?????????????? "named" name server.
# Syntax:
#???
# IP-Address? Full-Qualified-Hostname? Short-Hostname
#
127.0.0.1?????? localhost
192.168.38.66?? dev66
192.168.38.9??? dev9
192.168.38.73?? pwoneserverone
192.168.38.60?? testdb60
?
集群中的每台机器的/etc/hosts文件相关映射都相同,至此,就可以在此时就可以在master机器上使用命令/hbase0.90.4/bin/start-hbase.sh启动hbase集群了
(可以想象在几千台机器上都采用上述方法将会是多大的工作量,这就是为什么hbase安装文档上说的有必要安装的DNS,如果机器很多,则无需采用上述麻烦的方法,在某台机器上安装一个DNS,仅在此机器上配置主机名和ip地址的映射就可以了,然后在每台机器上通过hbase-site.xml文件中通过以下几个配置参数来获取DNS Server地址:
hbase.master.dns.nameserver
hbase.master.dns.interface
hbase.zookeeper.dns.interface
hbase.zookeeper.dns.nameserver
hbase.regionserver.dns.interface
hbase.regionserver.dns.nameserver)