HBase配置及API运行

来源:互联网 发布:c语言程序的基本模块 编辑:程序博客网 时间:2024/06/05 09:43

昨天和今天我主要学习了下HBase,在此记录下自己的学习心得。

初次接触HBase,发现它有自带的zookeeper;我原先是完全分布式安装了hadoop的,三台机器,不过我运行的时候暂时只开了两台,所以下面出现的例子都是只起了两台的哈。

按理是要分开另外安装zookeeper比较好,而不是使用HBase自带的内部的zookeeper,原因大概就是如下所述(摘自百度知道一用户的回答,个人觉得他回答的不错):

         因为我们是好多hbase集群共用一个zookeeper的,其中一个集群需要从hbase 0.90.2 升级到hbase 0.92上,自然,包也要更新。但是其中一台regionserver上面同时也有跑zookeeper,而zookeeper还是用hbase 0.90.2 自带的zookeeper在跑。 ? 现在好了,升级一个regionserver,连着zookeeper也要受到牵连,看来必须要重启,不然,jar包替换掉,可能会影响到zk正在跑的经常。但是重启zk毕竟对正在连接这个zk的client端会有短暂的影响。 ? 真是蛋疼。本来只是升级hbase,zk却强耦合了。 ? 虽然后来证明zookeeper只要启动了,哪怕jar包删除也不会影响到正在跑的zk进程,但是这样的不规范带来的风险,实在是没有必要。 ? 所以作为运维,我强烈建议zk 和hbase分开部署,就直接部署官方的zk 好了,因为zk本身就是一个独立的服务,没有必要和hbase 耦合在一起。 ? 在分布式的系统部署上面,一个角色就用一个专门的文件夹管理,不要用同一个目录下,这样子真的容易出问题。


目前我也是偷懒,所以直接使用了HBase自带的zookeeper。

我的运行环境hadoop2.8.0, hbase1.2.6 (hadoop的配置在此就不说了,大家可以照官网自己搭建。我的三台机器名分别为bigdata1,bigdata2,bigdata3;这里只运行后两台)

  • HBase配置

以bigdata3上的配置为例

hbase-site.xml

<configuration><property>        <name>hbase.rootdir</name>        <value>hdfs://bigdata3:9000/hbase</value></property><property>        <name>hbase.cluster.distributed</name>        <value>true</value></property><property>        <name>hbase.zookeeper.quorum</name>        <value>bigdata1,bigdata2,bigdata3</value></property><property><name>hbase.zookeeper.sission.timeout</name><value>60000</value></property><property><name>hbase.zookeeper.property.clientPort</name><value>2181</value></property><property><name>hbase.regionserver.lease.period</name><value>60000</value></property><property><name>hbase.rpc.timeout</name><value>60000</value></property><property><name>hbase.master.info.port</name><value>60010</value></property><property>      <name>hbase.master</name>      <value>hdfs://bigdata3:60000</value>  </property></configuration>

hbase-env.sh

export HBASE_CLASSPATH=/home/hadoop/hbase-1.2.6/confexport HBASE_OPTS="-XX:+UseConcMarkSweepGC"export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"export HBASE_LOG_DIR=${HBASE_HOME}/logs# The directory where pid files are stored. /tmp by default.export HBASE_PID_DIR=/home/hadoop/hbase-1.2.6/pids# Tell HBase whether it should manage it's own instance of Zookeeper or not.export HBASE_MANAGES_ZK=trueexport JAVA_HOME=/home/hadoop/jdk1.8.0_121/export HBASE_HOME=/home/hadoop/hbase-1.2.6export PATH=$PATH:$HBASE_HOME/binexport HADOOP_HOME=/home/hadoop/hadoop2.8.0
regionservers

bigdata1bigdata2bigdata3

启动hadoop后启动hbase,使用命令start-hbase.sh start



然后hbase shell即可进行数据库操作;具体的shell操作命令我就不列举啦!同时可以进行浏览器访问


现在新版本的hbase这个端口已经改成了16010了,大家注意下。


昨天上午到这都是正常的,但是下午饭后回来就发现hbase出错啦。

后来看日志觉得就是zookeeper没有起来,


但是我不知道Hbase自带的zookeeper在哪,要怎么手动重启呢?百度很久都没有找到解决办法,网上的方法都试啦,还没有解决;

这等我后面解决啦再记录吧,如果大家有遇到同样问题并解决啦,麻烦告诉伟下!先谢啦~

因为使用自带的hbase时其默认文件保存在tmp下,所以暂时我就先删掉啦tmp下内容然后重新启动的hbase。

下面我用eclipse java新建了一种表,代码如下:

mport java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import org.apache.hadoop.hbase.HColumnDescriptor;import org.apache.hadoop.hbase.HTableDescriptor;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.HBaseAdmin;public class CreateTable {public static void main(String[] args) throws IOException {Configuration con = HBaseConfiguration.create();con.set("hbase.zookeeper.quorum", "master");//使用eclipse时必须添加这个,否则无法定位;如果填matser还是没有用,你可以填ip地址HBaseAdmin admin= new HBaseAdmin(con);HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("emp"));tableDescriptor.addFamily(new HColumnDescriptor("personal"));tableDescriptor.addFamily(new HColumnDescriptor("professional"));admin.createTable(tableDescriptor);admin.close();System.out.println("Table created");}}

在eclipse中记得add external jars,把hbase lib下的jar包都添加进去!