招聘岗位上到处都要求熟练的Hive究竟是何方神圣?

简介

    Hive是基于Hadoop的数据仓库大数据组件。将易上手的SQL语句转化成MapReduce作业
    Hive默认不支持事务, 进而导致不支持UPDATE, DELETE这些我们在数据库中常用的操作。这一点我一直感到十分不解,你一个数据库怎么连基本的操作都不支持啊?在实际使用中我终于慢慢明白:

  1. 为了实现事务是需要做大量工作的,写redo log,undo log(用于回滚操作),设置隔离级别(读未提交?读已提交?可重复读?)
  2. 而这些工作会影响到数据库的性能,拓展性,即使是较先进的Oracle的理论拓展性也才是100台,8台节点后边际效应明显。如果Hive支持事务,性能与拓展性将受到严重限制。
  3. Hive的作用是简单使用MapReduce 而MapReduce生来的意义就是处理大量的数据,而具备强拓展性才让处理海量数据成为可能;
  4. 如果丢失了拓展性与性能,MapReduce有什么意义 如果拓展性受到严重限制,MapReduce就不能处理大量的数据,那么Hive也就失去了原本的意义;
  5. 数据仓库中的数据是读多写少的,往往在加载时就已确定不再修改

数据结构

  1. 元数据
    Hive存储的是一张张的数据表,而元数据就是其中的表结构
    存储形式:存于Derby数据库,或MySQL,Oracle数据库。

  2. 表数据
    表中存储的数据。
    存储形式:每张表存于HDFS中的一个目录中

数据类型

  • 基本数据类型
    • tinyint / smallint / int / bigint : 整数类型
    • float / double : 浮点数类型
    • boolean : 布尔类型
    • string : 字符串类型
  • 复杂数据类型
    • Array : 数组类型
    • Map : 集合类型,键值对Key / Value形式
    • Struct : 结构类型,包含不同数据类型的元素,跟C语言中的Struct类似
  • 时间数据类型
    • Date : 只包含到天的数据,没法精确到时分秒。
    • Timestamp : 长整型数字,从(格林威治时间)1970年1月1日0时0分0秒到现在的总毫秒数

数据模型

    MySQL,Oracle用表作为数据模型存储数据。Hive自然也有。下面简要介绍一下Hive的几种常用的表吧。

  1. 内部表
    最接近普通关系型数据库的数据模型;
    删除数据时会将元数据与表数据一同删除,HDFS中的数据文件一同被删除;
create table bucket_table
(sid int, sname string, age int)
row format delimited fields terminated by '\t';
-- 指定数据间分隔符,默认为制表符'\t'
  1. 外部表
    与HDFS中某个目录下的数据文件建立连接;
    比较像指针,指向HDFS中某个目录;
    删除数据时,会删除元数据,与该目录的连接,但不会真正删除HDFS中的数据
create external table external_student
(sid int, sname string, age int)
row format delimited fields terminated by '\t'
location '/input';  --指定表数据所在 HDFS目录
  1. 桶表
    用哈希算法将表数据分到5个中,一般可以将数据打乱放到各个桶中,可以处理数据倾斜问题
create table bucket_table
(sid int, sname string, age int)
clustered by(sname) into 5 buckets --将数据通过哈希算法分成5部分
row format delimited fields terminated by '\t';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章