下载并解压

下载并解压,https://mirror.bit.edu.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz

  1. wget https://mirror.bit.edu.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz
  2. tar -zxvf hbase-1.4.13-bin.tar.gz -C /opt/module

配置环境变量

  1. # vim /etc/profile

添加环境变量:

  1. export HBASE_HOME=/opt/module/hbase-1.4.13
  2. export PATH=$HBASE_HOME/bin:$PATH

使得配置的环境变量立即生效:

  1. # source /etc/profile

集群配置

进入 ${HBASE_HOME}/conf 目录下,修改配置:

hbase-env.sh

  1. # 配置JDK安装位置
  2. export JAVA_HOME=/opt/module/jdk1.8.0_241
  3. # 不使用内置的zookeeper服务
  4. export HBASE_MANAGES_ZK=false

hbase-site.xml

  1. <configuration>
  2. <property>
  3. <!-- 指定 hbase 以分布式集群的方式运行 -->
  4. <name>hbase.cluster.distributed</name>
  5. <value>true</value>
  6. </property>
  7. <property>
  8. <!-- 指定 hbase 在 HDFS 上的存储位置 -->
  9. <name>hbase.rootdir</name>
  10. <value>hdfs://node01:8020/hbase</value>
  11. </property>
  12. <property>
  13. <!-- 指定 zookeeper 的地址-->
  14. <name>hbase.zookeeper.quorum</name>
  15. <value>node01:2181,node02:2181,node03:2181,node04:2181,node05:2181</value>
  16. </property>
  17. </configuration>

regionservers

node03
node04
node05

backup-masters

node02

backup-masters 这个文件是不存在的,需要新建,主要用来指明备用的 master 节点,可以是多个,这里我们以 1 个为例。

HDFS客户端配置

这里有一个可选的配置:如果您在 Hadoop 集群上进行了 HDFS 客户端配置的更改,比如将副本系数 dfs.replication 设置成 5,则必须使用以下方法之一来使 HBase 知道,否则 HBase 将依旧使用默认的副本系数 3 来创建文件:

  1. Add a pointer to your HADOOP_CONF_DIR to the HBASE_CLASSPATH environment variable in hbase-env.sh.
  2. Add a copy of hdfs-site.xml (or hadoop-site.xml) or, better, symlinks, under ${HBASE_HOME}/conf, or
  3. if only a small set of HDFS client configurations, add them to hbase-site.xml.

以上是官方文档的说明,这里解释一下:

第一种 :将 Hadoop 配置文件的位置信息添加到 hbase-env.shHBASE_CLASSPATH 属性,示例如下:

export HBASE_CLASSPATH=/opt/module/hadoop-2.7.7/etc/hadoop

第二种 :将 Hadoop 的 hdfs-site.xmlhadoop-site.xml 拷贝到 ${HBASE_HOME}/conf 目录下,或者通过符号链接的方式。如果采用这种方式的话,建议将两者都拷贝或建立符号链接,示例如下:

# 拷贝
cp core-site.xml hdfs-site.xml /usr/app/hbase-1.2.0-cdh5.15.2/conf/
# 使用符号链接
ln -s   /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/core-site.xml
ln -s   /usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop/hdfs-site.xml

注:hadoop-site.xml 这个配置文件现在叫做 core-site.xml

第三种 :如果你只有少量更改,那么直接配置到 hbase-site.xml 中即可。

安装包分发

将 HBase 的安装包分发到其他服务器,分发后建议在这四台服务器上也配置一下 HBase 的环境变量。

scp -r /opt/module/hbase-1.4.13 node02:/opt/module

启动集群

启动ZooKeeper集群

分别到五台服务器上启动 ZooKeeper 服务:

 zkServer.sh start

启动Hadoop集群

# 启动dfs服务
start-dfs.sh
# 启动yarn服务
start-yarn.sh

启动HBase集群

进入 node01 的 ${HBASE_HOME}/bin,使用以下命令启动 HBase 集群。执行此命令后,会在 node01 上启动 Master 服务,在 node02 上启动备用 Master 服务,在 regionservers 文件中配置的所有节点启动 region server 服务。

${HBASE_HOME}/bin/start-hbase.sh

查看服务

访问 HBase 的 Web-UI 界面,访问端口号为 16010。可以看到 Master 在 node01 上,三个 Regin Servers 分别在node03,node04,和 node05 上,并且还有一个 Backup Matser 服务在 node02 上。
image.png

node02 上的 HBase 出于备用状态:
image.png
image.png

过滤器

  • BinaryComparator : 使用 Bytes.compareTo(byte [],byte []) 按字典序比较指定的字节数组。
  • BinaryPrefixComparator : 按字典序与指定的字节数组进行比较,但只比较到这个字节数组的长度。
  • RegexStringComparator : 使用给定的正则表达式与指定的字节数组进行比较。仅支持 EQUALNOT_EQUAL 操作。
  • SubStringComparator : 测试给定的子字符串是否出现在指定的字节数组中,比较不区分大小写。仅支持 EQUALNOT_EQUAL 操作。
  • NullComparator :判断给定的值是否为空。
  • BitComparator :按位进行比较。

image.png

HTable table1 = new HTable("table1");
//...
HTable table2 = new HTable("table2");
is less efficient than the following code:

Configuration conf = HBaseConfiguration.create();
HTable table1 = new HTable(conf, "table1");
//...
HTable table2 = new HTable(conf, "table2");

hbase-site.xml

<property>
    <name>hbase.snapshot.enabled</name>
    <value>true</value>
</property>

配置phoenix

创表

CREATE TABLE IF NOT EXISTS us_population (
      state CHAR(2) NOT NULL,
      city VARCHAR NOT NULL,
      population BIGINT
      CONSTRAINT my_pk PRIMARY KEY (state, city));

导入数据

UPSERT INTO us_population VALUES('NY','New York',8143197);
UPSERT INTO us_population VALUES('CA','Los Angeles',3844829);
UPSERT INTO us_population VALUES('IL','Chicago',2842518);
UPSERT INTO us_population VALUES('TX','Houston',2016582);
UPSERT INTO us_population VALUES('PA','Philadelphia',1463281);
UPSERT INTO us_population VALUES('AZ','Phoenix',1461575);
UPSERT INTO us_population VALUES('TX','San Antonio',1256509);
UPSERT INTO us_population VALUES('CA','San Diego',1255540);
UPSERT INTO us_population VALUES('TX','Dallas',1213825);
UPSERT INTO us_population VALUES('CA','San Jose',912332);

CRUD

-- 插入主键相同的数据就视为更新
UPSERT INTO us_population VALUES('NY','New York',999999);

DELETE FROM us_population WHERE city='Dallas';

SELECT state as "州",count(city) as "市",sum(population) as "热度"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;

对于HBase 来说,所有的非CRUD操作,都是通过“!”开头的
退出:

!quit

phoenix jar

 <!-- https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-core -->
 <dependency>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-core</artifactId>
      <version>4.14.0-cdh5.14.2</version>
 </dependency>

HBase

<property>
    <name>hbase.snapshot.enabled</name>
    <value>true</value>
</property>