【大数据技术基础】 课程 第5章 HBase的安装和基础编程 大数据基础编程、实验和案例教程(第2版)

发布于:2024-11-29 ⋅ 阅读:(9) ⋅ 点赞:(0)

第5章 HBase的安装和基础编程

5.1 安装HBase

5.1.1 下载安装文件

访问HBase官网下载安装文件hbase-2.2.2-bin.tar.gz文件。

下载完安装文件以后,需要对文件进行解压。按照Linux系统使用的默认规范,用户安装的软件一般都是存放在“/usr/local/”目录下。请使用hadoop用户登录Linux系统,打开一个终端,执行如下命令:

sudo  tar  -zxf  ~/下载/hbase-2.2.2-bin.tar.gz  -C  /usr/local

 将解压的文件名hbase-2.2.2改为hbase,以方便使用,命令如下:

sudo  mv  /usr/local/hbase-2.2.2  /usr/local/hbase

5.1.2 配置环境变量

将HBase安装目录下的bin目录(即/usr/local/hbase/bin)添加到系统的PATH环境变量中,这样,每次启动HBase时就不需要到“/usr/local/hbase”目录下执行启动命令,方便HBase的使用。请使用vim编辑器打开“~/.bashrc”文件,命令如下:

vim ~/.bashrc

打开.bashrc文件以后,可以看到,已经存在如下所示的PATH环境变量的配置信息,因为,之前在第3章安装配置Hadoop时,我们已经为Hadoop添加了PATH环境变量的配置信息:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

这里,需要把HBase的bin目录“/usr/local/hbase/bin”追加到PATH中。当要在PATH中继续加入新的路径时,只要用英文冒号“:”隔开,把新的路径加到后面即可,追加后的结果如下:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin: /usr/local/hbase/bin

 添加后,执行如下命令使设置生效:

source ~/.bashrc

5.1.3 添加用户权限

需要为当前登录Linux系统的hadoop用户添加访问HBase目录的权限,将HBase安装目录下的所有文件的所有者改为hadoop,命令如下:

cd  /usr/local
sudo  chown  -R  hadoop  ./hbase

 

5.1.4 查看HBase版本信息

可以通过如下命令查看HBase版本信息,以确认HBase已经安装成功:

/usr/local/hbase/bin/hbase version

 

5.2 HBase的配置

5.2.1 单机模式配置

1. 配置hbase-env.sh文件

使用vim编辑器打开“/usr/local/hbase/conf/hbase-env.sh”,命令如下:

vim /usr/local/hbase/conf/hbase-env.sh

打开hbase-env.sh文件以后,需要在hbase-env.sh文件中配置JAVA_HOME、HBASE_CLASSPATH和HBASE_MANAGES_ZK。

其中,HBASE_CLASSPATH设置为本机Hadoop安装目录下的conf目录(即/usr/local/hadoop/conf)。

JAVA_HOME和HBASE_MANAGES_ZK的配置方法和上面单机模式的配置方法相同。修改后的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-site.xml文件

使用vim编辑器打开并编辑“/usr/local/hbase/conf/hbase-site.xml”文件,命令如下:

vim /usr/local/hbase/conf/hbase-site.xml
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://localhost: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>

 

3. 启动运行HBase

首先登陆SSH,由于之前在“第3章 Hadoop的安装和使用”中已经设置了无密码登录,因此这里不需要密码。然后,切换至“/usr/local/hadoop”,启动Hadoop,让HDFS进入运行状态,从而可以为HBase存储数据,具体命令如下:

ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh

 然后,启动HBase,命令如下:

cd /usr/local/hbase
./bin/start-hbase.sh

输入命令jps,如果出现以下进程,则说明HBase启动成功:

  1. HMaster:HBase 的主节点进程,负责管理集群元数据和协调各种操作。
  2. HRegionServer:HBase 的区域服务器进程,负责存储和管理表数据。
  3. HQuorumPeer 或 ZooKeeper:HBase 使用 ZooKeeper 进行分布式协调,所以你会看到 ZooKeeper 的进程。

现在就可以进入HBase Shell命令行模式,命令如下:

./bin/hbase shell

4. 停止运行HBase

最后,可以使用如下命令停止HBase运行:

./bin/stop-hbase.sh

 关闭HBase以后,如果不再使用Hadoop,就可以运行如下命令关闭Hadoop:

cd /usr/local/hadoop
./sbin/stop-dfs.sh

