HBase集群搭建及hbaseshell使用

标签(空格分隔): hbase

大数据 (Hadoop)数据库 HBase功能 、表的设计 、环境配置与 Shell基本使用练习,最好与 RDBMS数据中的库和表进行对比 ,以下几点要注意 :

1) 企业中海量数据存储和实时查询的需求

2) HBase功能 ,与 RDBMS相比,优势在哪

3) HBase服务组件的说明、配置部署启动

4) HBase Shell中基本命令的使用

5) HBase 数据存储模型理解,结合实际操作


hadoop,spark,kafka交流群:459898801

1,hbase简介

Hbase是运行在Hadoop上的NoSQL数据库,它是一个分布式的和可扩展的大数据仓库,也就是说HBase能够利用HDFS的分布式处理模

式,并从Hadoop的MapReduce程序模型中获益。这意味着在一组商业硬件上存储许多具有数十亿行和上百万列的大表。除去Hadoop的优

势,HBase本身就是十分强大的数据库,它能够融合key/value存储模式带来实时查询的能力,以及通过MapReduce进行离线处理或者批处理

的能力。

HBase不是一个关系型数据库,它需要不同的方法定义你的数据模型,HBase实际上定义了一个四维数据模型,下面就是每一维度的定义:

行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。

列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。

列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。

版本:每列都可以有一个可配置的版本数量,你可以通过列修饰符的制定版本获取数据。格式如下:

{row key,column(=<family>+<label>),version}

注:

1,rowKey必须具有唯一性

2,数据是没有类型,以字节码的形式存储

3,表:(行key,列簇+列名,版本(timestamp))–>值

可以通过以下两

种方式获得HBase数据:

1,通过他们的行键,或者一系列行键的表扫描。

2,使用map-reduce进行批操作

在HBase中对数据的检索方式

第一种方式:

全部扫描 scan

第二种方式:

依据rowkey进行查询,

第三种方式:

范围查询 scan range

只支持前缀匹配查询

有两个原因令行键的设计十分重要:

表扫描是对行键的操作,所以,行键的设计控制着你能够通过HBase执行的实时/直接获取量。

当在生产环境中运行HBase时,它在HDFS上部运行,数据基于行键通过HDFS,如果你所有的行键都是以user-开头,那么很有可能你大部分数据都被分配一个节点上(违背了分布式数据的初衷),因此,你的行键应该是有足够的差异性以便分布式地通过整个部署。

你定义行键的方式取决于你想怎样存取那些行。如果你想以用户为基础存储数据,那么一个策略是利用字节队列在HBase中存储行键,所以我们可以创建

一个用户ID的哈希(例如MD5或SHA-1),然后在哈希后面附上时间(long类型)。使用哈希有两个重点:(1)是它能够将value分散开,数据

能够分布式地通过簇,(2)是它确保key的长度是一致的,以更加容易在表扫描中使用。

2,hbase VS RDMS

HBase和关系数据库的比较

HBase是一个基于列模式的映射数据库,它只能表示很简单的键-数据的映射关系,这大大简化了传统的关系数据库。与关系数据库相比,它有如下特点:

1,数据类型

    HBase只有简单的字符串类型,所有的类型都是交由用户自己处理的,它只保存字符串。
    而关系数据库有丰富的类型选择和存储方式。

2,数据操作

    HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,所以不能、也没有必要实现表和表之间的关联等操作。
    而传统的关系数据通常有各种各样的函数、连接操作。

3,存储模式

    HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的。
    传统的关系数据库是基于表格结构和行模式保护的。

4,数据维护

     确切的说,HBase的更新操作不应该叫做更新,虽然一个主键或列对应新的版本,但它的旧版本仍然会保留,所以它实际上是插入了新的数据,而不是传统关系数据库里面的替换修改。

5,可伸缩性

     HBase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松地增加或减少(在硬件错误的时候)硬件数量,并且对错误的兼容性比较高。
    而传统的关系数据库通常需要增加中间层才能实现类似的功能。

3,hbase部署

3.1 安装Zookeeper

  1. 安装JDK、配置环境变量、验证java -version。
  2. 下载、赋执行权限、解压。

    (1).下载地址:

    zookeeper-3.4.5下载

    (2).赋执行权限:

chmod u+x zookeeper-3.4.5.tar.gz

(3).解压:

tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/modules/
  1. 配置

    复制配置文件:

cp conf/zoo_sample.cfg conf/zoo.cfg

配置数据存储目录:

dataDir=/opt/modules/zookeeper-3.4.5/data

创建数据存储目录:

mkdir /opt/modules/zookpeer-3.4.5/data
  1. 启动
    bin/zkServer.sh start
  1. 检测
    查看状态:bin/zkServer.sh status
