Hive:由Facebook开源用于解决海量结构化日志的数据统计。
Hive是基于Hadoop的一个数据仓库工具 ,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
本质是:将HQL转化成MapReduce程序
如图中所示,Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;Hive的元数据存放位置:
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
使用Hadoop生态圈中的HDFS进行存储,使用MapReduce进行计算。
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。
Hive与传统型数据库有什么区别?
由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。
查询语言 | HQL | SQL |
数据存储位置 | HDFS | Local FS |
数据格式 | 用户自定 | 系统决定 |
数据更新 | hive(0.14) 后支持 | 支持 |
索引 | 无 | 有 |
执行 | MapReduce | Executor |
执行延迟 | 高 | 低 |
可扩展性 | 高 | 低 |
数据规模 | 大 | 小 |
(1)把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下
(2)解压apache-hive-1.2.1-bin.tar.gz到/opt/software/目录下面
[root@hadoop software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/software/
(3)修改apache-hive-1.2.1-bin.tar.gz的名称为hive-1.2.1
[root@hadoop software]$ mv apache-hive-1.2.1-bin/ hive-1.2.1
(4)修改/opt/software/hive/conf目录下的hive-env.sh.template名称为hive-env.sh(怕出错的话可以复制一份)
[root@hadoop conf]$ mv hive-env.sh.template hive-env.sh
(5)配置hive-env.sh文件
(1)必须启动hdfs和yarn
[root@hadoop ~]# start-all.sh
(1)启动hive
[root@hadoop hive]$ bin/hive
(2)查看数据库
hive>show databases;
(3)打开默认数据库
hive>use default;
(4)显示default数据库中的表
hive>show tables;
(5)创建一张表
hive> create table student( id int, name varchar(20),sex varchar(20) );
(6)显示数据库中有几张表
hive>show tables;
(7)查看表的结构
hive>desc student
(8)向表中插入数据
hive> insert into student values(1,"zhangsan","man");
(9)查询表中数据
hive> select * from student;
(10)退出hive
hive> quit;
–——————————由于时间问题今天就先写到这里,下篇博客继续。————————