Hive基础知识
1.Hive 有哪些特点?
Hive 最适合于数据仓库应用程序,使用该应用程序进行相关的静态数据分析,不需要快速响应给出结果,而且数据本身不会频繁变化。
Hive 不是一个完整的数据库。Hadoop 以及 HDFS 的设计本身约束和局限性的限制了 Hive 所能胜任的工作。其中最大的限制就是不支持记录级别的更新、插入或者删除操作。但是用户可以通过查询生成新表或者将查询结果导入到文件中。
Hive 查询延时比较严重。传统数据库中在秒级别可以完成的查询在中,即使数据集相对较小,往往也需要执行更长的时间。
2.简单介绍 Hadoop 和 MapReduce。
MapReduce 是一种计算模型,该模型可将大型数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务,这些任务的计算结果可以合并在一起来计算最终的结果。
Hadoop 提供了一套基础设施来处理大多数困难的工作,以保证任务能够执行成功。例如,Hadoop 如果决定将提交的 job 分解成多个独立的 map 和 reduce 任务来执行,它就会对这些任务(task)进行调度并为其分配合适的资源,决定将某个 task 分配到集群中哪个位置(通常是这个 task 主要处理的数据所在的位置,这样可以最小化网络开销)。它会监控每一个 task,以确保其成功完成,并重启一些失败的 task。
Hadoop 分布式文件系统(HDFS),或者一个同类的分布式文件系统,管理着集群中的数据。每个数据块(block)都会被冗余多份(通常默认会冗余 3 份),这样可以保证不会因单个硬盘或服务器的损坏导致数据丢失。同时,因为其目标是优化处理非常大的数据集,所以 HDFS 以及类似的文件系统所使用的数据块都非常大,通常是 64 MB 或是这个值的若干倍。这么大的数据块可以在硬盘上连续进行存储,这样可以保证以最少的磁盘寻址次数来进行写入和读取,从而最大化提高读写性能。
3.以 Word Count 为例解释 MapReduce。
分割过程
执行map方法
Map 端排序及 Combine 过程
Reduce 端排序及输出结果
4.Hive 的组成模块有哪些?
- 与 Hive 进行交互的方式。命令行界面:CLI。图形用户界面:Karmasphere( http://karmasphere.com )、Hue( https://github.com/cloudera/hue )、Qubole( http://qubole.com )。
- Hive 发行版中附带的模块有 CLI、Hive 网页界面(HWI)、以及可通过 JDBC、ODBC 和一个 Thrift 服务器进行编程访问的几个模块。
- 所有的命令和查询都会进入到 Driver(驱动模块),通过该模块对输入进行解析编译,对需求的计算进行优化,然后按照指定的步骤执行。
- Hive 通过和 JobTracker 通信来初始化 MapReduce 任务(job),而不必部署在 JobTracker 所在的管理节点上执行。
- Metastore(元数据存储)是一个独立的关系型数据库(通常是一个 MySQL 实例),Hive 会在其中保存表模式和其他系统元数据
5.简单介绍 Pig。
Pig 是一个基于 Hadoop 的大规模数据分析平台,它提供的 SQL-LIKE 语言叫 Pig Latin,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。Pig Latin 语言更侧重于对数据的查询和分析,而不是对数据进行修改和删除等的操作。Pig 为复杂的海量数据并行计算提供了一个简单的操作和编程接口。
- 专注于于大量数据集分析(ad-hoc analysis ,ad-hoc 代表:a solution that has been custom designed for a specific problem );
- 运行在集群的计算架构上,Yahoo Pig 提供了多层抽象,简化并行计算让普通用户使用;这些抽象完成自动把用户请求 queries 翻译成有效的并行评估计划,然后在物理集群上执行这些计划;
- 提供类似 SQL 的操作语法;
- 开放源代码。
6.Pig 与 Hive 的区别?
Pig 与 Hive 作为一种高级数据语言,均运行于 HDFS 之上,是 hadoop 上层的衍生架构,用于简化 hadoop 任务,并对 MapReduce 进行一个更高层次的封装。Pig 与 Hive 的区别如下:
- Pig 是一种面向过程的数据流语言;Hive 是一种数据仓库语言,并提供了完整的 sql 查询功能。
- Pig 更轻量级,执行效率更快,适用于实时分析;Hive 适用于离线数据分析。
- Hive 查询语言为 Hql,支持分区;Pig 查询语言为 Pig Latin,不支持分区。
- Hive 支持 JDBC / ODBC;Pig 不支持 JDBC / ODBC。
- Pig 适用于半结构化数据,比如日志文件;Hive 适用于结构化数据。
总而言之,Hive 更适合于数据仓库的任务,Hive 主要用于静态的结构以及需要经常分析的工作。Hive 与 SQL 相似促使其成为 Hadoop 与其他 BI 工具结合的理想交集。Pig 赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。Pig 相比 Hive 相对轻量,它主要的优势是相比于直接使用 Hadoop Java API 可大幅削减代码量。正因为如此,Pig 仍然吸引了大量的软件开发人员。
7.简单介绍 HBase。
如果用户需要 Hive 无法提供的数据库特性,比如行级别的更新、快速的查询响应时间、支持事物,那么该怎么办呢?
HBase 是一个分布式的、可伸缩的数据存储,其支持行级别的数据更新、快速查询和行级事务(但不支持多行事务)。HBase 支持的一个重要特性就是列存储,其中的列可以组织成列族。列族在分布式集群中物理上是存储在一起的,这就使得当查询场景涉及的列只是所有列的一个子集时,读写速度会快很多。因为不需要读取所有的行,然后丢弃大部分的列,而只用读取需要的列。
可以像 “键-值” 存储一样来使用 HBase,其每一行都使用了一个唯一键来提供非常快的速度读写这一行的列或者列族。HBase 还会对每个列保留多个版本的值(按照时间戳进行标记),版本数量是可以配置的,因此,如果需要,可以 “时光倒流” 回退到之前的某个版本的值。
那 HBase 和 Hadoop 之间究竟是什么关系呢?HBase 使用 HDFS(或者其他某种分布式文件系统)来持久化存储数据。为了可以提供行级别的数据更新和快速查询,HBase 也使用了内存缓存技术,对数据和本地文件进行追加数据更新操作日志。持久化文件将定期地使用附加日志进行更新等操作。
8.基于 Hadoop 的其他高级语言库。
名称URL描述Casadinghttp://cascading.org提供数据处理抽象的 Java API。目前有很多支持 Casading 的特定领域语言(DSL),采用的是其他的编程语言,例如 Scala、Groovy、JRuby 和 Jython。Casaloghttps://github.com/nathanmarz/cascalogCasading 的一个 Clojure DSL,其提供了源于 Datalog 处理和查询抽象过程灵感而产生的附属功能。Crunchhttps://crunch.apache.org/提供了可定义数据流管道的 Java 和 Scala API。
9.请列举一些没有使用 MapReduce 的分布式处理工具。
因为 Hadoop 是面向批处理系统的,所以存在更适合事件流处理的使用不同的分布式计算模型(即不同于 MapReduce)的工具。对事件流进行处理时,需要近乎 “实时” 响应。
名称URL描述Sparkhttp://www.spark-project.org/一个基于 Scala API 的分布式数据集的分布式计算框架。其可以使用 HDFS 文件,而且其对于 MapReduce 中多种计算可以提供显著的性能改进。同时还有一个将 Hive 指向 Spark 的项目,称作 Shark( http://shark.cs.berkeley.edu/ )Stormhttps://github.com/nathanmarz/storm一个实时事件流处理系统Kafkahttps://kafka.apache.org/一个分布式的发布-订阅消息传递系统
参考:《Hive 编程指南》
版权归原作者 中传男明星皮皮 所有, 如有侵权,请联系我们删除。