HBase2.2.2安装和编程实践指南

HBase2.2.2安装和编程实践指南

1、HBase介绍

HBase是一个分布式的、面向列的开源数据库,源于Google的一篇论文《BigTable:一个结构化数据的分布式存储系统》。HBase以表的形式存储数据,表有行和列组成,列划分为若干个列族/列簇(column family)。欲了解HBase的官方资讯,请访问HBase官方网站

HBase的运行有三种模式:单机模式、伪分布式模式、分布式模式。

  • 单机模式:在一台计算机上安装和使用HBase,不涉及数据的分布式存储;
  • 伪分布式模式:在一台计算机上模拟一个小的集群;
  • 分布式模式:使用多台计算机实现物理意义上的分布式存储。这里出于学习目的,我们只重点讨论单机模式和伪分布式模式。

2、安装并配置HBase2.2.2

由于HBase对Hadoop具有版本依赖性,所以,在安装HBase2.2.2时,一定要首先安装Hadoop3.1.3

2.1 HBase2.2.2安装

#解压安装包
hadoop@hadoop-master:~$ sudo tar xf hbase-2.2.2-bin.tar.gz -C /usr/local/
hadoop@hadoop-master:~$ cd /usr/local/
hadoop@hadoop-master:/usr/local$ sudo mv hbase-2.2.2 hbase

#把hbase目录权限赋予给hadoop用户:
hadoop@hadoop-master:/usr/local$ sudo chown -R hadoop:hadoop hbase
#配置环境变量
hadoop@hadoop-master:/usr/local$ nano ~/.bashrc 
hadoop@hadoop-master:/usr/local$ tail -1 ~/.bashrc 
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/hbase/bin

#使环境变量立即生效
hadoop@hadoop-master:/usr/local$ source ~/.bashrc

扩展阅读: 设置Linux环境变量的方法和区别

#修改 hbase-env.sh 文件
hadoop@hadoop-master:/usr/local$ cd /usr/local/hbase/conf/
hadoop@hadoop-master:/usr/local/hbase/conf$ vim hbase-env.sh
hadoop@hadoop-master:/usr/local/hbase/conf$ tail -1 hbase-env.sh
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
#查看HBase版本,确定hbase安装成功,
hadoop@hadoop-master:/usr/local/hbase/conf$ hbase version
HBase 2.2.2
Source code repository git://6ad68c41b902/opt/hbase-rm/output/hbase revision=e6513a76c91cceda95dad7af246ac81d46fa2589
Compiled by hbase-rm on Sat Oct 19 10:10:12 UTC 2019
From source with checksum 4d23f97701e395c5d34db1882ac5021b

看到输出版本消息表示HBase已经安装成功,接下来将分别进行HBase单机模式和伪分布式模式的配置。

如果安装失败,可以根据报错信息参考:https://www.cnblogs.com/shan333/p/15386771.html

2.2 HBase配置

HBase有三种运行模式,单机模式、伪分布式模式、分布式模式。作为学习,我们重点讨论单机模式和伪分布式模式。

2.2.1 单机模式配置

1、配置JAVA环境变量,并添加配置HBASE_MANAGES_ZK为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。

hadoop@hadoop-master:/usr/local/hbase/conf$ vim hbase-env.sh
hadoop@hadoop-master:/usr/local/hbase/conf$ sed -n "28p;126p" hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export HBASE_MANAGES_ZK=true

2、设置属性hbase.rootdir
在启动HBase前需要设置属性hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。此处设置为HBase安装目录下的hbase-tmp文件夹即(/usr/local/hbase/hbase-tmp),添加配置如下:

hadoop@hadoop-master:/usr/local/hbase/conf$ nano hbase-site.xml 
hadoop@hadoop-master:/usr/local/hbase/conf$ cat hbase-site.xml 
......
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:///usr/local/hbase/hbase-tmp</value>
        </property>
</configuration>

3、接下来测试运行。首先切换目录至HBase安装目录/usr/local/hbase;再启动HBase。命令如下:

