Hive学习

Hive产生的原因:


    – 对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一堆MapReduce代码
    – 对于统计任务,只能由懂MapReduce的程序员才能搞定
    – 耗时耗力,更多精力没有有效的释放出来

Hive介绍:


Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查询、统计和分析。
• Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快
  速开发的目的。
• Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。本质就是Hadoop的目录/文件,
  达到了元数据与数据存储分离的目的
• Hive本身不存储数据,它完全依赖HDFS和MapReduce。
• Hive的内容是读多写少,不支持对数据的改写和删除
• Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:
    – 列分隔符 空格,‘,’ ‘\t’
    – 行分隔符’\n’
    – 读取文件数据的方法

与传统数据库比较:


• hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;
• hive使用的计算模型是mapreduce,而关系数据库则是自己设计的计算模型;
• 关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时
  性很差
• Hive很容易扩展自己的存储能力和计算能力

 

hive结构图: 

Hive学习

用户接口:
  CLI:启动的时候,会同时启动一个 Hive 副本
  JDBC:Hive 的客户端,用户连接至 Hive Serve
  WUI:通过浏览器访问Hive

语句转换
  解析器:生成抽象语法树
  语法分析器:验证查询语句
  逻辑计划生成器(包括优化器):生成操作符树
  查询计划生成器:转换为map-reduce任务
 
数据存储:
  Hive数据以文件形式存储在HDFS的指定目录下
  Hive语句生成查询计划,由MapReduce调用执行

Hive架构图:

Hive学习

 

 Hive数据管理


• hive的表本质就是Hadoop的目录/文件
    hive默认表存放路径一般都是在你工作目录的hive目录里面,按表名做文件夹分开
    
• Hive的create创建表的时候,选择的创建方式:
– create table 内部表
– create external table location ‘hdfs_path’ 外部表 (文件)

特点:
  1.导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它
    自己来管理的!而内部表则不一样;
  2.在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除
    外部表的元数据,数据是不会删除的;

使用示例:一句话实现WordCount

创建内部表:

create table article(sentence string) row format delimited fields terminated by '\n';

从本地导入数据
load data local inpath '/home/app/data/test.txt' overwrite into table article;

实现word count    走的是mapreduce计算框架  
select word, count(*)
from ( 
select 
explode (split(sentence,' ')) 
as word 
from article
) t
group by word

 test.txt的内容就是这样一篇文章:

Hive学习