Hive
基于Hadoop的一个数据仓库工具,构建于hadoop的hdfs和mapred之上,用于管理和查询结构化/非结构化数据的数据仓库。可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
Hive将HQL语句转译成M/R Job,然后按照MR的计算框架在Hadoop执行,也可以把HQL中的表、字段转换为HDFS中的文件(夹)以及文件中的列。这套映射工具称之为metastore
Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。
Hive作用
Hvie降低了数据人员使用MR的门槛,使得分布式计算通过类SQL的操作即可实现,对大数据应用发展起到了很多的推动作用。
Hive本质
- 本质是将HQL转换为MapReduce程序的工具。
- 不属于google核心论文内容。(dfs、mr、bigtable)
- 由facebook开发并开源。
特点
- 使用HQL作为查询接口
- 使用HDFS作为底层存储
- 使用MapRed作为执行层
- 可扩展到100PB+
与传统sql的对比
Hive与HBase对比
共同点
- HBase与Hive都架构在Hadoop之上,都是用hdfs作为底层存储。
- 职能上都能对外提供表形式的数据查询等服务。
区别
- Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
- Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表是纯逻辑表,是对hdfs文件的一种记录方式。
- Hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
Hive解释器、编译器、优化器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行
Hadoop存储运算
Hive的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成。(一些特殊查询不转换成MR程序,而是直接从HDFS中读取数据,例如包含 * 的查询,select * from table不会生成 MapRedcue任务,Fetch Task)
Hive的基础知识
查看hive版本:
mysql> select * from VERSION;
查看有哪些表:
mysql> select * from TBLS \G;
查看表对应的hdfs目录的metedata:
mysql> select * from SDS \G;
查看某个表的partitions:
mysql> select * from PARTITIONS where TBL_ID=1 \G;
查看某个表的列:
mysql> select * from COLUMNS_V2;
查看某个表的partition:
mysql> select * from PARTITION_KEYS;
Hive的基础知识
外部表 | 内部表 | |
---|---|---|
建表语句 | CREATE EXTERNAL TABLE city_ex ( province_code int, province_name string,city_code int,city_name string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ LINES TERMINATED B’\n’LOCATION ‘/user/hdfs/tq/city’; | CREATE TABLE city_ex ( province_code int, province_name string, city_code int, city_name string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’LOCATION ‘/user/hdfs/tq/city’; |
查看建表语句 | LOCATION’hdfs://nns/user/hdfs/tq/city’ | LOCATION’hdfs://nns/user/hive/warehouse/tq.db/city’ |
删除后 | drop table city_ex;文件还在 | drop table city;文件也删除 |