hadoop@hadoop-master:/usr/local/hbase/conf$ cd /usr/local/hbase/
hadoop@hadoop-master:/usr/local/hbase$ ./bin/start-hbase.sh    #用于启动HBase
hadoop@hadoop-master:/usr/local/hbase$ hbase shell    #用于打开shell命令行模式

成功启动HBase,截图如下:image.png-43kB

停止HBase运行,命令如下:

bin/stop-hbase.sh

注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。

2.2.2 伪分布式模式配置

1、配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
HBASE_CLASSPATH设置为本机HBase安装目录下的conf目录(即/usr/local/hbase/conf)

hadoop@hadoop-master:/usr/local/hbase/conf$ vim hbase-env.sh
hadoop@hadoop-master:/usr/local/hbase/conf$ sed -n "28p;31p;126p" hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162/
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true

2、指定HBase数据在HDFS上的存储路径
修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口。

hadoop@hadoop-master:/usr/local/hbase/conf$ nano hbase-site.xml 
hadoop@hadoop-master:/usr/local/hbase/conf$ cat hbase-site.xml 
......
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop-master:9000/hbase</value>
        </property>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.unsafe.stream.capability.enforce</name>
                <value>false</value>
        </property>
</configuration>

hbase.rootdir指定HBase的存储目录;hbase.cluster.distributed设置集群处于分布式模式.
另外,上面配置文件中,hbase.unsafe.stream.capability.enforce这个属性的设置,是为了避免出现启动错误。也就是说,如果没有设置hbase.unsafe.stream.capability.enforce为false,那么,在启动HBase以后,会出现无法找到HMaster进程的错误,启动后查看系统启动日志(/usr/local/hbase/logs/hbase-hadoop-master-ubuntu.log),会发现如下错误:

2020-01-25 15:04:56,916 ERROR [master/localhost:16000:becomeActiveMaster] master.HMaster: Failed to become active master
java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use.hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal.dir' points to a FileSystem mount that can provide it.

3、接下来测试运行HBase。

#检测hadoop是否启动
hadoop@hadoop-master:/usr/local/hbase/conf$ jps
2880 Jps
2785 JobHistoryServer
2036 NameNode
2459 ResourceManager
2268 SecondaryNameNode
#启动HBase
hadoop@hadoop-master:/usr/local/hbase/conf$ cd /usr/local/hbase/
hadoop@hadoop-master:/usr/local/hbase$ ./bin/start-hbase.sh

#启动成功,输入命令jps,看到以下界面说明hbase启动成功
hadoop@hadoop-master:/usr/local/hbase$ jps
2785 JobHistoryServer
3186 HRegionServer
2036 NameNode
3061 HQuorumPeer
3369 Jps
2459 ResourceManager
2268 SecondaryNameNode
3119 HMaster

成功启动HBase,截图如下:image.png-44.8kB

注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。
这里启动关闭Hadoop和HBase的顺序一定是:
启动Hadoop—>启动HBase—>关闭HBase—>关闭Hadoop

3、编程实践

3.1 利用Shell命令

3.1.1 创建表

HBase中用create命令创建表,具体如下:

hbase(main):001:0> create 'student','Sname','Ssex','Sage','Sdept','course'

此时,即创建了一个“student”表,属性有:Sname,Ssex,Sage,Sdept,course。因为HBase的表中会有一个系统默认的属性作为行键,无需自行创建,默认为put命令操作中表名后第一个数据。创建完“student”表后,可通过describe命令查看“student”表的基本信息。命令执行截图如下:

hbase(main):002:0> describe 'student'

图片.png-262.1kB

3.1.2 添加数据

在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。

HBase中用put命令添加数据,注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。

下面命令为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

hbase(main):003:0> put 'student','95001','Sname','LiYing'
Took 0.0537 seconds
3.1.3 插入数据

下面命令为95001行下的course列族的math列添加了一个数据。

hbase(main):004:0> put 'student','95001','course:math','80'
Took 0.0101 seconds
3.1.4 查看数据

HBase中有两个用于查看数据的命令:

  1. get命令,用于查看表的某一行数据;
  2. scan命令用于查看某个表的全部数据

