HBase配置及API运行

昨天和今天我主要学习了下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/conf
export 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=true
export JAVA_HOME=/home/hadoop/jdk1.8.0_121/
export HBASE_HOME=/home/hadoop/hbase-1.2.6
export PATH=$PATH:$HBASE_HOME/bin
export HADOOP_HOME=/home/hadoop/hadoop2.8.0




regionservers

bigdata1
bigdata2
bigdata3

启动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包都添加进去!


猜你喜欢

转载自blog.csdn.net/u011249920/article/details/75286424