杨校老师课堂之分布式数据库HBase的部署和基本操作

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 杨校老师课堂之分布式数据库HBase的部署和基本操作

部署分布式数据库——HBase

学习背景:

以下采用伪分布式方式搭建HBase

故而采用内置的Zookeeper协调处理,不再搭建外置ZooKeeper,因此会存在单点故障问题,若需要解决这个情况,可采用Zookeeper部署一个HA(高可用)的Habse集群解决。

(1) 安装JDK、Hadoop,这里采用的JDK1.8,Hadoop2.7.4,CentOS7.6

本次部署测试的ip地址设为:

192.168.6.166

运行Hadoop环境,测试是否正常通过,启动命令: start-dfs.sh

(2)下载HBase安装包。官网地址:https://archive.apache.org/dist/hbase 相关大数据框架下载整理

(3) 安装

  • 3.1 上传并完成解压HBase安装包
[root@hadoop1 ~]# tar -zxvf hbase-1.2.1-bin.tar.gz

(4) 准备配置文件

  • 4.1 拷贝配置文件
[root@hadoop1 ~]# cp /usr/local/hadoop/hadoop-2.7.4/etc//hadoop/{hdfs-site.xml,core-site.xml}  /usr/local/hbase/hbase-1.2.1/conf/
  • 4.2 修改配置文件hbase-env.sh
# 加入jdk的安装路径到JAVA_HOME
[root@hadoop1 ~]# vim hbase-env.sh 
  • 4.3 设置HBase的环境变量
[root@hadoop1 ~]# vim /etc/profile
#HBase environment variable
export HBASE_HOME=/usr/local/hbase/hbase-1.2.1
export PATH=$PATH:$HBASE_HOME/bin:

#更新配置文件profile生效
[root@hadoop1 ~]# source /etc/profile
# 查看hbase的版本
[root@hadoop1 ~]# hbase version

运行HBase数据库

[root@hadoop1 conf]# start-hbase.sh

运行成功后,已通过浏览器访问:http://hadoop1:16010/master-status

注意:

可以通过修改hosts来实现访问主机名进入web界面

具体路径:

C:\Windows\System32\drivers\etc\hosts

在hosts文件内的最后一行加入:

192.168.6.166 hadoop1

HBase的基本操作

方式一:HBase的Shell操作
#启动交互界面
[root@hadoop1 ~]# hbase shell
# 创建表
hbase(main):001:0> create 'student','info'
0 row(s) in 3.1630 seconds

=> Hbase::Table - student
# 查询表
hbase(main):002:0> list
TABLE                                                                                                                                                        
student                                                                                                                                                      
1 row(s) in 0.5240 seconds

=> ["student"]

  • 插入数据
# 插入数据
hbase(main):003:0> put 'student','1001','info:name','zhangsan'
0 row(s) in 3.0910 seconds

hbase(main):004:0> put 'student','1001','info:age','19'
0 row(s) in 0.1290 seconds

hbase(main):005:0> put 'student','1001','info:gender','male'
0 row(s) in 0.2760 seconds

hbase(main):006:0> put 'student','1002','info:name','lisi'
0 row(s) in 0.0090 seconds

hbase(main):007:0> put 'student','1002','info:age','21'
0 row(s) in 0.0800 seconds

hbase(main):008:0> put 'student','1002','info:gender','female'
0 row(s) in 0.0150 seconds
  • 扫描数据
hbase(main):009:0> scan 'student'
 ROW                    COLUMN+CELL                                                                                                         
 1001                   column=info:age, timestamp=1650086163620, value=19                                                                  
 1001                   column=info:gender, timestamp=1650086205652, value=male                                                             
 1001                   column=info:name, timestamp=1650085979553, value=zhangsan                                                           
 1002                   column=info:age, timestamp=1650086249277, value=21                                                                  
 1002                   column=info:gender, timestamp=1650086265874, value=female                                                           
 1002                   column=info:name, timestamp=1650086227559, value=lisi                                                               
2 row(s) in 0.1450 seconds
  • 查看表结构
hbase(main):010:0> describe 'student'
Table student is ENABLED                                                                                                                                     
student                                                                                                                                                      
COLUMN FAMILIES DESCRIPTION                                                                                                                                  
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER',
 COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                           
1 row(s) in 0.2190 seconds

  • 更新语句
hbase(main):011:0> put 'student','1002','info:age','22'
0 row(s) in 0.1000 seconds

