1、 什么是Hive(蜂巢)?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。Hive是基于HDFS之上的数据仓库,也就是说Hive中的数据最终都是以文件的形式保存到HDFS,下表为其对应关系。而Hive的元信息(e.g.,表名、列名、列的类型等)主要存放在哪?Hive的官方文档中推荐使用的是MySQL数据库。
Hive |
HDFS |
表 |
目录 |
数据 |
文件 |
分区 |
目录 |
Hive还是一个翻译器,Hive是一个数据处理引擎,也就是在上一层执行的SQL语句,会有hive的引擎(Hive Driver)转换成MapReduce的程序去操作HDFS上的数据。
2、 和传统型数据库的区别
|
Hive |
RDBMS |
查询语言 |
HQL |
SQL |
数据存储 |
HDFS |
Raw Device or Local FS |
执行 |
MapReduce |
Executor |
执行延迟 |
高 |
低 |
处理数据规模 |
大 |
小 |
索引 |
0.8版本后加入位图索引 |
有复杂的索引 |
3、 为什么使用Hive?
a) 直接使用hadoop所面临的问题
b) 操作接口采用类SQL语法,提供快速开发的能力,避免了去写MapReduce,减少开发人员的学习成本,hive扩展功能很方便(自定义函数)。
4、 Hive的特性
a) 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
b) 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
c) 容错:良好的容错性,节点出现问题SQL仍可完成执行
5、 Hive的应用实践
以基于CDH的Hive为例,进入目录/opt/cloudera/parcels/CDH/lib/hive/bin,输入hive命令,进入hive数据库,即可以进行相关操作了。
然而,我们会发现界面非常不友好、不直观,而hive给我们提供了一个服务端,对比感受一下效果,那么怎么利用Hive给我们提供的服务端,进行相关操作呢?请看如下步骤。
首先,在bin目录下有一个hiveserver2,然后开启服务端./hiveserver2
其次,再连接一下服务器进入hive的bin目录下,会发现有一个beeline,用beeline的方式进行连接./beeline
最后,使用!connect jdbc:hive2://slaver0:10000 命令进行连接,连接成功即可进行操作数据库。
怎么向Hive建立的表中导入数据?
首先,我们准备一个文本数据(先简单介绍数据导入流程)
其次,我们要创建一个Hive的表,在创建的时候跟普通的数据库表的创建方式有所不同,如下图所示。在建表时可以建立1、内部表(类似MySQL中的表,下图所示)2、为了提高查询效率可以建立分区表,具体建立方法如代码所示;3、桶表;4、外部表;5、为了简化查询也可以建立视图。
hive> create table demo1 > ( no int, > name string > ) partitioned by (no int) > row format delimited fields terminated by ‘\t‘;
然后,进行数据的导入
本地数据:load data local inpath ‘/root/bigdata1016‘ into table demo;
HDFS:load data inpath ‘/HDFS的目录/bigdata1016 ‘ into table demo;
最后,进行查看数据是否添加成功!
6、 对表中数据的操作
Hive相较于传统的数据库不仅具有存储数据的功能,还可以进行数据的处理。那么怎么进行数据的处理呢?
例如对刚才的表利用HQL进行一个简单的处理,select count(1) from demo1; 得到表中有多少条记录。这样就可以使用简单的HQL语句来实现MapReduce的功能(基本可是实现绝大部分的MapReduce程序,但是对于少部分逻辑比较复杂的程序还是不行的)
原文:https://www.cnblogs.com/ltolstar/p/9800132.html