千家信息网

Hbase的安装和基本使用

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,Hbase介绍HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HD
千家信息网最后更新 2025年02月03日Hbase的安装和基本使用

Hbase介绍

HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。

Hbase安装

安装环境
三台虚拟机:master、slave1、slave2,
已经安装好Hadoop环境和zookeeper

下载Hbase安装包,根据你自己的需求下载对应的安装包

wget http://archive.apache.org/dist/hbase/0.98.24/hbase-0.98.24-hadoop2-bin.tar.gz

也可以直接去镜像网站下载,地址:http://archive.apache.org/dist/
下载好后,解压安装包

tar -zxvf hbase-0.98.24-hadoop2-bin.tar.gz

添加Hbase的环境变量

//打开~/.bashrc文件vim ~/.bashrc//然后在里边追加两行export HBASE_HOME=/usr/local/src/hbase-0.98.24-hadoop2export PATH=$PATH:$HBASE_HOME/bin//然后保存退出,source一下source ~/.bashrc

配置Hbase
打开Hbase目录下conf/hbase-env.sh(如果没有新建一个)

vim conf/hbase-env.sh//添加下边两个配置export JAVA_HOME=/usr/local/src/jdk1.8.0_171  //java homeexport HBASE_MANAGES_ZK=false  //是否使用自带的zookeeper,自己有安装的话就用自己的,没有就用自带的

配置hbase-site.xml文件

vim conf/hbase-site.xml//添加如下配置                        hbase.rootdir                hdfs://master:9000/hbase                                hbase.cluster.distributed                true                                hbase.zookeeper.quorum                master,slave1,slave2                                dfs.replication                2        

修改regionservers文件

vim conf/regionservers//添加需要安装regionserver的机器节点slave1slave2

到这里Hbase简单的环境就搭建好了

Hbase的启动

启动Hbase需要首先启动Hadoop和zookeeper

启动Hadoop

master机器节点

//进入到Hadoop目录的sbin下./start-all.sh 

查看Hadoop是不是启动成功
master机器节点,jps查看进程看到图中进程说明成功启动

slave机器节点,jps查看

Zookeeper启动

master和slave节点都执行,进入zookeeper安装目录bin目录下

zkServer.sh start

然后jps查看进程,能看到QuorumPeerMain说明Zookeeper启动成功


####启动Hbase
在Hadoop和Zookeeper都启动之后就可以启动Hbase了,进入Hbase的安装目录的bin目录下

./start-hbase.sh

jps查看进程,在master能看到Hmaster进程,在slave节点能看到HRegionServer进程,说明Hbase启动成功


也可以通过网址来检查,http://master:60010/master-status

Hbase简单的shell命令操作

进入shell命令模式,在bin目录下执行

./hbase shellhbase(main):001:0>
  • 查看当前所有表
hbase(main):003:0> listTABLE                                                                                                                       0 row(s) in 0.1510 seconds=> []
  • 创建表
hbase(main):006:0> create 'test_table' , 'mate_data', 'action'0 row(s) in 2.4390 seconds=> Hbase::Table - test_table
  • 查看表详情
hbase(main):009:0> desc 'test_table'Table test_table is ENABLED                                                                                                 test_table                                                                                                                  COLUMN FAMILIES DESCRIPTION                                                                                                 {NAME => 'action', 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'}                                                                                                   {NAME => 'mate_data', 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'}                                                                                                2 row(s) in 0.0520 seconds
  • 增加列簇
