Hive与Hadoop
Hive是完全运行在hadoop之上的一个数据分析工具,可以看作是hadoop的一个自然延伸。具备强大的数据分析能力,在对标准SQL保持高度兼容的基础上,提供了大量增强功能和插件机制。
优点:非常成熟稳定,部署方便,语法类似sql,不必再写mapreduce程序,学习成本低,适合做ETL(来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程)类的处理。
缺点:完全利用hadoop集群自身的计算能力,性能上比spark略低。不适合需要反复迭代的场景(如机器学习等等)
简单来说Hive提供了从Hdfs文件系统提取文件成结构化数据的能力,适合吞吐量大对延迟要求低的读取任务。
Hive和Hbase,Mysql等数据库的区别
来源:知乎
对于hive主要针对的是OLAP(联机分析处理)应用,注意其底层不是hbase,而是hdfs分布式文件系统,重点是基于一个统一的查询分析层,支撑OLAP应用中的各种关联,分组,聚合类SQL语句。hive一般只用于查询分析统计,而不能是常见的CUD操作,要知道HIVE是需要从已有的数据库或日志进行同步最终入到hdfs文件系统中,当前要做到增量实时同步都相当困难。
和mysql,oracle完全不是相同的应用场景。这个是结构化数据库,针对的更多的是结构化,事务一致性要求高,业务规则逻辑复杂,数据模型复杂的企业信息化类应用等。包括互联网应用中的很多业务系统也需要通过结构化数据库来实现。所以和hbase,hive不是一个层面的东西,不比较。
基础概念
语法和sql类似,操作的是hdfs上的文件,被转换成MR任务
Table:一个虚拟的表,所有的操作均是在这个实体上进行的。
Table-metadata:表元数据,即表的结构、分区、hdfs映射关系等等。hive将这些元数据存储在一个关系型数据库中,默认是内嵌的derby。
Partition:表分区。一般以时间为维度。其底层是直接映射到HDFS文件的。因此所谓的添加分区就是建立这种映射关系。同一个table的不同的分区映射到不同的HDFS文件。
Serde:序列化机制。指table的字段如何映射到HDFS文件的字段。默认情况下hive支持纯文本方式的序列化,即HDFS文件每行即一条记录,而每个数据行以指定的分隔符来分割字段。目前所在公司主流数据都是json文本,所以需要json-serde插件来完成这一工作。
系统文档
https://cwiki.apache.org/confluence/display/Hive/LanguageManual