在使用具体的Shell命令操作HBase数据之前,需要首先启动Hadoop,然后再启动HBase,并且启动HBase Shell,进入Shell命令提示符状态,具体命令如下:

cd /usr/local/hadoop
./sbin/start-dfs.sh
cd /usr/local/hbase
./bin/start-hbase.sh
./bin/hbase shell

5.2.2 伪分布式配置

5.3 HBase常用Shell命令

5.3.1 在HBase中创建表

        假设这里要创建一个表student,该表包含Sname、Ssex、Sage、Sdept、course等字段。需要注意的是,在关系型数据库(比如MySQL)中,需要首先创建数据库,然后再创建表,但是,在HBase数据库中,不需要创建数据库,只要直接创建表就可以。在HBase中创建student表的Shell命令如下:

create 'student','Sname','Ssex','Sage','Sdept','course'

5.3.2 添加数据

可以用Shell命令手工插入数据,命令如下:

put 'student','95001','Sname','LiYing'

下面继续添加4个单元格的数据,用来记录LiYing同学的相关信息,命令如下:

put 'student','95001','Ssex','male'
put 'student','95001','Sage','22'
put 'student','95001','Sdept','CS'
put 'student','95001','course:math','80'

5.3.3 查看数据

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

get命令:用于查看表的某一个单元格数据;

scan命令:用于查看某个表的全部数据。

比如,可以使用如下命令返回student表中95001行的数据:

下面使用scan命令查询student表的全部数据:

5.3.4 删除数据

首先,使用delete命令删除student表中95001这行中的Ssex列的所有数据:

然后,使用deleteall命令删除student表中的95001行的全部数据,命令如下:

deleteall 'student','95001'

5.3.5 删除表

删除表需要分两步操作,第一步先让该表不可用,第二步删除表。比如,要删除student表,可以使用如下命令:

disable 'student'  
drop 'student'

5.3.6 查询历史数据

为了查询历史数据,这里创建一个teacher表,首先,在创建表的时候,需要指定保存的版本数(假设指定为5),命令如下:

create 'teacher',{NAME=>'username',VERSIONS=>5}

然后,插入数据,并更新数据,使其产生历史版本数据,需要注意的是,这里插入数据和更新数据都是使用put命令,具体如下:

put 'teacher','91001','username','Mary'
put 'teacher','91001','username','Mary1'
put 'teacher','91001','username','Mary2'
put 'teacher','91001','username','Mary3'
put 'teacher','91001','username','Mary4'  
put 'teacher','91001','username','Mary5'

查询时,默认情况下回显示当前最新版本的数据,如果要查询历史数据,需要指定查询的历史版本数,由于上面设置了保存版本数为5,所以,在查询时制定的历史版本数的有效取值为1到5,具体命令如下:

5.3.7 退出HBase数据库

最后退出数据库操作,输入exit命令即可退出,命令如下:

exit

注意,这里退出HBase数据库是退出HBase Shell,而不是停止HBase数据库后台运行,执行exit后,HBase仍然在后台运行,如果要停止HBase运行,需要使用如下命令:

./bin/stop-hbase.sh

5.4 HBase编程实践

5.4.1 在Eclipse中创建项目

5.4.2为项目添加需要用到的JAR包

5.4.3 编写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(); 
    }
}

5.4.4 编译运行程序

现在可以在Linux的终端中启动HBase Shell,来查看生成的表,启动HBase Shell的命令如下:

cd /usr/local/hbase
./bin/hbase shell

进入HBase Shell以后,可以使用list命令查看HBase数据库中是否存在名称为student的表。

list

再在HBase Shell交互式环境中,使用如下命令查看student表中的数据:

5.5 本章小结

        HBase属于列族数据库,是NoSQL数据库的一种,它是Hadoop生态系统中的重要一员,借助于Hadoop的力量,HBase获得很好的发展空间,得到了大量的应用。

        本章首先介绍了HBase的安装方法,包括下载安装文件、配置环境变量和添加用户权限等。然后,详细介绍了HBase的两种不同模式的配置方法,包括单机模式的配置和伪分布式模式的配置。在实际应用中,需要经常使用Shell命令操作HBase数据库,因此,本章详细介绍了一些常用的HBase Shell命令的使用方法,包括创建表、添加数据、查看数据、删除数据等。最后,本章详细介绍了HBase的Java应用程序开发方法。