hbase(main):010:0> alter 'test_table', {NAME => 'new', VERSIONS => '2', IN_MEMORY => 'true'}Updating all regions with the new schema...0/1 regions updated.1/1 regions updated.Done.0 row(s) in 2.2790 secondshbase(main):011:0> desc 'test_table'Table test_table is ENABLED                                                                                                 test_table                                                                                                                  COLUMN FAMILIES DESCRIPTION                                                                                                 {NAME => 'action', 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'}                                                                                                   {NAME => 'mate_data', 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'}                                                                                                {NAME => 'new', BLOOMFILTER => 'ROW', VERSIONS => '2', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                                       3 row(s) in 0.0570 seconds
  • 删除列簇
hbase(main):013:0> alter 'test_table', {NAME => 'new', METHOD => 'delete'}Updating all regions with the new schema...0/1 regions updated.1/1 regions updated.Done.0 row(s) in 2.2390 secondshbase(main):014:0> desc 'test_table'Table test_table is ENABLED                                                                                                 test_table                                                                                                                  COLUMN FAMILIES DESCRIPTION                                                                                                 {NAME => 'action', 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'}                                                                                                   {NAME => 'mate_data', 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'}                                                                                                2 row(s) in 0.0430 seconds
  • 删除表
//首先disablehbase(main):016:0> disable 'test_table'0 row(s) in 1.2980 seconds//然后再删除hbase(main):017:0> drop 'test_table'0 row(s) in 0.2020 seconds//查看是否删除hbase(main):018:0> listTABLE                                                                                                                       0 row(s) in 0.0070 seconds=> []
  • 往表里写数据并查看
hbase(main):021:0> put 'test_table', '1001', 'mate_data:name', 'zhangsan'0 row(s) in 0.1400 secondshbase(main):022:0> put 'test_table', '1002', 'mate_data:name', 'lisi'0 row(s) in 0.0110 secondshbase(main):023:0> put 'test_table', '1001', 'mate_data:gender', 'woman'0 row(s) in 0.0170 secondshbase(main):024:0> put 'test_table', '1002', 'mate_data:age', '25'0 row(s) in 0.0140 secondshbase(main):025:0> scan 'test_table'ROW                              COLUMN+CELL                                                                                 1001                            column=mate_data:gender, timestamp=1540034584363, value=woman                               1001                            column=mate_data:name, timestamp=1540034497293, value=zhangsan                              1002                            column=mate_data:age, timestamp=1540034603800, value=25                                     1002                            column=mate_data:name, timestamp=1540034519659, value=lisi                                 2 row(s) in 0.0410 seconds
  • 读取数据
hbase(main):026:0> get 'test_table', '1001'COLUMN                           CELL                                                                                        mate_data:gender                timestamp=1540034584363, value=woman                                                        mate_data:name                  timestamp=1540034497293, value=zhangsan                                                    2 row(s) in 0.0340 secondshbase(main):027:0> get 'test_table', '1001', 'mate_data:name'COLUMN                           CELL                                                                                        mate_data:name                  timestamp=1540034497293, value=zhangsan                                                    1 row(s) in 0.0320 seconds
  • 查看行数
hbase(main):028:0> count 'test_table'2 row(s) in 0.0390 seconds=> 2
  • 清空表数据
hbase(main):029:0> truncate 'test_table'Truncating 'test_table' table (it may take a while): - Disabling table... - Truncating table...0 row(s) in 1.5220 seconds

通过Python脚本来操作Hbase

不能通过Python脚本来直接操作Hbase,必须要借助thrift服务作为中间层,所以需要两个Python模块:hbase模块和thrift模块,和安装thrift来实现Python对Hbase的操作
####安装thrift并获得thrift模块

  • 下载安装thrift
wget http://archive.apache.org/dist/thrift/0.11.0/thrift-0.11.0.tar.gztar -zxvf thrift-0.11.0.tar.gzcd thrift-0.11.0/./configuremakemake installcd lib/py/build/lib.linux-x86_64-2.7

然后就能看到thrift模块

获得hbase模块
  • 下载Hbase源码包
wget http://archive.apache.org/dist/hbase/0.98.24/hbase-0.98.24-src.tar.gztar -zxvf hbase-0.98.24-src.tar.gz
  • 产生hbase模块
//进入该目录cd /usr/local/src/hbase-0.98.24/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift//执行如下命令,产生gen-py目录thrift --gen py Hbase.thrift//进入该目录就能得到生成的hbase模块cd gen-py
使用Python写数据
  • 创建表
from thrift.transport import TSocketfrom thrift.protocol import TBinaryProtocolfrom hbase import Hbasefrom hbase.ttypes import *transport = TSocket.TSocket('master', 9090)transport = TTransport.TBufferedTransport(transport)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Hbase.Client(protocol)transport.open()base_info_contents = ColumnDescriptor(name='columnName1', maxVersions=1)other_info_contents = ColumnDescriptor(name='columnName2', maxVersions=1)client.createTable('tableName', [base_info_contents,other_info_contents])
  • 插入数据
from thrift.transport import TSocketfrom thrift.protocol import TBinaryProtocolfrom hbase import Hbasefrom hbase.ttypes import *transport = TSocket.TSocket('master', 9090)transport = TTransport.TBufferedTransport(transport)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Hbase.Client(protocol)transport.open()table_name = 'tableName'rowKey = 'rowKeyName'mutations = [Mutation(column="columnName:columnPro", value="valueName")]client.mutateRow(table_name,rowKey,mutations,None)
  • 查看数据
from thrift.transport import TSocketfrom thrift.protocol import TBinaryProtocolfrom hbase import Hbasefrom hbase.ttypes import *transport = TSocket.TSocket('master', 9090)transport = TTransport.TBufferedTransport(transport)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Hbase.Client(protocol)transport.open()table_name = 'tableName'rowKey = 'rowKeyName'result = client.getRow(table_name,rowKey,None)for l in result:    print "the row is "+ l.row    for k,v in l.columns.items():        print '\t'.join([k,v.value])
from thrift.transport import TSocketfrom thrift.protocol import TBinaryProtocolfrom hbase import Hbasefrom hbase.ttypes import *transport = TSocket.TSocket('master', 9090)transport = TTransport.TBufferedTransport(transport)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Hbase.Client(protocol)transport.open()table_name = 'tableName'scan = TScan()id = client.scannerOpenWithScan(table_name,scan,None)result = client.scannerGetList(id,10)for l in result:    print "========="    print "the row is "+ l.row    for k,v in l.columns.items():        print '\t'.join([k,v.value])
目录 数据 模块 节点 进程 成功 文件 机器 环境 配置 命令 两个 脚本 服务 稀疏 中间层 分布式 变量 可以通过 地址 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库获取系统日期的函数是 掌控安全学院服务器安全大讲堂 wifi 数据库 无锡工程软件开发哪家好 视频服务器的作用 未来不再有软件开发 有关网络安全的好处 数据库端口号分别是多少 数据库分表后查询分页 互联网共享科技有限公司 网络安全集训感悟 南京云问网络技术怎么样 分布式数据库调用失败 手机自带的服务器代码 从软件开发到物联网 绍兴飓风网络技术有限公司周展宇 国产自主可控的数据库厂商 网络技术有限公司单位简介 网络安全博士研究计划书 机房网络安全检查存在问题 计算机网络安全顺口溜 禁闭求生为什么进不去人家服务器 软件开发高薪吗 广东云传网络技术有限公司 校园网络安全防诈骗方法 sql数据库登录名权限安全 本地新建finedb数据库 潍坊科技学院互联网登录网址 青少年网络安全线上答题 戴尔服务器安装2008蓝屏
0