1、get命令
返回的是‘student’表‘95001’行的数据

hbase(main):007:0* get 'student','95001'
COLUMN                                CELL                                                                                                       
 Sname:                               timestamp=1650693897704, value=LiYing                                                                      
 course:math                          timestamp=1650693912164, value=80                                                                          
1 row(s)
Took 0.0164 seconds

2、scan命令
返回的是‘student’表的全部数据

hbase(main):008:0> scan 'student'
ROW                                   COLUMN+CELL                                                                                                
 95001                                column=Sname:, timestamp=1650693897704, value=LiYing                                                       
 95001                                column=course:math, timestamp=1650693912164, value=80                                                      
1 row(s)
Took 0.0094 seconds
3.1.5 删除数据

在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:

  1. delete用于删除一个数据,是put的反向操作;
  2. deleteall操作用于删除一行数据。

1、delete命令
即删除了student表中95001行下的Ssex列的所有数据

hbase(main):005:0> delete 'student','95001','Ssex'
Took 0.0156 seconds

2、deleteall命令
即删除了student表中的95001行的全部数据

hbase(main):006:0> deleteall 'student','95001'
Took 0.0150 seconds
3.1.6 删除表

删除表有两步,第一步先让该表不可用,第二步删除表。

hbase(main):009:0> disable 'student'
Took 1.3444 seconds                                                                                                                              
hbase(main):010:0> drop 'student'
Took 0.4587 seconds                                                                                                                              
hbase(main):011:0> list
TABLE                                                                                                                                            
0 row(s)
Took 0.0153 seconds                                                                                                                              
=> []
3.1.7 查询表历史数据

查询表的历史版本,需要两步。
1、在创建表的时候,指定保存的版本数(假设指定为5)

hbase(main):012:0> create 'teacher',{NAME=>'username',VERSIONS=>5}
Created table teacher
Took 1.2745 seconds                                                                                                                              
=> Hbase::Table - teacher

2、插入数据然后更新数据,使其产生历史版本数据,注意:这里插入数据和更新数据都是用put命令

hbase(main):013:0> put 'teacher','91001','username','Mary'
Took 0.0101 seconds                                                                                                                              
hbase(main):014:0> put 'teacher','91001','username','Mary1'
Took 0.0066 seconds                                                                                                                              
hbase(main):015:0> put 'teacher','91001','username','Mary2'
Took 0.0054 seconds                                                                                                                              
hbase(main):016:0> put 'teacher','91001','username','Mary3'
Took 0.0059 seconds                                                                                                                              
hbase(main):017:0> put 'teacher','91001','username','Mary4'
Took 0.0049 seconds                                                                                                                              
hbase(main):018:0> put 'teacher','91001','username','Mary5'
Took 0.0061 seconds

3、查询时,指定查询的历史版本数。默认会查询出最新的数据。(有效取值为1到5)

hbase(main):019:0> get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
COLUMN                                CELL                                                                                                       
 username:                            timestamp=1650693503282, value=Mary5                                                                       
 username:                            timestamp=1650693501017, value=Mary4                                                                       
 username:                            timestamp=1650693499139, value=Mary3                                                                       
 username:                            timestamp=1650693497094, value=Mary2                                                                       
 username:                            timestamp=1650693495281, value=Mary1                                                                       
1 row(s)
Took 0.0231 seconds
3.1.8 退出HBase数据库表操作

最后退出数据库操作,输入exit命令即可退出,注意:这里退出HBase数据库是退出对数据库表的操作,而不是停止启动HBase数据库后台运行。

exit
3.2 HBase Java API编程实践

本实例采用Eclipse开发工具。
启动Eclipse,启动以后,出现如下图所示界面,点击界面右下角的Launch按钮。

root@hadoop-master:~# cd /usr/local/eclipse/
root@hadoop-master:/usr/local/eclipse# ./eclipse

图片.png-228.6kB

启动进入Eclipse以后的程序开发界面如下图所示。图片.png-232.6kB

点击界面顶部的File菜单,在弹出的子菜单(如下图所示)中选择New,再选择子菜单中的Java Project图片.png-372.6kB