Client Shell:bin/zkCli.sh

3.2 安装hbase

1,解压hbase

tar -zxvf /opt/softwares/hbase-0.98.6-hadoop2-bin.tar.gz -C /opt/modules/

2,删除自带的hadoop库

rm -rf hadoop-*.jar

3,在hbase-env.sh更改如下内容

export JAVA_HOME=/opt/modules/jdk1.7.0_67
export HBASE_MANAGES_ZK=false

4,regionservers.中添加如下内容

adddeiMac.local

5,在hbse-site.xml中添加如下配置

    <property>
        <name>hbase.tmp.dir</name>
        <value>/opt/modules/hbase-1.0.0-cdh5.4.4/data/tmp</value>
    </property>

    <property >
        <name>hbase.rootdir</name>
        <value>hdfs://adddeiMac.local:8020/hbase</value>
    </property>

    <property >
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>adddeiMac.local</value>
    </property>

6,启动hbase

bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver

7,可在web浏览器中查看

http://miaodonghua1.host:60010/

8,在Zookeeper中查看hbase信息

9,解决不能删除的问题

在secureCRT中,点击【选项】【会话选项】【终端】【仿真】,右边的终端选择Linux,在hbase shell中如输入出错,按住SHIT+DELETE 即可删除!

10,启动hbase命令行控制台

bin/hbase shell

11,测试hbase指令

查看状态及版本信息

status
version

创建表并插入数据

create ‘user‘,‘info‘
list ---列出表
describe ‘user‘---查看表信息
create ‘user‘,‘info‘
put ‘user‘,‘1001‘,‘info:name‘,‘lisi‘
put ‘user‘,‘1001‘,‘info:age‘,‘18‘
put ‘user‘,‘1001‘,‘info:sex‘,‘male‘

对表进行扫描查询

scan ‘user‘

获取表的某一个rowkey所有信息

get ‘user‘,‘1001‘

获取表的某一列

get ‘user‘,‘1001‘,‘info:name‘

删除表的一列

delete ‘user‘,‘10012‘,‘info:sex‘

禁止表

disable ‘user‘

使能表

enable ‘user‘

删除表先禁用

4,hbase存储模型

1,Table中所有行都按照row key的字典序排列;

2,Table在行的方向上分割为多个Region;

下图是大表的分布式,永久分区逻辑存储结构图

3,REgion按大小分割,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候region就会分为两个新的region,之后会有越来越多的region;

4,Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上;

5,Region虽然是分布式存储的最小单元,但并不是存储的最小单元。

-Region由一个或者多个store组成,每个store保存一个columns family;

-每个Store又有一个memStore和0至多个StoreFile组成;

-memStore存储在内存中,StoreFile存储在HDFS上。

-每个column family存储在HDFS上的一个单独文件中;

-Key和Version number在每个column family中均有一份

-空值不会被保存

-Hbase为每个值维护了多级索引,即:

5,hbase在hdfs上各目录的意义

/hbase/.tmp
/hbase/WALs
/hbase/archive
/hbase/corrupt
/hbase/data
/hbase/hbase.id
/hbase/hbase.version
/hbase/oldWALs

1、/hbase/.tmp

这个目录不变还是原来的tmp目录,作用是一样的。

2、/hbase/WALs

日志存储目录

3、/hbase/archive

HBase 在做 Split或者 compact 操作完成之后,会将 HFile 移到.archive 目录中,然后将之前的 hfile 删除掉,该目录由 HMaster 上的一个定时任务定期去清理。

4、/hbase/corrupt

存储HBase做损坏的日志文件,一般都是为空的。

5、/hbase/data

这个才是 hbase 的核心目录,0.98版本里支持 namespace 的概念模型,系统会预置两个 namespace 即:hbase和default

5.1 /hbase/data/default

 这个默认的namespace即没有指定namespace 的表都将会flush 到该目录下面。

5.2 /hbase/data/hbase

 这个namespace 下面存储了 HBase 的 namespace、meta 和acl 三个表,这里的 meta 表跟0.94版本的.META.是一样的,自0.96之后就已经将 ROOT 表去掉了,直接从Zookeeper 中找到meta 表的位置,然后通过 meta 表定位到 region。 namespace 中存储了 HBase 中的所有 namespace 信息,包括预置的hbase 和 default。acl 则是表的用户权限控制。
 如果自定义一些 namespace 的话,就会再/hbase/data 目录下新建一个 namespace 文件夹,该 namespace 下的表都将 flush 到该目录下。

6、/hbase/hbase.id

 它是一个文件,存储集群唯一的 cluster id 号,是一个 uuid。

