何时使用 Hadoop、HBase、Hive 和 Pig?
Posted
技术标签:
【中文标题】何时使用 Hadoop、HBase、Hive 和 Pig?【英文标题】:When to use Hadoop, HBase, Hive and Pig? 【发布时间】:2012-12-04 09:24:23 【问题描述】:使用 Hadoop 或 HBase 或 Hive 有什么好处?
据我了解,HBase 避免使用 map-reduce,并且在 HDFS 之上具有面向列的存储。 Hive 是 Hadoop 和 HBase 的类 sql 接口。
我也想知道 Hive 与 Pig 的比较。
【问题讨论】:
Hadoop:Hadoop 分布式文件系统 + 计算处理模型 MapReduce。 HBase:Key-Value 存储,适合近乎实时的读写。 Hive:用于使用类似 SQL 的语法从 HDFS 中提取数据。 Pig:是一种用于创建ETL的数据流语言。 【参考方案1】:MapReduce 只是一个计算框架。 HBase 与它无关。也就是说,您可以通过编写 MapReduce 作业有效地将数据放入 HBase 或从 HBase 获取数据。或者,您可以使用其他 HBase API(例如 Java)编写顺序程序来放置或获取数据。但是我们使用 Hadoop、HBase 等来处理大量数据,所以这没有多大意义。当您的数据太大时,使用普通的顺序程序会非常低效。
回到问题的第一部分,Hadoop 基本上是两件事:分布式文件系统 (HDFS) + 计算或处理框架 (MapReduce)。与所有其他 FS 一样,HDFS 也为我们提供存储,但以容错方式具有高吞吐量和较低的数据丢失风险(由于复制)。但是,作为 FS,HDFS 缺乏随机读写访问权限。这就是 HBase 发挥作用的地方。这是一个分布式、可扩展的大数据存储,以 Google 的 BigTable 为蓝本。它将数据存储为键/值对。
来到蜂巢。它在现有 Hadoop 集群之上为我们提供了数据仓储设施。除此之外,它还提供了一个 SQL like 界面,如果您有 SQL 背景,则可以让您的工作更轻松。您可以在 Hive 中创建表并在其中存储数据。除此之外,您甚至可以将现有的 HBase 表映射到 Hive 并对其进行操作。
虽然 Pig 基本上是一种数据流语言,它使我们能够非常轻松快速地处理大量数据。 Pig 基本上有 2 个部分:Pig Interpreter 和语言 PigLatin。您在 PigLatin 中编写 Pig 脚本并使用 Pig 解释器处理它们。 Pig 让我们的生活轻松了很多,否则写 MapReduce 总是不容易。事实上,在某些情况下,它真的会成为一种痛苦。
我前段时间写过article on a short comparison of different tools of the Hadoop ecosystem。这不是深度比较,而是对这些工具的简短介绍,可以帮助您入门。 (只是为了补充我的答案。无意自我推销)
Hive 和 Pig 查询都在后台转换为 MapReduce 作业。
HTH
【讨论】:
你忘了在 Hadoop 生态系统上谈论yarn
:(.
你的赞已经死了。你能适应吗?【参考方案2】:
我最近在我的公司实施了一个 Hive Data 平台,并且由于我是一个单人团队,所以可以以第一人称的方式与之交谈。
目标
-
每天从 350 多台服务器收集的每日 Web 日志文件可通过类似 SQL 的语言进行查询
用 Hive 替换通过 mysql 生成的每日聚合数据
通过Hive中的查询构建自定义报告
架构选项
我对以下选项进行了基准测试:
-
Hive+HDFS
Hive+HBase - 查询太慢所以我放弃了这个选项
设计
-
每日日志文件已传输到 HDFS
MR 作业在 HDFS 中解析了这些日志文件和输出文件
创建带有指向 HDFS 位置的分区和位置的 Hive 表
创建 Hive 查询脚本(如果您喜欢与 SQL 的差异,则将其称为 HQL),然后在后台运行 MR 作业并生成聚合数据
将所有这些步骤放入 Oozie 工作流程 - 由每日 Oozie 协调员安排
总结
HBase 就像一个地图。如果您知道密钥,您可以立即获得价值。但是如果你想知道Hbase中有多少个整数键在1000000到2000000之间是不适合单独Hbase的。
如果您有需要汇总、汇总、跨行分析的数据,请考虑 Hive。
希望这会有所帮助。
Hive 实际上很摇滚...我知道,我已经住了 12 个月了...HBase...
【讨论】:
HBase 是一个将数据存储在 HDFS 中的 NonSQL 数据库。当您需要对大数据进行随机、实时的读/写访问时,可以使用它。【参考方案3】:Hadoop 是一个框架,它允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。
Hadoop 中有四个主要模块。
Hadoop Common:支持其他 Hadoop 模块的常用实用程序。
Hadoop 分布式文件系统 (HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
Hadoop YARN:用于作业调度和集群资源管理的框架。
Hadoop MapReduce:用于并行处理大型数据集的基于 YARN 的系统。
在继续之前,让我们注意我们有三种不同类型的数据。
结构化:结构化数据具有强架构,在读写操作期间将检查架构。例如Oracle、MySQL Server 等 RDBMS 系统中的数据。
非结构化:数据没有任何结构,可以是任何形式 - Web 服务器日志、电子邮件、图像等。
半结构化:数据不是严格结构化的,但有一些结构。例如XML 文件。
根据要处理的数据类型,我们必须选择合适的技术。
更多项目,它们是 Hadoop 的一部分:
HBase™:一个可扩展的分布式数据库,支持大型表的结构化数据存储。
Hive™:提供数据汇总和即席查询的数据仓库基础架构。
Pig™:用于并行计算的高级数据流语言和执行框架。
Hive 与 PIG 比较可以在此 article 和我在此 SE question 的其他帖子中找到。
HBASE 不会取代 Map Reduce。 HBase 是可扩展的分布式数据库,Map Reduce 是分布式数据处理的编程模型。 Map Reduce 可能会作用于处理中的 HBASE 中的数据。
您可以将 HIVE/HBASE 用于结构化/半结构化数据,并使用 Hadoop Map Reduce 进行处理
您可以使用SQOOP从传统RDBMS数据库Oracle、SQL Server等导入结构化数据,并使用Hadoop Map Reduce进行处理
您可以使用 FLUME 处理非结构化数据并使用 Hadoop Map Reduce 进行处理
看看:Hadoop Use Cases。
Hive 应该用于对一段时间内收集的数据进行分析查询。例如计算趋势、汇总网站日志但不能用于实时查询。
HBase 适合大数据的实时查询。 Facebook 将其用于消息传递和实时分析。
PIG 可用于构建数据流、运行计划作业、处理大量数据、聚合/汇总数据并存储到关系数据库系统中。适合临时分析。
Hive 可用于临时数据分析,但它不能像 PIG 那样支持所有非结构化数据格式。
【讨论】:
Facebook 不再将开源 HBase 用于实时消息传递系统。他们用内部的 [Myrocks 数据库] 取代了它。 (engineering.fb.com/core-data/…)【参考方案4】:假设您使用 RDBMS 并且必须选择要使用的内容 - 全表扫描或索引访问 - 但只能选择其中一种。 如果您选择全表扫描 - 使用 hive。如果索引访问 - HBase。
【讨论】:
其实你可以在 HBase 上构建 Hive,这样你就可以使用 HQL 对 hbase 进行全扫描,同时可以直接在 hbase 上进行索引查询。但我怀疑这会降低您在全扫描时的性能。 HBase 是面向写入的系统,它在扫描方面不是最优的,尽管数据是按顺序存储的。因此,虽然扫描某些范围可能是不错的选择,但完全扫描会比直接从 HDFS 慢得多【参考方案5】:深入了解
Hadoop
Hadoop
是Apache
基金会的一个开源项目。它是一个用Java
编写的框架,最初由Doug Cutting 在2005 年开发。创建它是为了支持文本搜索引擎Nutch
的分发。 Hadoop
使用 Google 的 Map Reduce
和 Google 文件系统技术作为其基础。
Hadoop 的特点
-
它经过优化,可以使用商用硬件处理大量结构化、半结构化和非结构化数据。
它没有共享任何架构。
它将其数据复制到多台计算机中,因此如果一台计算机出现故障,仍可以从存储其副本的另一台计算机处理数据。
Hadoop
用于高吞吐量而不是低延迟。它是处理海量数据的批处理操作;因此响应时间不是即时的。
它补充了在线事务处理和在线分析处理。但是,它不能替代 RDBMS
。
当工作无法并行化或数据中存在依赖关系时,这是不好的。
不适合处理小文件。它最适合处理大型数据文件和数据集。
Hadoop 版本
Hadoop
有两个版本可用:
-
Hadoop 1.0
Hadoop 2.0
Hadoop 1.0
它有两个主要部分:
1.数据存储框架
它是一个通用的文件系统,称为 Hadoop 分布式文件系统 (HDFS
)。
HDFS
没有架构
它只是存储数据文件,这些数据文件几乎可以是任何格式。
我们的想法是尽可能接近原始格式来存储文件。
这反过来又为业务部门和组织提供了急需的灵活性和敏捷性,而不必过度担心它可以实施什么。
2。数据处理框架
这是一个简单的函数式编程模型,最初由 Google 推广为MapReduce
。
它本质上使用两个函数:MAP
和REDUCE
来处理数据。
“映射器”接收一组键值对并生成中间数据(这是另一个键值对列表)。
“Reducers”然后对该输入进行操作以生成输出数据。
这两个功能看似相互隔离,因此能够以高度并行、容错和可扩展的方式高度分布处理。
Hadoop 1.0 的限制
第一个限制是MapReduce
编程专业知识的要求。
它只支持批处理,虽然适用于日志分析、大规模数据挖掘项目等任务,但几乎不适合其他类型的项目。
一个主要限制是Hadoop 1.0
与MapReduce
在计算上紧密耦合,这意味着成熟的数据管理供应商留下了两种意见:
要么在MapReduce
中重写它们的功能,以便它可以
在Hadoop
或
从HDFS
中提取数据或在Hadoop
之外进行处理。
这些选项都不可行,因为它会导致数据移入和移出 Hadoop
集群导致流程效率低下。
Hadoop 2.0
在Hadoop 2.0
中,HDFS
仍然是数据存储框架。
但是,一个新的独立资源管理框架称为 Yet A另一个 Resource Negotiater ( YARN) 已添加。
YARN 支持任何能够将自身划分为并行任务的应用程序。
YARN 协调提交应用的子任务分配,从而进一步提高应用的灵活性、可扩展性和效率。
它的工作原理是使用 Application Master 代替 Job Tracker,在由新的 Node Manager 管理的资源上运行应用程序。
ApplicationMaster 能够运行任何应用程序,而不仅仅是MapReduce
。
这意味着它不仅支持批处理,还支持实时处理。 MapReduce
不再是唯一的数据处理选项。
Hadoop 的优势
它将数据存储在其本机中。在键入数据或存储数据时没有强加结构。 HDFS
少架构。只有稍后需要处理数据时,才会将结构强加于原始数据。
它是可扩展的。 Hadoop
可以在数百台并行运行的廉价服务器上存储和分发非常大的数据集。
它对失败具有弹性。 Hadoop
是容错。它勤奋地实践数据的复制,这意味着每当数据发送到任何节点时,相同的数据也会被复制到集群中的其他节点,从而确保在节点发生故障时,总会有另一个数据副本可供使用。
它很灵活。 Hadoop
的主要优势之一是它可以处理任何类型的数据:结构化、非结构化或半结构化。此外,Hadoop
的处理速度非常快,这要归功于“将代码移动到数据”范例。
Hadoop 生态系统
以下是Hadoop
生态系统的组成部分:
HDFS:Hadoop
分布式文件系统。它只是将数据文件存储在尽可能接近原始格式的位置。
HBase:它是 Hadoop 的数据库,可与 RDBMS
媲美。它支持大表的结构化数据存储。
Hive:它支持使用与标准ANSI SQL
非常相似的语言分析大型数据集,这意味着任何熟悉SQL
的人都应该能够访问Hadoop
集群上的数据.
猪:是一种易于理解的数据流语言。它有助于分析大型数据集,这与Hadoop
相当。 Pig
脚本由 Pig
解释器自动转换为 MapReduce
作业。
ZooKeeper:它是分布式应用程序的协调服务。
Oozie:这是一个工作流schedular
系统来管理Apache Hadoop
作业。
Mahout:它是一个可扩展的机器学习和数据挖掘库。
Chukwa:用于管理大型分布式系统的数据收集系统。
Sqoop:用于在Hadoop
和关系数据库等结构化数据存储之间传输批量数据。
Ambari:它是一个基于 Web 的工具,用于配置、管理和监控 Hadoop
集群。
蜂巢
Hive
是一个数据仓库基础设施工具,用于处理Hadoop
中的结构化数据。它驻留在Hadoop
之上,用于汇总大数据并使查询和分析变得容易。
Hive 不是
关系数据库
在线事务处理设计 (OLTP
)。
一种用于实时查询和行级更新的语言。
Hive 的特点
它将架构存储在数据库中,并将处理后的数据存储到HDFS
。
专为OLAP
设计。
它提供SQL
类型语言用于查询,称为HiveQL
或HQL
。
它更熟悉、快速、可扩展和可扩展。
蜂巢架构
Hive 架构中包含以下组件:
用户界面:Hive
是一个data warehouse
基础架构,可以在用户和HDFS
之间创建交互。 Hive
支持的用户界面是 Hive Web UI、Hive 命令行和 Hive HD Insight(在 Windows Server 中)。
MetaStore:Hive
选择各自的database
servers
存储表、数据库、表中的列、它们的数据类型和@987654383 的架构或Metadata
@映射。
HiveQL 流程引擎:HiveQL
类似于 SQL
,用于查询 Metastore
上的架构信息。它是MapReduce
程序的传统方法的替代之一。不用在Java
中写MapReduce
,我们可以为MapReduce
写一个查询并处理它。
执行引擎:HiveQL
流程引擎和MapReduce
的结合部分是Hive
执行引擎。执行引擎处理查询并生成与MapReduce results
相同的结果。它使用MapReduce
的风格。
HDFS 或 HBase:Hadoop
分布式文件系统或HBase
是将数据存储到文件系统中的数据存储技术。
【讨论】:
【参考方案6】:有关 Hadoop 与 Cassandra/HBase 之间的比较,请阅读此post。
基本上,HBase 可实现真正快速的读写和可扩展性。速度和可扩展性如何? Facebook 使用它来管理其用户状态、照片、聊天消息等。HBase 非常快,有时 Facebook 开发了堆栈以使用 HBase 作为 Hive 本身的数据存储。
Where As Hive 更像是一个数据仓库解决方案。您可以使用类似于 SQL 的语法来查询 Hive 内容,从而生成 Map Reduce 作业。不适合快速的事务性系统。
【讨论】:
【参考方案7】:我从事 Lambda 架构处理实时和批量加载。 如果需要在传感器发送火灾警报或在银行交易的情况下检测欺诈时需要做出快速决策,则需要实时处理。 需要批处理来汇总可以输入 BI 系统的数据。
我们为上述应用使用了 Hadoop 生态系统技术。
实时处理
Apache Storm:流数据处理、规则应用
HBase:用于服务实时仪表板的数据存储
批处理 Hadoop:处理大量数据。 360 度概览或为事件添加上下文。 Pig、MR、Spark、Hive、Shark 等接口或框架有助于计算。这一层需要调度器,Oozie 是个不错的选择。
事件处理层
Apache Kafka 是从传感器消耗高速事件的第一层。 Kafka 通过 Linkedin 连接器提供实时和批量分析数据流。
【讨论】:
【参考方案8】:首先我们应该清楚 Hadoop 是作为 RDBMS 的更快替代方案而创建的。以非常快的速度处理大量数据,这在 RDBMS 中需要大量时间。
现在应该知道这两个术语了:
结构化数据:这是我们在传统 RDBMS 中使用的数据,被划分为明确定义的结构。
非结构化数据:了解这一点很重要,世界上大约 80% 的数据是非结构化或半结构化的。这些是原始形式的数据,无法使用 RDMS 进行处理。示例:facebook、twitter 数据。 (http://www.dummies.com/how-to/content/unstructured-data-in-a-big-data-environment.html)。
因此,过去几年产生了大量数据,而且这些数据大多是非结构化的,这催生了 HADOOP。它主要用于使用 RDBMS 花费大量时间的大量数据。它有很多缺点,不能实时用于相对较小的数据,但他们已经设法在较新的版本中消除了它的缺点。
在继续之前,我想告诉他们,当他们发现以前的工具有问题时,会创建一个新的大数据工具。因此,无论您将看到创建的哪个工具都已完成以克服以前工具的问题。
Hadoop可以简单的说成两件事:Mapreduce和HDFS。 Mapreduce 是进行处理的地方,而 HDFS 是存储数据的数据库。这种结构遵循 WORM 原则,即一次写入多次读取。因此,一旦我们将数据存储在 HDFS 中,我们就无法进行更改。这导致了 HBASE 的创建,这是一个 NOSQL 产品,我们可以在写入一次后对数据进行更改。
但随着时间的推移,我们发现 Hadoop 存在许多故障,为此我们在 Hadoop 结构上创建了不同的环境。 PIG 和 HIVE 是两个流行的例子。
HIVE 是为具有 SQL 背景的人创建的。编写的查询类似于名为 HIVEQL 的 SQL。 HIVE 被开发用于处理完全结构化数据。它不用于非结构化数据。
另一方面,PIG 有自己的查询语言,即 PIG LATIN。它可用于结构化以及非结构化数据。
谈到何时使用 HIVE 和何时使用 PIG 的区别,我认为除了 PIG 的架构师之外没有任何人可以说。按照链接: https://developer.yahoo.com/blogs/hadoop/comparing-pig-latin-sql-constructing-data-processing-pipelines-444.html
【讨论】:
【参考方案9】:Hadoop:
HDFS 代表 Hadoop 分布式文件系统,它使用计算处理模型 Map-Reduce。
HBase:
HBase 是 Key-Value 存储,适合近乎实时的读写。
蜂巢:
Hive 用于使用类似 SQL 的语法从 HDFS 中提取数据。 Hive 使用 HQL 语言。
猪:
Pig 是一种用于创建 ETL 的数据流语言。它是一种脚本语言。
【讨论】:
【参考方案10】:让我试着用几句话来回答。
Hadoop 是一个包含所有其他工具的生态系统。因此,您无法比较 Hadoop,但可以比较 MapReduce。
这是我的几分钱:
-
Hive:如果您的需求非常 SQL 意味着您的问题陈述可以由 SQL 满足,那么最简单的做法就是使用 Hive。另一种情况是,当您希望服务器具有特定的数据结构时,您将使用 hive。
Pig:如果您对 Pig Latin 感到满意并且您需要更多的数据管道。此外,您的数据缺乏结构。在这些情况下,您可以使用 Pig。老实说,Hive 和 Pig 在用例方面没有太大区别。
MapReduce:如果你的问题不能直接使用 SQL 解决,你首先应该尝试为 Hive & Pig 创建 UDF,然后如果 UDF 不能解决问题,那么通过 MapReduce 完成它是有意义的.
【讨论】:
【参考方案11】:猪:更好的处理文件和清理数据 示例:删除空值、字符串处理、不必要的值 Hive:用于查询已清理的数据
【讨论】:
【参考方案12】:1.我们使用 Hadoop 以 txt、csv 等表单文件格式存储大数据(即结构、非结构和半结构数据)。
2.如果我们想要在我们的数据中进行列更新,那么我们正在使用 Hbase 工具
3.在 Hive 的情况下,我们存储的是结构化格式的大数据 除此之外,我们还提供对该数据的分析。
4.Pig是使用Pig拉丁语言分析任何格式(结构、半结构和非结构)数据的工具。
【讨论】:
【参考方案13】:在Pig中清理数据非常简单,一个合适的方法是通过pig清理数据,然后通过hive处理数据,然后上传到hdfs。
【讨论】:
【参考方案14】:使用 Hive、Hbase 和 Pig w.r.t.我在不同项目中的实时经验。
Hive 主要用于:
需要对历史数据进行分析的分析目的
根据特定列生成业务报告
有效地管理数据和元数据信息
使用分桶概念在某些经常使用的列上连接表
使用分区概念进行高效存储和查询
对于更新、删除等事务/行级操作无用。
猪主要用于:
海量数据的频繁数据分析
在海量数据上生成聚合值/计数
非常频繁地生成企业级关键绩效指标
多用Hbase:
用于实时处理数据
用于高效管理复杂和嵌套模式
实时查询和更快的结果
通过列轻松扩展
对事务/行级别的操作很有用,例如更新、删除等。
【讨论】:
【参考方案15】:这个问题的简短答案是 -
Hadoop - 是一种促进分布式文件系统和编程模型的框架,使我们能够以分布式方式非常有效地存储大量数据并处理数据,并且与传统方法相比,处理时间非常短。
(HDFS - Hadoop 分布式文件系统) (Map Reduce - 分布式处理的编程模型)
Hive - 是一种查询语言,它允许以非常流行的类似 SQL 的方式从 Hadoop 分布式文件系统读取/写入数据。这让许多非编程背景的人的生活变得更轻松,因为他们不再需要编写 Map-Reduce 程序,除非是不支持 Hive 的非常复杂的场景。
Hbase - 是列式 NoSQL 数据库。 Hbase 的底层存储层还是 HDFS。该数据库最重要的用例是能够存储数十亿行和数百万列。 Hbase 的低延迟特性有助于更快、更随机地访问分布式数据上的记录,这是使其对推荐引擎等复杂项目有用的非常重要的特性。此外,它的记录级别版本控制功能允许用户非常有效地存储事务数据(这解决了我们使用 HDFS 和 Hive 更新记录的问题)
希望这有助于快速理解以上 3 个特性。
【讨论】:
【参考方案16】:我相信这个帖子并没有特别公正地对待 HBase 和 Pig。虽然我认为 Hadoop 是用于大数据湖实施的分布式、弹性文件系统的选择,但 HBase 和 Hive 之间的选择尤其是隔离良好的。
同样,许多用例对类似 SQL 或类似 No-SQL 的接口都有特定要求。 Phoenix 在 HBase 之上,虽然可以实现类似 SQL 的功能,但是性能、第三方集成、仪表板更新是一种痛苦的体验。但是,对于需要水平扩展的数据库来说,它是一个很好的选择。
Pig 特别适用于非递归批处理,如计算或 ETL 流水线(在某些地方,它的性能优于 Spark)。此外,它的高级数据流实现是批量查询和脚本的绝佳选择。 Pig 和 Hive 之间的选择还取决于客户端或服务器端脚本的需要、所需的文件格式等。Pig 支持 Avro 文件格式,而 Hive 则不支持。 “过程数据流语言”与“声明性数据流语言”的选择也是猪和蜂巢之间选择的有力论据。
【讨论】:
【参考方案17】:在 Cloudera 在 CDP 中摆脱它后,Pig 基本上已经死了。 Apache 上的最后一个版本也是 2017 年 6 月 19 日:发布 0.17.0,所以基本上没有提交者在积极工作了。使用比 Pig 更强大的 Spark 或 Python。
【讨论】:
以上是关于何时使用 Hadoop、HBase、Hive 和 Pig?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Hive 版本 1.1.0 HBase 版本 0.94.8 和 hadoop 版本 2.7.0 从 Hive 创建 Hbase 表
在 Hadoop 中使用 HBase 而不是 Hive [重复]
sql 使用Hadoop,Hive和HBase进行Apache日志分析