当前位置:首页 » 服务存储 » hbase与关系型存储方式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hbase与关系型存储方式

发布时间: 2022-08-03 07:33:44

A. hbase数据库是关系型数据库吗

Hive 存储格式和关系型数据库之间进行导入导出

最近更新时间:2020-09-29 15:54:18

前往 GitHub 编辑

  • 我的收藏

    本页目录:

  • 1. 开发准备

  • 2. 将关系型数据库导入到 Hive 中

  • 3. 将 Hive 导入到关系型数据库中

  • 使用 HDFS 中的 Hive 数据

  • 使用 Hcatalog 进行导入

  • 4. 将 orc 格式的 Hive 表格导入到关系型数据库中

  • 本文介绍了使用腾讯云 Sqoop 服务将数据在 Mysql 和 Hive 之间相互导入导出的方法。

    1. 开发准备

  • 确认已开通腾讯云,并且创建了一个 EMR 集群。在创建 EMR 集群的时候需要在软件配置界面选择 Sqoop,Hive 组件。

  • Sqoop 等相关软件安装在路径 EMR 云服务器的/usr/local/service/路径下。

  • 2. 将关系型数据库导入到 Hive 中

    本节将继续使用上一节的用例。

    进入 EMR 控制台,复制目标集群的实例 ID,即集群的名字。再进入关系型数据库控制台,使用 Ctrl+F 进行搜索,找到集群对应的 MySQL 数据库,查看该数据库的内网地址 $mysqlIP。

    登录 EMR 集群中的任意机器,最好是登录到 Master 节点。登录 EMR 的方式请参考登录 Linux 实例。这里我们可以选择使用 WebShell 登录。单击对应云服务器右侧的登录,进入登录界面,用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入命令行界面。

    在 EMR 命令行先使用以下指令切换到 Hadoop 用户,并进入 Hive 文件夹:

  • [root@172 ~]# su hadoop[hadoop@172 ~]# cd /usr/local/service/hive

  • 新建一个 Hive 数据库:

  • [hadoop@172 hive]$ hive

  • hive> create database hive_from_sqoop;

  • OK

  • Time taken: 0.167 seconds

  • 使用 sqoop-import 命令把上一节中创建的 MySQL 数据库导入到 Hive 中:

  • [hadoop@172 hive]# cd /usr/local/service/sqoop

  • [hadoop@172 sqoop]$ bin/sqoop-import --connect jdbc:mysql://$mysqlIP/test --username root -P --table sqoop_test_back --hive-database hive_from_sqoop --hive-import --hive-table hive_from_sqoop

  • $mysqlIP:腾讯云关系型数据库(CDB)的内网地址。

  • test:MySQL 数据库名称。

  • --table:要导出的 MySQL 表名。

  • --hive-database:Hive 数据库名。

  • --hive-table:导入的 Hive 表名。

  • 执行指令需要输入您的 MySQL 密码,默认为您创建 EMR 集群时设置的密码。执行成功后,可以在 Hive 中查看导入的数据库:

  • hive> select * from hive_from_sqoop;OK1 first 2018-07-03 16:07:46.0 spark2 second 2018-07-03 15:30:57.0 mr3 third 2018-07-03 15:31:07.0 yarn4 forth 2018-07-03 15:39:38.0 hbase5 fifth 2018-07-03 16:02:29.0 hive6 sixth 2018-07-03 16:09:58.0 sqoopTime taken: 1.245 seconds, Fetched: 6 row(s)

  • 3. 将 Hive 导入到关系型数据库中

    Sqoop 支持将 Hive 表中的数据导入到关系型数据库中。先在 Hive 中创建新表并导入数据。

    登录 EMR 集群中的任意机器,最好是登录到 Master 节点。在 EMR 命令行先使用以下指令切换到 Hadoop 用户,并进入 Hive 文件夹:

  • [root@172 ~]# su hadoop[hadoop@172 ~]# cd /usr/local/service/hive

  • 新建一个 bash 脚本文件 gen_data.sh,在其中添加以下代码:

  • #!/bin/bashMAXROW=1000000 #指定生成数据行数for((i = 0; i < $MAXROW; i++))doecho $RANDOM, "$RANDOM"done

  • 并按如下方式执行:

  • [hadoop@172 hive]$ ./gen_data.sh > hive_test.data

  • 这个脚本文件会生成1,000,000个随机数对,并且保存到文件 hive_test.data 中。

    使用如下指令把生成的测试数据先上传到 HDFS 中:

  • [hadoop@172 hive]$ hdfs dfs -put ./hive_test.data /$hdfspath

  • 其中 $hdfspath 为 HDFS 上的您存放文件的路径。

    连接 Hive 并创建测试表:

  • [hadoop@172 hive]$ bin/hivehive> create database hive_to_sqoop; #创建数据库 hive_to_sqoopOK

  • Time taken: 0.176 secondshive> use hive_to_sqoop; #切换数据库OK

  • Time taken: 0.176 secondshive> create table hive_test (a int, b string)hive> ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';#创建数据表 hive_test, 并指定列分割符为’,’

  • OK

  • Time taken: 0.204 secondshive> load data inpath "/$hdfspath/hive_test.data" into table hive_test; #导入数据

  • $hdfspath 为 HDFS 上的您存放文件的路径。

    成功后可使用quit命令退出 Hive 数据仓库。连接关系型数据库并创建对应的表格:

  • [hadoop@172 hive]$ mysql -h $mysqlIP –p

  • Enter password:

  • 其中 $mysqlIP 为该数据库的内网地址,密码为您创建集群时设置的密码。

    在 MySQL 中创建一个名为 test 的表格,MySQL 中的表字段名字和 Hive 中的表字段名字必须完全一致:

  • mysql> create table table_from_hive (a int,b varchar(255));

  • 成功创建表格后即可退出 MySQL。

    使用 Sqoop 把 Hive 数据仓库中的数据导入到关系型数据库中有两种方法,可以直接使用 HDFS 存储的 Hive 数据,也可以使用 Hcatalog 来进行数据的导入。

    使用 HDFS 中的 Hive 数据

    切换进入 Sqoop 文件夹,然后使用以下指令把 Hive 数据库中的数据导出到关系型数据库中:

  • [hadoop@172 hive]$ cd ../sqoop/bin

  • [hadoop@172 bin]$ ./sqoop-export --connect jdbc:mysql://$mysqlIP/test --username root -P

  • --table table_from_hive --export-dir /usr/hive/warehouse/hive_to_sqoop.db/hive_test

  • 其中 $mysqlIP 为您的关系型数据库的内网 IP 地址,test 为关系型数据库中的数据库名,--table 后跟的参数为您的关系型数据库的表名,--export-dir 后跟的参数为 Hive 表中的数据在 HDFS 中存储的位置。

    使用 Hcatalog 进行导入

    切换进入 Sqoop 文件夹,然后使用以下指令把 Hive 数据库中的数据导出到关系型数据库中:

  • [hadoop@172 hive]$ cd ../sqoop/bin

  • [hadoop@172 bin]$ ./sqoop-export --connect jdbc:mysql://$mysqlIP/test --username root -P

  • --table table_from_hive --hcatalog-database hive_to_sqoop --hcatalog-table hive_test

  • 其中 $mysqlIP 为您的关系型数据库的内网 IP 地址,test 为关系型数据库中的数据库名,--table 后跟的参数为您的关系型数据库的表名,--hcatalog-database 后面跟的参数是要导出的 Hive 表所在的数据库的名称,--hcatalog-table 后面跟的参数是要 Hive 中要导出的表的名称。

    操作完成后可以进入关系型数据库查看是否导入成功:

  • [hadoop@172 hive]$ mysql -h $mysqlIP –p #连接 MySQLEnter password:mysql> use test;

  • Database changed

  • mysql> select count(*) from table_from_hive; #现在表中有1000000条数据+----------+| count(*) |+----------+| 1000000 |+----------+1 row in set (0.03 sec)

  • mysql> select * from table_from_hive limit 10; #查看表中前10条记录+-------+----------+| a | b |

  • +-------+----------+

  • | 28523 | "3394" || 31065 | "24583" |

  • | 399 | "23629" || 18779 | "8377" |

  • | 25376 | "30798" || 20234 | "22048" |

  • | 30744 | "32753" || 21423 | "6117" |

  • | 26867 | "16787" || 18526 | "5856" |

  • +-------+----------+

  • 10 rows in set (0.00 sec)

  • 更多关于 sqoop-export 命令的参数可以通过如下命令查看:

  • [hadoop@172 bin]$ ./sqoop-export --help

  • 4. 将 orc 格式的 Hive 表格导入到关系型数据库中

