【Hive】基于hadoop的大数据仓库

     Hive被称为是”Hadoop的数据仓库框架”。 Hive定义了类SQL查询语言Hive SQL,学习成本低。可通过类SQL语句快速实现简单的MR统计 ,可被用来执行专门的海量数据 集查询和数据汇总,以及执行海量数据分析,十分适合数据仓库的统计分析 。

Hive与关系型数据库

     Hive的命令行接口和操作关系型数据库相像,但是和关系数据库依然有很大的区别:
●Hive和关系数据库存储文件的系统不同,Hive基于Hadoop的hdfs,关系数据库则是服务器本地的文件系统;
●Hive使用的计算模型是Mapreduce,而关系数据库则是自身的计算模型;
●关系数据库都是为实时查询的业务进行设计的,而Hive则是为海量数据做数据挖掘设计的,实时性很差;实时性的区别导致Hive的应用场景和关系数据库有很大的不同;
●Hive不适合用于小数据集分析和交互式查询;
●Hive很容易扩展自己的存储能力和计算能力,这个是继承Hadoop的,而关系数据库在这个方面要比数据库差很多。
●Hive并不支持事件或行级数据更新

Hive的架构

     下面列出了hive的主要架构,hive通过客户端发出数据操纵请求,该请求会被驱动引擎解释、编译、优化、执行,在执行的时候,会在关系型数据库中取得请求操纵数据在hdfs上的映射关系。通过映射关系向hdfs拿数据进行操纵,hive保存的是数据及数据操纵的映射的关系,本身不装数据。
     Hive 的核心是驱动引擎,驱动引擎由四部分组成:
• 解释器:解释器的作用是将HiveSQL 语句转换为语法树(AST)。
• 编译器:编译器是将语法树编译为逻辑执行计划。
• 优化器:优化器是对逻辑执行计划进行优化。
• 执行器:执行器是调用底层的计算框架执行逻辑执行计划。
     SQL转化为MapReduce,Hive是将SQL 转化为MapReduce任务的编译过程分为六个阶段:
•AntIr定义SQL的语法规则,完成SQL词法,语法解析,将SQl转化为抽象语法树AST Tree
•遍历AST Tree,抽象出查询的基本组成单元QueryBlock
•遍历QueryBlock,翻译为执行操作树OperatorTree
•逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
•遍历OperatorTree,翻译为MapReduce任务
• 物理层优化器进行MapReduce任务的变换, 生成最终的执行计划: .
     Hive 的底层存储:
• Hive的数据是存储在HDFS上的。
• Hive中的库和表可以看做是对HDFS上数据做的一个映射。
     Hive的元数据存储:
• Hive的元数据是一般是存储在MySQL这种关系型数据库上的,Hive和MySQL之 间通过MetaStore服务交互。
• Hive支持的关系数据库有derby和mysql
• 元数据对于Hive十分重要,因此Hive支持把metastore服务独立出来,安装到 远程的服务器集群里,从而解耦Hive服务和metastore服务,保证Hive运行的 健壮性;
     Hive支持多种客户端:
• 命令行客户端(CLI):采用交互窗口,用hive命令行和Hive进行通信。
• HiveServer2客户端:用Thrift协议进行通信,提供安全的远程访问以及ODBC 和JDBC连接去访问Hive。
• HWI客户端:Hive客户端提供了一种通过网页的方式访问hive所提供的服务。 这个接口对应Hive的hwi组件(hive web interface),使用前要启动hwi服务。但 是hwi比较粗糙,一般不用。
• HUE客户端:通过Web页面来和Hive进行交互。
• Ambari
• WebHCat: http://hadoop/templeton/v1/resource. curl -s ‘http://localhost:50111/templeton/v1/ddl/database?user.name=hduser’
     执行引擎:
• MapReduce
• Tez(运行在Hadoop上的默认执行引擎)
• Spark

Hive 实战

    只要掌握sql语句,hive简单易学。这里列举了部分HiveSql语句,可以看到和SQL非常相似。但我们依旧要注意hive与关系型数据的不同之处,比如内部表和外部表的概念,hive的优化设计等。
笔者自己总结的hivesql语句全集:https://pan.baidu.com/s/1xdVuEElT2P_sgn9ZekeGpg 提取码:d6d5

-- 查看已有数据库
-- show databases;

-- 查看数据库属性
-- desc database test_databases;

-- 调用数据库
-- use test_database;

-- 查看数据库下的表
-- show tables;
-- show tables in test_database;

-- 删除数据表
-- drop table test_table;

-- 删除内容,保留表结构
--truncate table table_name;

-- 删除数据库
-- drop database test_database;
-- 级联删除数据库
-- drop database test_database cascade;

-- 创建内部表
-- create table test(id int , name string ) row format delimited fields terminated by '\t';
-- 内部表容易损坏hdfs文件,使用要谨慎
-- 创建外部表
-- create external table  test(id int , name string ) row format delimited fields terminated by '\t' location '/home/path';
-- 创建外部表不需要加载数据,直接映射hdfs文件系统数据
-- 注意将本地数据上传至hdfs文件系统下

-- 创建外部表 + 添加默认设置
-- create external table pricewatch(
        recordid string,
        jclb string,
        jcmc string,
        bqjg decimal(10,3),
        sqjg decimal(10,3),
        tb decimal(10,3),
        hb decimal(10,3)
) 
row format delimited 
fields terminated by ',' 
location '/hive_data/p'
TBLPROPERTIES ('serialization.null.format' = '','skip.header.line.count' = '1');

-- 查看完整建表语句
-- show create table pricewatch;

-- 查看表结构
-- desc test;
-- desc formatted test;

-- 修改表结构 
-- 改表名
-- alter table test rename to test_new;
-- 添加新列
-- alter table test add columns(new_col int);
-- 添加备注
-- alter table test add columns(new_col_1 int comment'This is ... ...');
-- 更改表结构
-- alter table test replace columns(id int ,foo string);

-- 加载数据
-- 本地文件
-- load data local inpath '/home/path' into table test;
-- load data local inpath '/home/path' overwrite into table test;
-- 加载hdfs文件
-- load data inpath '/home/path' into table test;
-- load data inpath '/home/path' overwrite into table test; '' 

-- 本地文件上传到hdfs文件
-- hdfs dfs -put /data.txt /hive_data/new_data/

-- 查看数据仓库
-- hdfs dfs -ls /urs/hive/warehouse/cdadb.db/

推荐资料:

HIVE—索引、分区和分桶的区别 - 小丑进场 - 博客园  https://www.cnblogs.com/LiCheng-/p/7420888.html
Hive性能优化 - 哥不是小萝莉 - 博客园  https://www.cnblogs.com/smartloli/p/4356660.html
Hive学习之路 (二十一)Hive 优化策略  http://www.360doc.com/content/19/0214/21/55348351_814983723.shtml
发布了39 篇原创文章 · 获赞 42 · 访问量 4854

猜你喜欢

转载自blog.csdn.net/weixin_41774099/article/details/103214691