开动之前,需要启动hadoop,并且创建好一个hbase目录:
hadoop fs -mkdir hbase
这样就能在hadoop中开辟一个hbase存放数据的地方。
可以通过命令
hadoop fs -ls /
查看到刚才创建的目录。
hbase的主要配置文件:
1. hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://namenode.blackwing.com:8020/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>namenode.blackwing.com</value> </property> </configuration>
其中的fs.default.name,指向hadoop的namenode所在uri。当然,后面的/hbase是我们希望在hdfs的哪个路径下保存数据。fs.default.name需要跟hadoop中的fs.default.name配置一样。也就是说这部分要一样:
hdfs://namenode.blackwing.com:8020/
zookeeper的集群列表:hbase.zookeeper.quorum,因为要对外,所以这里不能填localhost。
2. hbase和hadoop都配置好后,需要在程序中进行访问地址设置:
public InsertData(String tableName) { rowList = new ArrayList<Row>(); this.conf = HBaseConfiguration.create(); this.conf.set("hbase.zookeeper.quorum","192.168.128.140"); System.out.println("hbase.master = "+conf.get("hbase.master")); System.out.println("hbase.zookeeper.quorum = "+conf.get("hbase.zookeeper.quorum")); try { this.table=new HTable(this.conf,tableName.getBytes()); } catch (IOException e) { e.printStackTrace(); logger.info("errors occur while creating table : "+tableName); } }
其中的192.168.128.140,就是hbase中zookeeper的运行地址,因为zookeeper会根据.META.和ROOT得到hbase的所在等信息,所以只需设置hbase.zookeeper.quorum程序就能工作。
当然,也可以把hbase-site.xml拷贝到项目的src目录下,在HBaseConfiguration.create()的时候,程序会自动读取src下的hbase-site.xml。
3. 一些莫名其妙的小问题集合
1)windows能ping通虚拟机,但不能访问虚拟机hbase,或者打不开hbase的web界面。
原因:因为linux的防火墙缘故,暴力点的解决办法是chkconfig iptables off。而最好是修改/etc/sysconfig/iptables添加允许访问的规则。
2)jps时,发现少了某个(某些)进程,例如本应该有tasktracker好datanode进程的,却只有datanode。
先检查hadoop中slaves中是否正确列出主机名,一行一个。
我遇到这个问题,是因为hadoop的fs.default.name设置成了跟hbase的hbase.rootdir一样了,也就是:
hdfs://namenode.blackwing.com:8020/hbase/
正确来说,hadoop中的配置应该是这样的:
hdfs://namenode.blackwing.com:8020/
3)在windows下,eclipse后台输出显示连接不到namenode
原因:很大程度上是因为windows中没写host。解决办法是在:
C:\WINDOWS\system32\drivers\etc\hosts
中,添加vm中3台机器的ip及名称:
192.168.128.140 namenode.blackwing.com 192.168.128.136 jobtracker.blackwing.com 192.168.128.141 datanode.blackwing.com
PS:为了确定hbase的数据是否真的保存到hadoop中,可以通过:
hadoop fs -ls /hbase
查看到在通过hbase创建的表,都会在hadoop的hbase目录下生成对应文件夹。