【大数据】Hive基础知识

2023-11-02

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 描述
Casading http://cascading.org 提供数据处理抽象的 Java API。目前有很多支持 Casading 的特定领域语言(DSL),采用的是其他的编程语言,例如 Scala、Groovy、JRuby 和 Jython。
Casalog https://github.com/nathanmarz/cascalog Casading 的一个 Clojure DSL,其提供了源于 Datalog 处理和查询抽象过程灵感而产生的附属功能。
Crunch https://crunch.apache.org/ 提供了可定义数据流管道的 Java 和 Scala API。

9.请列举一些没有使用 MapReduce 的分布式处理工具。

因为 Hadoop 是面向批处理系统的,所以存在更适合事件流处理的使用不同的分布式计算模型(即不同于 MapReduce)的工具。对事件流进行处理时,需要近乎 “实时” 响应。

名称 URL 描述
Spark http://www.spark-project.org/ 一个基于 Scala API 的分布式数据集的分布式计算框架。其可以使用 HDFS 文件,而且其对于 MapReduce 中多种计算可以提供显著的性能改进。同时还有一个将 Hive 指向 Spark 的项目,称作 Shark( http://shark.cs.berkeley.edu/ )
Storm https://github.com/nathanmarz/storm 一个实时事件流处理系统
Kafka https://kafka.apache.org/ 一个分布式的发布-订阅消息传递系统

参考:《Hive 编程指南》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【大数据】Hive基础知识 的相关文章

  • Cat 文件与 HDFS 中的模式不匹配?

    我正在尝试 cat 与 hadoop HDFS 中的以下模式不匹配的文件 hdfs dfs cat gz 如何捕获所有不以 gz 结尾的文件 编辑 抱歉 但我需要在 Hadoop 中管理文件 显然 hdfs 附带的命令非常少 编辑2 所有文
  • Hive(查找连续 n 列中的最小值)

    我在 Hive 中有一个表 有 5 列 即电子邮件 a first date b first date c first date d first date a b c d 是用户可以执行的 4 个不同操作 上表中的 4 列表示用户执行第一个
  • 将 hadoop fs 路径转换为 ​​EMR 上的 hdfs:// 路径

    我想知道如何将数据从 EMR 集群的 HDFS 文件系统移动到 S3 存储桶 我认识到我可以直接在 Spark 中写入 S3 但原则上 之后执行它也应该很简单 到目前为止 我还没有发现在实践中这是正确的 AWS 文档建议s3 dist cp
  • Hive 中 Sortby 和 orderby 查询的区别

    Hive sort by and order by命令用于按排序顺序获取数据 例如 Sort by hive gt SELECT E EMP ID FROM Employee E SORT BY E empid Order by hive
  • Hive查询快速查找表大小(行数)

    是否有 Hive 查询可以快速查找表大小 即行数 而无需启动耗时的 MapReduce 作业 这就是为什么我想避免COUNT I tried DESCRIBE EXTENDED 但这产生了numRows 0这显然是不正确的 对新手问题表示歉
  • 为什么组合器输入记录的数量比映射的输出数量多?

    Combiner 在 Mapper 之后 Reducer 之前运行 它将接收给定节点上的 Mapper 实例发出的所有数据作为输入 然后它将输出发送到Reducers 因此组合器输入的记录应小于映射输出的记录 12 08 29 13 38
  • 猪如何过滤不同的对(对)

    我是猪的新手 我有一个 Pig 脚本 它在两个元素之间生成制表符分隔的对 每行一对 例如 John Paul Tom Nik Mark Bill Tom Nik Paul John 我需要过滤掉重复的组合 如果我使用 DISTINCT 我会
  • Hadoop:读取ORC文件并放入RDBMS中?

    我有一个以 ORC 文件格式存储的配置单元表 我想将数据导出到 Teradata 数据库 我研究了 sqoop 但找不到导出 ORC 文件的方法 有没有办法让 sqoop 为 ORC 工作 或者有什么其他工具可以用来导出数据 Thanks
  • 计算行的排名

    我想根据一个字段对用户 ID 进行排名 对于相同的字段值 排名应该相同 该数据位于 Hive 表中 e g user value a 5 b 10 c 5 d 6 Rank a 1 c 1 d 3 b 4 我怎样才能做到这一点 可以使用ra
  • 如何在 Hadoop 中将 String 对象转换为 IntWritable 对象

    我想转换String反对IntWritableHadoop 中的对象 任何过程都可以进行转换 IntWritable value new IntWritable Integer parseInt someString 并处理以下可能性par
  • 在 Amazon EMR 上使用 java 中的 hbase 时遇到问题

    因此 我尝试使用作为 MapReduce 步骤启动的自定义 jar 来查询 Amazon ec2 上的 hbase 集群 我的 jar 在地图函数内 我这样调用 Hbase public void map Text key BytesWri
  • 如何通过sparkSession向worker提交多个jar?

    我使用的是火花2 2 0 下面是我在 Spark 上使用的 java 代码片段 SparkSession spark SparkSession builder appName MySQL Connection master spark ip
  • 如何使用 Amazon 的 EMR 在 CLI 中使用自定义 jar 指定 mapred 配置和 java 选项?

    我想知道如何指定mapreduce配置 例如mapred task timeout mapred min split size等等 当使用自定义 jar 运行流作业时 当我们使用 ruby 或 python 等外部脚本语言运行时 我们可以使
  • 在 HIVE 中,使用 COALESCE 将 Null 值替换为相同的列值

    我想用同一列中的值替换特定列的空值我想得到结果 我在下面尝试过 select d day COALESCE val LAST VALUE val TRUE OVER ORDER BY d day ROWS BETWEEN UNBOUNDED
  • Hive“添加分区”并发

    我们有一个外部 Hive 表 用于处理原始日志文件数据 这些文件每小时一次 并按日期和源主机名分区 目前 我们正在使用简单的 python 脚本导入文件 这些脚本每小时触发几次 该脚本根据需要在 HDFS 上创建子文件夹 从临时本地存储复制
  • 伪分布式模式下的 Hadoop。连接被拒绝

    P S 请不要将此标记为重复 Hi 我一直在尝试以伪分布式模式设置和运行 Hadoop 当我运行 start all sh 脚本时 我得到以下输出 starting namenode logging to home raveesh Hado
  • 为 Presto 和 AWS S3 设置独立 Hive Metastore 服务

    我工作的环境中使用 S3 服务作为数据湖 但没有 AWS Athena 我正在尝试设置 Presto 以便能够查询 S3 中的数据 并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表 我正在 Docker
  • 使用 Hiveql 循环

    我正在尝试合并 2 个数据集 例如 A 和 B 数据集 A 有一个变量 Flag 它有 2 个值 我并没有只是将两个数据合并在一起 而是尝试根据 标志 变量合并两个数据集 合并代码如下 create table new data as se
  • YARN UNHEALTHY 节点

    在我们的 YARN 集群已满 80 的情况下 我们看到一些纱线节点管理器被标记为不健康 在深入研究日志后 我发现这是因为数据目录的磁盘空间已满 90 出现以下错误 2015 02 21 08 33 51 590 INFO org apach
  • 如何在蜂巢中的每个组中按计数 desc 进行排序?

    这是 HQL select A B count as cnt from test table group by A B order by cnt desc 示例输出如下 a1 b1 5 a2 b1 3 a1 b2 2 a2 b2 1 但我想

随机推荐