结构化与半结构化与非结构化数据
1.结构化数据
结构化的数据是指可以使用关系型数据库表示存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。例子:
id name age gender
1 lyh 12 male
2 liangyh 13 female
3 liang 18 male
所以,结构化的数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助
但是它的扩展性不好,比如需要的时候加个字段,在实际运用中每次都进行反复的表结构变更,这容易导致后台接口从数据库取数据出错。
2.半结构化数据
半结构化数据是结构化数据的一种形式,它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构,但包含相关标记,用来分隔语义元素以及对记录和字段进行分层。因此,它也被称为自描述的结构。
半结构化数据,属于同一类实体可以有不同的属性,即使他们被组合在一起,这些属性的顺序并不重要。
常见的半结构数据有XML和JSON,对于XML文件,例如
<person>
<name>A</name>
<age>13</age>
<gender>female</gender>
</person>
从上面的例子中,属性的顺序是不重要的,不同的半结构化数据的属性的个数是不一定一样的。
标签是树的根节点,
和
`标签是子节点。通过这样的数据格式,可以自由地表达很多有用的信息,包括自我描述信息(元数据)。所以,半结构化数据的扩展性是很好的。
3.非结构化数据
非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、各类报表、图像和音频/视频信息等等。
hbase数据库是一个NoSql(Not Only SQL,泛指非关系型数据库)。
Hbase是一个分布式的、面向列,运行在HDFS上的数据库
适合存储访问超大规模的数据集,可以提供数据的实时随机读写
3.1hbase与hive
1.随着数据量越来越大,传统的关系型数据库不能满足存储和查询的需求。而hive虽然能够满足存储的要求,但是hive的本质也是利用底层的mr程序, 所以读写速度不快。
2.hive不能满足非结构化的、半结构化的存储,hive的主要作用是做分析和统计,hive用于存储是无意义的。
3.2hbase与hive的整合
3.2.1 整合的原因
- HBase的最主要的目的是做数据存储
- Hive的最主要作用是做数据分析
- 整合的目的是为了方便的在项目中存储+分析
- hbase中的表数据在hive中能看到,hive中的表数据在hbase中也能看到
3.2.2整合hive到hbase中
hive中创建内部表
在hive中建立hbase的内部映射表,会同时在hive和hbase两端都执行建表操作,要求hbase端的表事先不存在。hive端执行表删除操作时,hbase对应的表也会被删除。
1> hive中建表
create table if not exists hive2hbase01(
uid int,
uname string,
age int,
sex string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
"hbase.columns.mapping"=":key,base_info:name,base_info:age,base_info:sex"
)
tblproperties(
"hbase.table.name"="hive2hbase"
)
;
2> hbase查看表结构
3> hive中插入数据
hive中数据插入hivein2hbase01中,插入操作会通过hive的MR实现插入操作。
insert into hive2hbase01 values(1,'mike',18,'man');
4> hbase查看数据
hive中创建外部表
在hive中建立hbase的外部映射表,只在hive端执行建表操作,要求hbase端的表事先存在。hive端执行表删除操作时,只会删除hive端的外部映射表,对hbase中被映射的表无影响
1> hbase已存在表
0>create 'ns1:t1','f1'
0>put 'ns1:t1','1','f1:age',18
0>put 'ns1:t1','1','f1:name','mike'
0>put 'ns1:t1','1','f1:sex','man'
2> hive中建立映射表
create external table if not exists hbase2hive01(
uid string,
age int,
name string,
sex string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
"hbase.columns.mapping"=":key,f1:age,f1:name,f1:sex"
)
tblproperties(
"hbase.table.name"="ns1:t1"
)
;
3> hive中查询