何时使用Hadoop,HBase,Hive和Pig?


185

使用HadoopHBaseHive有什么好处什么?

据我了解,HBase避免使用map-reduce,并且在HDFS之上具有面向列的存储。HiveHadoopHBase的类似于sql的接口。

我还想知道HivePig的比较。


Hadoop:Hadoop分布式文件系统+计算处理模型MapReduce。HBase:键值存储,适合于近乎实时的读写。Hive:用于使用类似SQL的语法从HDFS提取数据。Pig:是用于创建ETL的数据流语言。
dbustosp '18年

Answers:


348

MapReduce只是一个计算框架。HBase与它无关。也就是说,您可以通过编写MapReduce作业高效地将数据放入HBase或从HBase提取数据。或者,您可以使用其他HBase API(例如Java)编写顺序程序来放置或获取数据。但是我们使用Hadoop,HBase等来处理大量数据,所以这没有多大意义。当您的数据太大时,使用常规的顺序程序将效率很低。

回到问题的第一部分,Hadoop本质上是两件事:分布式文件系统(HDFS) + 计算或处理框架(MapReduce)。像所有其他FS一样,HDFS也为我们提供存储,但是以容错的方式提供了高吞吐量和较低的数据丢失风险(由于复制)。但是,作为FS,HDFS缺乏随机的读写访问权限。这就是HBase发挥作用的地方。它是一个分布式的,可扩展的大数据存储,以Google的BigTable为模型。它将数据存储为键/值对。

来到蜂巢。它在现有Hadoop集群之上为我们提供了数据仓库设施。除此之外,它还提供类似SQL的界面,以防您来自SQL背景,从而使您的工作更加轻松。您可以在Hive中创建表并在其中存储数据。除此之外,您甚至可以将现有的HBase表映射到Hive并对其进行操作。

Pig基本上是一种数据流语言,它使我们能够非常轻松,快速地处理大量数据。Pig主要包含两部分:Pig 解释器和语言PigLatin。您可以在PigLatin中编写Pig脚本,并使用Pig解释器对其进行处理。Pig使我们的生活更加轻松,否则编写MapReduce总是不容易。实际上,在某些情况下,它可能真的很痛苦。

前一段时间,我写了一篇关于Hadoop生态系统不同工具的简短比较文章。这不是深入的比较,而是对每个工具的简短介绍,可以帮助您入门。(只需添加我的答案即可。无意自我提升)

Hive和Pig查询都将转换为后台的MapReduce作业。

高温超导