B. hbase 的存储是排序存储的吗

hbase是非关系型的,你可以把xml父子节点解析的结果存入hbase

C. Hbase的特性有哪些

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

行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。
列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。
版本:每列都可以有一个可配置的版本数量,你可以通过列修饰符的制定版本获取数据。

D. hadoop如何存贮关系型数据

关系数据在hadoop上应该用hive
hbase没用,他的结构对关系数据没有优化,只是擅长做键值对查询。
你用关系数据肯定是用它的关系关联操作,这个存hive足够了

E. 传统的行存储和(HBase)列存储的区别

列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。

传统的(Oracle)行存储和(Hbase)列存储的区别

这里写图片描a
1、数据是按行存储的
2、没有索引的查询使用大量I/O
3、建立索引和物化视图需要花费大量时间和资源
4、面对查询的需求,数据库必须被大量膨胀才能满足性能需求

这里写图片描述
1、数据按列存储–每一列单独存放
2、数据即是索引
3、只访问查询涉及的列–大量降低系统IO
4、每一列由一个线索来处理–查询的并发处理
5、数据类型一致,数据特征相似–高效压缩

F. 怎样将关系型数据表转换至hbase数据表

首先需要把关系型数据库的数据表的数据增加由 “纵向延伸”,转变为HBase数据表的“横向延伸”
一、Hbase的存储结构
a) HBase以表(HTable)的形式存储数据
b) HTable包括很多行,每行通过RowKey唯一标记,行按照RowKey的字典序排列,表在行的方向上分割为多个HRegion
c) 每行包括一个RowKey和多个Column Family,数据按照Column Family进行物理切割,即不同Column Family的数据放在不同的Store中,一个Column Family放在一个Strore中
d) HRegion由多个Store组成。一个Store由物理上存在的一个MemStrore(内存中)和多个StoreFile(HFile)中
二、设计原则:
(1)rowkey
a) rowkey是hbase的key-value存储中的key,通常使用用户要查询的字段作为rowkey ,查询结果作为value ,HBase中RowKey是按照字典序排列的