这时会弹出一个Java工程创建对话框(如下图所示),在Project name文本框中输入HBaseExample,在JRE选项卡中选中第2项Use a project specific JRE,然后点击界面底部的Next按钮。图片.png-367.5kB

在弹出的界面中(如下图所示),用鼠标点击Libraries选项卡,然后,点击界面右侧的Add External JARs…按钮。图片.png-321.4kB

在弹出的JAR Selection界面中(如下图所示),进入到/usr/local/hbase/lib目录,选中该目录下的所有jar文件(注意,不要选中client-facing-thirdpartyrubyshaded-clientszkcli这四个目录),然后,点击界面底部的OK按钮。图片.png-623.1kB

然后,在JAR Selection界面中(如下图所示),点击进入到client-facing-thirdparty目录下。图片.png-667.7kB

client-facing-thirdparty目录下(如下图所示),选中所有jar文件,再点击界面底部的OK按钮。图片.png-479.9kB

然后,再点击界面(如下图所示)底部的Finish按钮。图片.png-577kB

图片.png-517.1kB
在界面(如下图所示)左侧的HBaseExample工程名称上单击鼠标右键,在弹出的菜单中选择New,再在弹出的子菜单中选择Class图片.png-525.4kB

在弹出的New Java Class对话框(如下图所示)中,在Name文本框中输入ExampleForHBase,然后,点击界面底部的Finish按钮。图片.png-373.5kB

在代码窗口中(如下图所示),ExampleForHBase.java代码内容输入。图片.png-849.8kB

ExampleForHBase.java代码内容具体如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
 
import java.io.IOException;
public class ExampleForHBase {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    public static void main(String[] args)throws IOException{
        init();
        createTable("student",new String[]{"score"});
        insertData("student","zhangsan","score","English","69");
        insertData("student","zhangsan","score","Math","86");
        insertData("student","zhangsan","score","Computer","77");
        getData("student", "zhangsan", "score","English");
        close();
    }
 
