史上最全面最完整的大数据学习第八章 Hbase ---- 初识 与 环境搭建

HBase

Hbase ---- 初识 与 环境搭建

Hbase(二) shell操作

Hbase(三)Java API

Hbase(四)MR on Hbase & Hbase的 架构

Hbase(五) Hbase 的读写流程

Hbase完结篇 Hbase 集群搭建以及相关操作

今天的更新有点晚了,对不起对不起别骂了别骂了,在骂就傻了~

一、概述

HBase(Hadoop Database),是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。

在这里插入图片描述

1.1 CAP(之前说过了哦)

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

在这里插入图片描述

1.2 列存储(重点)

这个概念要从RDBMS说起,RDBMS操作的最小单元是行级数据

select name from user;
update  user set username = 'zkf' where sex = 'false';

即使是查询或者更新某个表中某个字段,对于RDBMS来说都是加载整行数据来进行数据的修改

因此RDBMS在处理单个数据的处理方式上,性能并不高,因为会做一些无用的IO操作。

在这里插入图片描述

1.3 HBase

官网地址: http://hbase.apache.org/

HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,可 以使用HBase。

1.3.1 特点

  • 大:一个表可以有上亿行,上百万列

  • 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。 结构稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

  • 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可 以有截然不同的列。

  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时 的时间戳。

  • 数据类型单一:HBase中的数据都是字符串,没有类型。

1.3.2 HBase和关系数据库区别

  • 数据库类型:HBase中的数据类型都是字符串类型(string)

  • 数据操作:HBase只有普通的增删改查等操作,没有表之间的关联查询

  • 存储模式:HBase是基于列式存储模式,而RDBMS是基于行式存储的

  • 应用场景:HBase适合存储大量数据,查询效率极高

1.4 HBase 数据结构

Hbase 数据结构其实很简单,涉及4个名词:RowKey|Column Family |Cell|TimeStamps,在说数据结构之前先看一张真正的HBase的表,有助于理解HBase的数据结构

行健时间戳列 蔟单元格(值)
“database.software.www”t1anchor:nameJohn
“database.software.www”t2info:addressBeiJing
“database.software.www”t3anchor:nameJames
“database.software.www”t4anchor:tel01012345678
“database.software.www”t4info:PC100000
“c.software.www”t1anchor:nameJames
“c.software.www”t2anchor:tel01012345678
“c.software.www”t3info:addressBeiJing

观察上述表格 ,这就是HBASE中存储数据的样子,可以看到HBASE行键是域名倒置的命名方式,时间戳就是当前时间,有不用的时间戳,在冒号之前就是列蔟的名字,但是你会发现,并不是每个的人列蔟都是相同的,你会发现每个人的列蔟都有可能不同,所以这就是体现出了HBase在存储数据的时候可以做到不存储某个属性的数据(在关系型数据中创建表之后,即使该属性没有数据也需要显示为null),这就是Hbase表存储稀疏的特点。

1.4.1 Rowkey | 行键

其实行键就是用来检索记录的主键

与 NoSQL 数据库一样,Row Key 是用来检索记录的主键 。访问HBase中的行,只有三种方式:
1. 通过单个RowKey访问
2. 通过Rowkey的range(正则)
3. 全表扫描

Rowkey可以是任意字符串(注意:最大长度为64 KB),在HBase内部,Rowkey保存为字节数组。存储时,数据按照Rowkey的字典顺序(byte order)排序存储。设计Rowkey时,要充分考虑排序存储这个特性,将经常一起读取的行(IO特性相似的行)存储放到一起。(位置相关性)

1.4.2 Column Family | 列蔟

列蔟:HBase表中的每个列,都归属于某个列蔟,其实就是列的集合。列蔟是表的 Schema 的一部分(而列不是),必须在使用表之前定义。 列名都以列蔟作为前缀。

1.4.3 Cell

关键字:无类型、字节码

由rowkey、column Family :column (值),version 组成的唯一的单元,值得注意是这里的Cell并不单单指当前列蔟的值,而是指好几个属性加起来所表示唯一的值。Cell 中的数据是没有类型 的,全部是字节码形式存储。

HBase和关系数据库区别

  • 数据库类型:HBase中的数据类型都是字符串类型(string)

  • 数据操作:HBase只有普通的增删改查等操作,没有表之间的关联查询

  • 存储模式:HBase是基于列式存储模式,而RDBMS是基于行式存储的

  • 应用场景:HBase适合存储大量数据,查询效率极高

1.4.4 TimeStamps

HBase中通过rowkey和columns确定的为一个存储单元成为Cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整形。时间戳可以由HBase(在数据写入时 自动)赋值, 此时时间戳是精确到毫秒的当前系统时间。时间戳也 可以由客户显示赋值。如果应用程序要避 免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 Cell 中,不同版本的数据按照时间倒序排序, 即最新的数据排在最前面。

二、HBase 环境搭建-单机

2.1 基础环境

  • Hadoop

  • Zookeeper