你忘了谈谈yarn在Hadoop生态系统:(。
Kenry桑切斯

53

我最近在我的公司中实施了Hive Data平台,并且由于我是一个人的团队,因此可以第一人称与它交谈。

目的

  1. 每天可通过某些SQL之类的语言查询从350多个服务器收集的每日Web日志文件
  2. 用Hive 替换通过MySQL生成的每日聚合数据
  3. 通过Hive中的查询生成自定义报告

架构选项

我对以下选项进行了基准测试:

  1. 蜂巢+ HDFS
  2. Hive + HBase-查询太慢,所以我转储了此选项

设计

  1. 每日日志文件已传输到HDFS
  2. MR作业在HDFS中解析了这些日志文件和输出文件
  3. 使用分区和指向HDFS位置的位置创建Hive表
  4. 创建Hive查询脚本(如果您喜欢SQL的差异,则将其命名为HQL),从而在后台运行MR作业并生成聚合数据
  5. 将所有这些步骤放到Oozie工作流程中-由Daily Oozie Coordinator 安排

摘要

HBase就像一张地图。如果您知道密钥,就可以立即获得价值。但是,如果您想知道Hbase中有多少个整数键在1000000和2000000之间,则这不适合单独使用Hbase

如果您有需要汇总,汇总,跨行分析的数据,请考虑使用Hive

希望这会有所帮助。

Hive实际上是岩石...我知道,我已经住了12个月... HBase也是如此 ...


1
HBase是一个将数据存储在HDFS中的NonSQL数据库。当您需要对大数据进行随机,实时的读/写访问时,可以使用它。
根循环

28

Hadoop是一个框架,它允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。

Hadoop中有四个主要模块。

  1. Hadoop Common:支持其他Hadoop模块的通用实用程序。

  2. Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。

  3. Hadoop YARN:用于作业调度和集群资源管理的框架。

  4. Hadoop MapReduce:基于YARN的系统,用于并行处理大数据集。

在继续之前,让我们注意一下,我们有三种不同类型的数据。

  • 结构化:结构化数据具有强大的架构,并且在读写操作期间将检查架构。例如RDBMS系统中的数据,例如Oracle,MySQL Server等。

  • 非结构化:数据没有任何结构,并且可以是任何形式-Web服务器日志,电子邮件,图像等。

  • 半结构化:数据不是严格结构化的,而是具有某种结构的。例如XML文件。

根据要处理的数据类型,我们必须选择正确的技术。

更多项目,它们是Hadoop的一部分:

  • HBase™:可扩展的分布式数据库,支持大型表的结构化数据存储。

  • Hive ™:一种数据仓库基础结构,可提供数据汇总和即席查询。

  • Pig™:用于并行计算的高级数据流语言和执行框架。

Hive与PIG的比较可以在本文中找到,我的其他帖子也可以在SE 问题中找到

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用例

蜂房应用于一段时间内收集的数据的分析查询。例如,计算趋势,汇总网站日志,但不能用于实时查询。

HBase适合于大数据的实时查询。Facebook将其用于消息传递和实时分析。

可用于构造数据流,运行计划的作业,处理大量数据,对其进行汇总/汇总并存储到关系数据库系统中。适用于临时分析。

Hive可以用于临时数据分析,但它不能像PIG一样支持所有非结构化数据格式。


Facebook不再将开源HBase用于实时消息传递系统。他们用内部[Myrocks数据库]替换了它。(engineering.fb.com/core-data/...
PPK

23

考虑到您使用RDBMS,必须选择使用什么(全表扫描或索引访问),但只能选择其中一种。
如果选择全表扫描-请使用配置单元。如果索引访问-HBase。


实际上,您可以在HBase上构建Hive,以便可以使用HQL完全扫描hbase,同时可以直接在hbase上进行索引查询。但是我怀疑这是否会降低全扫描的性能。
FrostNovaZzz 2015年

HBase是面向写的系统,尽管数据按排序存储,但它并不是最佳的扫描方法。因此,尽管扫描某些范围可能是不错的选择,但与直接从HDFS进行全面扫描相比,它的速度要慢得多
David Gruzman 2015年

5

有关Hadoop与Cassandra / HBase之间的比较,请阅读此内容 文章

基本上,HBase可实现具有扩展性的真正快速的读写。如何快速和可扩展?脸书使用它来管理其用户状态,照片,聊天消息等。HBase是如此之快,有时Facebook已开发出堆栈以将HBase用作Hive本身的数据存储。

其中,As Hive更像是数据仓库解决方案。您可以使用类似于SQL的语法来查询Hive内容,这将导致Map Reduce作业。对于快速的交易系统而言并不理想。


5

我从事Lambda体系结构处理实时和批处理负载的工作。在需要通过快速决策来进行快速决策的情况下,需要实时处理,如果通过传感器发送火灾警报,或者在进行银行交易时可以进行欺诈检测。需要批处理来汇总可馈入BI系统的数据。

我们将Hadoop生态系统技术用于上述应用程序。

实时处理

Apache Storm:流数据处理,规则应用

HBase:用于服务实时仪表板的数据存储

批量处理 Hadoop:大量数据。360度概览或向事件添加上下文。诸如Pig,MR,Spark,Hive,Shark之​​类的接口或框架有助于计算。该层需要调度程序,Oozie是很好的选择。

事件处理层

Apache Kafka是消耗传感器高速事件的第一层。Kafka通过Linkedin连接器提供实时和批处理分析数据流。


5

深入了解

Hadoop的

HadoopApache基金会的一个开源项目。它是用编写的框架Java,最初由Doug Cutting在2005年开发。它是为支持Nutch文本搜索引擎的发行而创建的。Hadoop以Google Map Reduce和Google文件系统技术为基础。

Hadoop的功能

  1. 它经过优化,可使用商品硬件处理大量结构化,半结构化和非结构化数据。
  2. 它没有共享任何体系结构。
  3. 它将数据复制到多台计算机中,这样即使一台计算机出现故障,仍然可以从存储其副本的另一台计算机上处​​理数据。
  4. Hadoop用于高吞吐量而不是低延迟。这是处理大量数据的批处理操作;因此响应时间不是立即的。
  5. 它补充了在线交易处理和在线分析处理。但是,它不能代替RDBMS
  6. 当工作无法并行化或数据中存在依赖项时,这是不好的。
  7. 处理小文件不是很好。它最适用于海量数据文件和数据集。

Hadoop的版本

有两个Hadoop可用的版本:

  1. Hadoop 1.0
  2. Hadoop 2.0

Hadoop 1.0

它包含两个主要部分:

1.数据存储框架

它是一个通用文件系统,称为Hadoop分布式文件系统(HDFS)。

HDFS 没有架构

它只是存储数据文件,而这些数据文件几乎可以是任何格式。

想法是将文件存储为尽可能接近其原始格式。

反过来,这又为业务部门和组织提供了急需的灵活性和敏捷性,而不必为它可以实现什么而过度担心。

2.数据处理框架

这是一个简单的函数式编程模型,最初由Google推广为MapReduce

它本质上使用两个功能:MAPREDUCE处理数据。

“映射器”采用一组键值对并生成中间数据(这是键值对的另一个列表)。

然后,“减速器”对该输入进行操作以产生输出数据。

这两个功能看似彼此隔离,从而使处理能够以高度并行,容错和可扩展的方式高度分布。

Hadoop 1.0的局限性

  1. 第一个限制是需要MapReduce编程专家。

  2. 它仅支持批处理,尽管该批处理适合诸如日志分析,大规模数据挖掘项目之类的任务,但几乎不适合其他类型的项目。

  3. 一个主要限制是与Hadoop 1.0紧密结合MapReduce,这意味着已建立的数据管理供应商留下了两种意见:

    1. 要么重写它们的功能中MapReduce,这样它可以在被执行Hadoop

    2. 从中提取数据HDFS或在之外处理数据Hadoop

没有一种选择是可行的,因为它会导致由于将数据移入和移出Hadoop集群而导致流程效率低下。

Hadoop 2.0

Hadoop 2.0HDFS继续是数据存储框架。

然而,被称为新的和独立的资源管理框架ý诺特尔ř esource Ñ egotiater(YARN已添加)。

YARN支持任何能够将自己划分为并行任务的应用程序。

YARN协调提交的应用程序的子任务的分配,从而进一步增强了应用程序的灵活性,可伸缩性和效率。

它可以通过使用应用程序主控器代替Job Tracker工作,并在新的节点管理器控制的资源上运行应用程序。

ApplicationMaster能够运行任何应用程序,而不仅仅是MapReduce

这意味着它不仅支持批处理,而且还支持实时处理。MapReduce不再是唯一的数据处理选项。

Hadoop的优势

它将数据存储在其本机中。键入数据或存储数据时不施加任何结构。HDFS模式少了。仅在稍后需要处理数据时,才将结构强加于原始数据。

它是可扩展的。Hadoop可以在数百个并行运行的廉价服务器上存储和分发非常大的数据集。

它可以抵抗失败。 Hadoop是容错能力。它努力地进行数据复制,这意味着每当将数据发送到任何节点时,相同的数据也会被复制到集群中的其他节点,从而确保在发生节点故障的情况下,总会有另一个可用的数据副本。

它很灵活。Hadoop它的主要优点之一是它可以处理任何类型的数据:结构化,非结构化或半结构化。同样,Hadoop由于“将代码移动到数据”范例,处理速度非常快。

Hadoop生态系统

以下是Hadoop生态系统的组成部分:

HDFSHadoop分布式文件系统。它只是存储数据文件,使其尽可能接近原始格式。

HBase:这是Hadoop的数据库,可以与进行比较RDBMS。它支持大型表的结构化数据存储。

Hive:它可以使用与standard非常相似的语言来分析大型数据集ANSI SQL,这意味着熟悉该语言的任何人都SQL应该能够访问Hadoop集群上的数据。

:这是一种易于理解的数据流语言。它有助于分析大型数据集,这与的顺序相当HadoopPig脚本MapReducePig解释器自动转换为作业。

ZooKeeper:这是用于分布式应用程序的协调服务。

Oozie:这是一个schedular用于管理Apache Hadoop作业的工作流系统。

Mahout:这是一个可扩展的机器学习和数据挖掘库。

Chukwa:这是用于管理大型分布式系统的数据收集系统。

Sqoop:用于在批量数据Hadoop和结构化数据存储(如关系数据库)之间传输。

Ambari:这是一个基于Web的工具,用于供应,管理和监视Hadoop集群。

蜂巢

Hive是一个数据仓库基础设施工具,用于处理Hadoop。它位于Hadoop总结大数据的顶部,使查询和分析变得容易。

蜂巢不是

  1. 关系数据库

  2. 在线交易处理(OLTP)的设计。

  3. 一种用于实时查询和行级更新的语言。

蜂巢的功能

  1. 它将模式存储在数据库中,并将处理后的数据存储到中HDFS

  2. 它是专为OLAP

  3. 它提供了SQL用于查询的类型语言,称为HiveQLHQL

  4. 它更加熟悉,快速,可扩展和可扩展。

蜂巢架构

Hive体系结构中包含以下组件:

  1. 用户界面Hive是一种data warehouse基础设施,可以在用户和用户之间建立互动HDFSHive支持的用户界面包括Hive Web UI,Hive命令行和Hive HD Insight(在Windows Server中)。

  2. MetaStoreHive选择各自database servers存储模式或Metadata表,数据库,表中的列,其数据类型和HDFS映射。

  3. HiveQL流程引擎HiveQL类似于在SQL.NET上查询架构信息Metastore。它是传统MapReduce程序方法的替代之一。而不是写的MapReduceJava,我们可以写一个查询MapReduce并处理它。

  4. Exceution EngineHiveQL流程引擎的结合部分,MapReduceHiveExecution Engine。执行引擎处理查询并生成与相同的结果MapReduce results。它使用的味道MapReduce

  5. HDFS或HBaseHadoop分布式文件系统,还是HBase将数据存储到文件系统中的数据存储技术。


1

首先,我们应该清楚Hadoop是作为RDBMS的更快替代品而创建的。以非常快的速度处理大量数据,这在RDBMS中花费了很多时间。

现在应该知道两个术语:

  1. 结构化数据:这是我们在传统RDBMS中使用的数据,并分为定义明确的结构。

  2. 非结构化数据:了解这一点很重要,世界上约80%的数据是非结构化或半结构化的。这些是原始格式的数据,无法使用RDMS进行处理。示例:facebook,twitter数据。(http://www.dummies.com/how-to/content/unstructured-data-in-a-big-data-environment.html)。

因此,过去几年中生成了大量数据,并且这些数据大多是非结构化的,从而催生了HADOOP。它主要用于使用RDBMS花费大量时间的大量数据。它具有许多缺点,无法实时用于相对较小的数据,但它们已设法消除了在较新版本中的缺点。

在继续之前,我想告诉他们一个新的大数据工具,当他们看到以前的工具出现故障时,就会创建它们。因此,无论看到哪种工具,都可以完成,以解决先前工具的问题。

Hadoop可以简单地说成两件事:MapreduceHDFS。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


1

Hadoop:

HDFS代表使用计算处理模型Map-Reduce的Hadoop分布式文件系统。

HBase:

HBase是键值存储,非常适合于近乎实时的读写。

蜂巢:

Hive用于使用类似SQL的语法从HDFS提取数据。蜂巢使用HQL语言。

猪:

Pig是用于创建ETL的数据流语言。这是一种脚本语言。


0

让我尝试用几句话回答。

Hadoop是一个包含所有其他工具的生态系统。因此,您无法比较Hadoop,但可以比较MapReduce。

这是我的几分钱:

  1. Hive:如果您非常需要SQLish,这意味着您的问题陈述可以由SQL满足,那么最简单的方法就是使用Hive。另一种情况是,当您要使用配置单元时,是希望服务器具有特定的数据结构。
  2. Pig:如果您对Pig Latin感到满意,则需要更多的数据管道。此外,您的数据缺乏结构。在这种情况下,您可以使用Pig。老实说,Hive&Pig在用例方面并没有太大区别。
  3. MapReduce:如果直接使用SQL无法解决问题,则首先应尝试为Hive&Pig创建UDF,然后,如果UDF无法解决问题,则可以通过MapReduce解决。

0

Pig:最好处理文件和清理数据示例:删除空值,字符串处理,不必要的值蜂巢:用于查询清理的数据


0

1.我们正在使用Hadoop以txt,csv之类的文件格式存储大数据(即结构,非结构和半结构数据)。

2.如果我们希望在数据中进行柱状更新,那么我们正在使用Hbase工具

3.在Hive的情况下,我们存储的是结构化格式的大数据,此外,我们还提供对该数据的分析。

4.Pig是使用Pig拉丁语语言分析任何格式(结构,半结构和非结构)的数据的工具。



0

我在不同项目中的实时使用Hive,Hbase和Pig的经验。

蜂巢主要用于:

  • 分析目的,您需要对历史数据进行分析

  • 根据某些列生成业务报告

  • 有效管理数据和元数据信息

  • 在某些列上联接表,这些表经常使用存储桶概念来使用

  • 使用分区概念进行有效的存储和查询

  • 对于事务/行级别的操作(如更新,删除等)没有用。

猪主要用于:

  • 大量数据的频繁数据分析

  • 在海量数据上生成汇总值/计数

  • 非常频繁地生成企业级关键绩效指标

Hbase主要用于:

  • 用于数据的实时处理

  • 有效管理复杂和嵌套模式

  • 实时查询和更快的结果

  • 色谱柱易于扩展

  • 对于事务/行级别的操作(如更新,删除等)很有用。


0

这个问题的简短答案是-

Hadoop-Is Framework有助于分布式文件系统和编程模型,与传统方法相比,该模型使我们能够以分布式方式非常高效地以庞大的方式存储庞大的数据和处理数据,并且处理时间更少。

(HDFS-Hadoop分布式文件系统)(Map Reduce-分布式处理的编程模型)

Hive-一种查询语言,它允许以非常流行的类似SQL的方式从Hadoop分布式文件系统读取/写入数据。对于许多非编程背景人员来说,这使生活变得更加轻松,因为他们不再需要编写Map-Reduce程序,除了不支持Hive的非常复杂的场景。

Hbase-是柱状NoSQL数据库。Hbase的底层存储层还是HDFS。此数据库最重要的用例是能够存储十亿行和一百万列。Hbase的低延迟功能有助于更快,随机地访问分布式数据上的记录,这是非常重要的功能,使其对于诸如Recommender Engines之类的复杂项目很有用。此外,它的记录级别版本控制功能使用户可以非常有效地存储事务数据(这解决了更新我们使用HDFS和Hive拥有的记录的问题)

希望这有助于快速了解以上三个功能。


0

我相信这个线程并没有特别针对HBase和Pig。尽管我认为Hadoop是大数据湖实施的分布式,有弹性的文件系统的选择,但HBase和Hive之间的选择尤其合理。

与之类似,许多用例对类似SQL或类似No-SQL的接口有特定的要求。使用Phoenix在HBase之上,虽然可以实现类似SQL的功能,但是,性能,第三方集成,仪表板更新是一种痛苦的体验。但是,对于需要水平扩展的数据库来说,这是一个绝佳的选择。

Pig对于非递归批处理(例如计算或ETL流水线)(在某个地方,它的性能优于Spark的地方)特别出色。而且,它的高级数据流实现是批处理查询和脚本编写的绝佳选择。Pig和Hive之间的选择还取决于客户端或服务器端脚本的需求,所需的文件格式等。Pig支持Avro文件格式,而Hive则不然。“过程数据流语言”与“声明性数据流语言”的选择也是在猪和蜂巢之间进行选择的强烈理由。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.