# 修改后查询验证是否修改成功
hbase(main):016:0> scan 'student'
 ROW                      COLUMN+CELL                                                                                                         
 1001                     column=info:age, timestamp=1650086163620, value=19                                                                  
 1001                     column=info:gender, timestamp=1650086205652, value=male                                                             
 1001                     column=info:name, timestamp=1650085979553, value=zhangsan                                                           
 1002                     column=info:age, timestamp=1650086635741, value=22                                                                  
 1002                     column=info:gender, timestamp=1650086265874, value=female                                                           
 1002                     column=info:name, timestamp=1650086227559, value=lisi                                                               
2 row(s) in 0.0330 seconds

  • 获取指定字段的操作
hbase(main):002:0> get 'student','1001'
 COLUMN                                  CELL                                                                                                                
 info:age                                timestamp=1650086163620, value=19                                                                                   
 info:gender                             timestamp=1650086205652, value=male                                                                                 
 info:name                               timestamp=1650085979553, value=zhangsan                                                                             
3 row(s) in 0.0420 seconds

  • 删除语句
hbase(main):008:0> delete 'student','1002','info:gender'
0 row(s) in 0.0900 seconds

# 删除后查询验证是否修改成功
hbase(main):009:0> scan 'student'
 ROW                         COLUMN+CELL                                                                                                         
 1001                        column=info:age, timestamp=1650086163620, value=19                                                                  
 1001                        column=info:gender, timestamp=1650086205652, value=male                                                             
 1001                        column=info:name, timestamp=1650085979553, value=zhangsan                                                           
 1002                        column=info:age, timestamp=1650086635741, value=22                                                                  
 1002                        column=info:name, timestamp=1650086227559, value=lisi                                                               
2 row(s) in 0.0530 seconds

方式二: 利用Java API操作HBase
  • 1.创建Maven项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.javabs</groupId>
    <artifactId>JAVA_HBASE</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>1.2.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.6</version>
        </dependency>
    </dependencies>


</project>
  1. 导入坐标,并完成类的创建

  2. 编写代码
package cn.javabs;

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 org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.List;


public class HBaseTest {

    Configuration conf  = null;
    Connection conn = null;
    @Before
    public void  init() throws IOException {
        // 1. 获取配置对象conf
        conf  = HBaseConfiguration.create();
        // 2. 通过配置对象conf 设置hbase的入口
//        conf.set("hbase.rootdir","hdfs://hadoop1:9000/hbase");
        conf.set("hbase.zookeeper.quorum","hadoop1:2181");/*采用内置的zookeeper*/
        //  3. 获取连接,利用连接工厂进行创建连接,借助配置对象conf
        conn = ConnectionFactory.createConnection(conf);
    }

    /**
     * 创建表
     * @throws IOException
     */
    @Test
    public void  createTable() throws IOException {
      // 1. 通过conn获取表的管理对象
        Admin admin = conn.getAdmin();
        long beginTime = System.currentTimeMillis();
        // 2. 创建表的描述符对象,并且完成指定的表名:t_user
        HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("teacher".getBytes()));
        // 3. 创建列族、并赋值为info
        HColumnDescriptor hcd = new HColumnDescriptor("data");
        // 将列族添加到 表描述符对象
        tableDescriptor.addFamily(hcd);
        // 利用表管理器对象 来创建表
        admin.createTable(tableDescriptor);
        long endime = System.currentTimeMillis();
        System.out.println("创建完成,结束了!" +( endime -  beginTime) + "毫秒");

        // 关闭资源
        admin.close();
        conn.close();
    }

    /**
     * 指定查询
     * @throws IOException
     */
    @Test
    public void  getData() throws IOException{
        Table table = conn.getTable(TableName.valueOf("student"));
        // 1. 创建get对象是 查询参数的对象  用于指定要查询的哪一行
        Get get = new Get("1002".getBytes());
        // 2. 返回查询结果的数据
        Result result = table.get(get);
        // 3. 获取结果中所有的cell
        List<Cell> cellList = result.listCells();
        // 4. 循环遍历 所以的cell
        for(Cell c : cellList){
            // 5. 获取打印行健
            System.out.println("行:" + Bytes.toString(CellUtil.cloneRow(c)));
            // 6. 获取打印列族
            System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(c)));
            // 7. 获取打印值
            System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(c)));
        }
        // 8. 关闭资源
        table.close();
        conn.close();


    }
}


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
19天前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
69 0
|
16天前
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
37 9
|
25天前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
53 5
|
26天前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
16天前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
30 0
|
19天前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
36 0
|
1月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
87 1
|
21天前
|
Cloud Native 关系型数据库 分布式数据库
什么是云原生数据库PolarDB分布式版
本文介绍什么是云原生数据库PolarDB分布式版,也称为PolarDB分布式版,本手册中简称为PolarDB-X。
38 0
|
21天前
|
存储 监控 Shell
HBase2.1分布式部署
HBase2.1分布式部署