(2)Column Family的设计需遵循:
a) 不同Column Family的数据,在物理上是分开的,尽量避免一次请求需要拿到的Column分布在不同的Column Family中;
b) CF的数量尽量要少,原因是过多的columnfamily之间会互相影响
(3) column
对于column需要扩展的应用,column可以按普通的方式设计,但是对于列相对固定的应用,最好采用将一行记录封装到一个column中的方式,这样能够节省存储空间。封装的方式推荐protocolbuffer。

G. hbase和关系型数据库的区别

Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据。存储的量大概在10亿级别,再往上性能就下降了,除非另外分库。
Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模糊匹配查询(其实是前模糊或全模糊)不擅长,但存储的量可以达到百亿甚至以上,比mongodb的存储量大多了。

H. Hbase怎样进行物理存储

hbase不是按行存储,你想一行有多列族的情况下,就会把数据存在多个文件下,按行存储的意思,是会把行数据存在一个文件中,所以hbase是按列存储的。

应该说hbase和传统关系型数据库还是有些相似的地方,起码在hfile中hbase列族下一行的列是相邻存储的,这点跟传统关系型数据库应该是类似的。

I. HBase数据到底是怎么存储的

每个列簇对应HDFS中的一个单独文件,hbase不是按行存储,你想一行有多列族的情况下,就会把数据存在多个文件下,按行存储的意思,是会把行数据存在一个文件中,所以hbase是按列存储的。

应该说hbase和传统关系型数据库还是有些相似的地方,起码在hfile中hbase列族下一行的列是相邻存储的,这点跟传统关系型数据库应该是类似的。