    public static void init(){
        configuration  = HBaseConfiguration.create();
        configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
        try{
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
 
    public static void createTable(String myTableName,String[] colFamily) throws IOException {
        TableName tableName = TableName.valueOf(myTableName);
        if(admin.tableExists(tableName)){
            System.out.println("talbe is exists!");
        }else {
            TableDescriptorBuilder tableDescriptor = TableDescriptorBuilder.newBuilder(tableName);
            for(String str:colFamily){
                ColumnFamilyDescriptor family = 
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();
                tableDescriptor.setColumnFamily(family);
            }
            admin.createTable(tableDescriptor.build());
        } 
    }
 
    public static void insertData(String tableName,String rowKey,String colFamily,String col,String val) throws IOException { 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(),col.getBytes(), val.getBytes());
        table.put(put);
        table.close(); 
    }
 
    public static void getData(String tableName,String rowKey,String colFamily, String col)throws  IOException{ 
        Table table = connection.getTable(TableName.valueOf(tableName));
        Get get = new Get(rowKey.getBytes());
        get.addColumn(colFamily.getBytes(),col.getBytes());
        Result result = table.get(get);
        System.out.println(new String(result.getValue(colFamily.getBytes(),col==null?null:col.getBytes())));
        table.close(); 
    }
}

在开始运行程序之前,需要启动HDFS和HBase。
然后,如下图所示,点击界面中的运行图标右侧的倒三角,在弹出的菜单中选择Run As,再在弹出的菜单中点击1 Java Application,开始运行程序。图片.png-893.1kB

程序运行成功以后,如下图所示,会在运行结果中出现“69”。图片.png-926.5kB

这时,可以到HBase Shell交互式环境中,使用如下命令查看student表是否创建成功:

hbase(main):001:0> list
TABLE                                                                                                                                   
student                                                                                                                                 
teacher                                                                                                                                 
2 row(s)
Took 0.6020 seconds                                                                                                                     
=> ["student", "teacher"]
hbase(main):002:0> scan 'student'
ROW                                 COLUMN+CELL                                                                                         
 zhangsan                           column=score:Computer, timestamp=1650700540944, value=77                                            
 zhangsan                           column=score:English, timestamp=1650700540932, value=69                                             
 zhangsan                           column=score:Math, timestamp=1650700540939, value=86                                                
1 row(s)
Took 0.1698 seconds

本文参考:http://dblab.xmu.edu.cn/blog/2442-2/

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 清华镜像源是一个可靠的下载源,可以为我们提供各种软件和工具的下载。要下载HBase 2.2.2,我们可以按照以下步骤操作: 1. 首先,打开清华镜像源的网址:https://mirrors.tuna.tsinghua.edu.cn/。 2. 在页面上方的搜索框中输入“HBase”,然后按回车键进行搜索。 3. 在搜索结果中找到HBase 2.2.2的下载链接。请注意,你可能需要浏览不同的页面,或者使用浏览器的搜索功能来查找正确的下载链接。 4. 一旦找到了HBase 2.2.2的下载链接,点击该链接进入下载页面。 在下载页面上,你可以选择下载HBase 2.2.2的二进制包或者源码包,根据你的需要进行选择。如果你只是想使用HBase而不需要进行源码的编译,你可以选择下载二进制包。如果你有特定的需求,需要对HBase进行定制或修改,你可以选择下载源码包。 下载完成后,你可以将HBase解压缩到你的选择的目录中,并根据官方文档中的指引进行安装和配置。请注意,HBase是基于Java的,所以你需要确保你的系统已经安装了Java环境。 总之,通过清华镜像源下载HBase 2.2.2是一个简单而可靠的方式,能够满足你的需求并提供所需的支持。 ### 回答2: 要使用清华镜像源下载hbase2.2.2,可以按照以下步骤进行操作。 步骤1: 打开清华镜像源网站 在浏览器中输入"mirrors.tuna.tsinghua.edu.cn",打开清华镜像源网站。 步骤2: 搜索HBase2.2.2 在清华镜像源网站上找到搜索框,并输入"hbase",然后按下回车键。 步骤3: 选择版本 在搜索结果中找到"HBase-2.2.2"的版本,并点击下载链接。 步骤4: 选择下载方式 在下载页面中,有多个下载方式可供选择。可以选择合适的下载方式,比如直接下载源码包或二进制包。 步骤5: 开始下载 点击下载链接后,等待下载过程完成。下载速度取决于网络连接的稳定性和下载源服务器的负载情况。 步骤6: 验证下载完整性 下载完成后,确保下载的文件完整且无损坏。可以通过校验文件哈希值或文件大小与清华镜像源网站提供的信息进行对比来验证。 在完成以上步骤后,就可以成功使用清华镜像源下载hbase2.2.2了。 ### 回答3: 要在清华镜像源下载HBase2.2.2,可以按照以下步骤进行: 1. 打开浏览器,访问清华镜像源官方网站(https://mirrors.tuna.tsinghua.edu.cn/)。清华镜像源提供了丰富的开源软件下载选项。 2. 在镜像源官方网站的搜索栏中输入"HBase",然后按下回车键进行搜索。 3. 在搜索结果中找到与HBase2.2.2版本对应的下载链接,通常会提供多个下载镜像的选项。 4. 根据自己的需求,选择合适的下载镜像链接进行下载。可以根据国内和国外的网络环境选择相应的镜像。通常,选择与自己网络所在地接近的镜像下载速度会更快。 5. 点击选择的镜像链接,跳转到镜像文件所在的页面。在页面上找到HBase2.2.2版本所对应的文件下载链接。 6. 点击下载链接,开始下载HBase2.2.2的安装包。根据网络速度和文件大小,下载时间可能会有所不同。 7. 下载完成后,可以在下载文件夹中找到HBase2.2.2的安装包。接下来可以根据HBase的官方文档或其他教程,对安装包进行解压和安装操作。 请注意,在下载软件时应该选择可信赖的官方或认证的镜像源,以确保下载到的文件是安全可靠的。另外,由于软件版本可能会有更新,以上步骤中的具体操作可能会有所变化,请以具体网站的指引为准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值