2.2 安装和配置

[root@HadoopNode00 ~]# tar -zxvf hbase-1.2.4-bin.tar.gz -C /home/hbase/ # 解压至对应的目录
[root@HadoopNode00 ~]# vi .bashrc   # 配置habse 环境变量

export HBASE_HOME=/home/hbase/hbase-1.2.4
export HBASE_MANAGES_ZK=false  # 使用外部ZK
export PATH=$PATH:$HBASE_HOME/bin

[root@HadoopNode00 ~]# source .bashrc    # 使环境变量生效


[root@HadoopNode00 ~]# vi /home/hbase/hbase-1.2.4/conf/hbase-site.xml


<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://HadoopNode00:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>HadoopNode00</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
</configuration>

[root@HadoopNode00 ~]# vi /home/hbase/hbase-1.2.4/conf/regionservers
HadoopNode00

2.3 启动

[root@HadoopNode00 ~]# start-dfs.sh   # 首先保证hdfs启动
[root@HadoopNode00 ~]# /home/zk/zookeeper-3.4.6/bin/zkServer.sh start /home/zk/zookeeper-3.4.6/conf/zk.cfg  # 首先保证zk启动
[root@HadoopNode00 ~]# start-hbase.sh  # 直接通过指令启动
[root@HadoopNode00 ~]# jps
1699 NameNode
2052 SecondaryNameNode
40660 QuorumPeerMain
42020 Jps
1851 DataNode
41708 HRegionServer  #  健康存活
18476 NodeManager
41548 HMaster        #  健康存活
18239 ResourceManager

2.4 连接

[root@HadoopNode00 ~]# hbase shell

2.5 Web UI

http://hostname:16010

今天的分享到此结束了,希望大家有个愉悦的周末,学习的同时也要注意休息哦~
给个三连吧 爱你们哦~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据学习一:大数据(离线分析)-spark写入hbase、mysql过程 Spark是一个快速、通用、可扩展的大数据处理引擎,可以用于离线批处理、交互式查询和流处理等多种场景。在Spark中,我们可以使用Spark SQL、DataFrame和Dataset等API来进行数据处理和分析。 在Spark中,我们可以将数据写入到HBase和MySQL等数据库中。下面是写入HBase和MySQL的过程: 1. 写入HBase (1)创建HBase表 在HBase中,我们需要先创建表,然后才能将数据写入到表中。可以使用HBase Shell或Java API来创建表。下面是使用HBase Shell创建表的示例: create 'mytable', 'cf' 其中,mytable是表名,cf是列族名。 (2)编写Spark程序 在Spark程序中,我们需要使用HBase API来将数据写入到HBase表中。下面是一个简单的示例: val conf = HBaseConfiguration.create() val table = new HTable(conf, "mytable") val put = new Put(Bytes.toBytes("rowkey")) put.add(Bytes.toBytes("cf"), Bytes.toBytes("column"), Bytes.toBytes("value")) table.put(put) 其中,conf是HBase配置对象,table是HBase表对象,put是HBase数据对象。我们可以使用put.add方法来添加数据,然后使用table.put方法将数据写入到HBase表中。 (3)运行Spark程序 在运行Spark程序之前,我们需要将HBase的相关jar包添加到Spark的classpath中。可以使用--jars参数来指定jar包的路径。下面是一个示例: spark-submit --class com.example.MyApp --jars /path/to/hbase.jar /path/to/myapp.jar 其中,MyApp是Spark程序的入口类,/path/to/hbase.jar是HBase的jar包路径,/path/to/myapp.jar是Spark程序的jar包路径。 2. 写入MySQL (1)创建MySQL表 在MySQL中,我们需要先创建表,然后才能将数据写入到表中。可以使用MySQL命令行或GUI工具来创建表。下面是使用MySQL命令行创建表的示例: CREATE TABLE mytable ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); 其中,mytable是表名,id、name和age是列名。 (2)编写Spark程序 在Spark程序中,我们需要使用JDBC API来将数据写入到MySQL表中。下面是一个简单的示例: val url = "jdbc:mysql://localhost:3306/mydb" val props = new Properties() props.setProperty("user", "root") props.setProperty("password", "password") val df = spark.read.format("csv").load("/path/to/data.csv") df.write.mode("append").jdbc(url, "mytable", props) 其中,url是MySQL连接字符串,props是连接属性对象,df是数据集对象。我们可以使用spark.read方法来读取数据,然后使用df.write方法将数据写入到MySQL表中。 (3)运行Spark程序 在运行Spark程序之前,我们需要将MySQL的相关jar包添加到Spark的classpath中。可以使用--jars参数来指定jar包的路径。下面是一个示例: spark-submit --class com.example.MyApp --jars /path/to/mysql.jar /path/to/myapp.jar 其中,MyApp是Spark程序的入口类,/path/to/mysql.jar是MySQL的jar包路径,/path/to/myapp.jar是Spark程序的jar包路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值