7、/hbase/hbase.version

 同样也是一个文件,存储集群的版本号,貌似是加密的,看不到,只能通过web-ui 才能正确显示出来。

8、/hbase/oldWALs

当WALs 文件夹中的 HLog 没用之后会 move 到oldWALs中,HMaster 会定期去清理。

时间: 2024-10-08 07:10:11

HBase集群搭建及hbaseshell使用的相关文章

hbase 集群搭建(公司内部测试集群)

我用的是cdh4.5版本:配置文件:$HBASE_HOME/conf/hbase-env.shexport JAVA_HOME=$JAVA_HOMEexport JAVA_HOME=/home/hadoop/jdk1.7.0_51export HBASE_CLASSPATH=$HBASE_HOME/conf# Tell HBase whether it should manage it's own instance of Zookeeper or not.export HBASE_MANAGES

Hbase架构,组件分析 ,Hbase集群搭建

1.hbase的架构 Hbase主要由master,regionserver,zookeeper,client,hdfs文件系统构成. Zk:记录hbase的表的元数据信息 hamster:进行region的分配,发出操作指令 Hlog:记录HregionServer的操作日志,保证数据的可靠性 HRegion:存储Hbase表的信息 store:Hbase表的不同列族的存储 DataNode:存储Hbase的Hlog及Hbase表的Hfile的文件持久化存储 2.hbase的组件及作用 1)C

Hbase集群搭建及所有配置调优参数整理及API代码运行

最近为了方便开发,在自己的虚拟机上搭建了三节点的Hadoop集群与Hbase集群,hadoop集群的搭建与zookeeper集群这里就不再详细说明,原来的笔记中记录过.这里将hbase配置参数进行相应整理,方便日后使用. 首先vi ~/.bash_profile将hbase的环境变量进行配置,最后source ~./bash_profile使之立即生效 1.修改hbase-env.sh 由于我使用的是外置的zookeeper,所以这里HBASE_MANAGES_ZK设置为,设置参数: # The

Hbase集群搭建

JDK版本和HBASE对应关系 HBase Version JDK 6 JDK 7 JDK 8 2 Not Supported Not Supported yes 1.3 Not Supported yes yes 1.2 Not Supported yes yes 1.1 Not Supported yes Running with JDK 8 will work but is not well tested. 1 Not Supported yes Running with JDK 8 wi

Hbase 集群搭建

配置hbasse 先配置一台 然后 给两台分发 1.上传tar包 2.解压 tar -zxvf hbase-1.1.2-bin.tar.gz 3.配环境 vim /etc/profile export HBASE_HOME=/root/Downloads/hbase-1.1.2 export PATH=$PATH:$HBASE_HOME/bin source /etc/profile 4.到hbase ---conf路径下 vim hbase-env.sh export HBASE_MANAGE

zookeeper和hbase集群搭建

zookeeper与hbase分布式搭建 zookeeper集群 1.zookeeper,故名思意,就是动物园管理员的意思,Hadoop生态里面的东西基本上都是一些小动物的昵称,所以,就这么来了 这里接前篇的Hadoop分布式搭建,所有平台都搭建在/root/app目录下 (千万别学我用根用户弄,我是为了懒得敲sudo) 我们将下载的zookeeper安装包上传至虚拟机中,然后解压 tar -zxvf zookeeper-3.4.10.tar.gz 解压好了之后,我们建立两个文件夹,一个是zkd

Hbase集群搭建一(Mesos搭建)

服务器准备:下述内容绑定 /etc/hosts 10.110.110.10 master 10.110.110.11 slave1 10.110.110.12 slave2 操作用户准备:root,hbase Mesos:分布式内核系统,apache mesos 在整个数据中心根据资源利用率和资源占用情况在整个数据中心进行任务调度.利用zookeeper实现master和slave的高可用 开始安装 Mesos rpm报软件下载地址:http://open.mesosphere.com/down

虚拟机zookeeper和hbase集群搭建

集群zookeeper dataDir=/usr/local/zookeeper/dataDir dataLogDir=/usr/local/zookeeper/dataLogDir # the port at which the clients will connect clientPort=2181 # master server.1=sjck-node01:2888:3888 server.2=sjck-node02:2888:3888 server.3=sjck-node03:2888:

Hbase集群搭建二(Hadoop搭建)

服务器准备:下述内容绑定 /etc/hosts 10.110.110.10 master 10.110.110.11 slave1 10.110.110.12 slave2 操作用户准备:hbase 1. 下载源码:mesos hadoop 源码并解压至 hadoop 2. 进入hadoop文件夹,编辑 pom.xml 文件确认 mesos 版本 <mesos.version>1.0.0</mesos.version> 3. 安装jdk:下载地址 (root用户安装) [[emai