何时使用Hadoop,HBase,Hive和Pig?
使用Hadoop或HBase或Hive有什么好处?
根据我的理解, HBase避免使用map-reduce,并且在HDFS之上有一个面向列的存储。 Hive是一个类似于SQL的Hadoop和HBase接口。
我也想知道Hive与Pig的比较。
MapReduce只是一个计算框架 。 HBase与它无关。 也就是说,通过编写MapReduce作业,您可以高效地将数据发送到HBase或从HBase获取数据。 或者,您可以使用其他HBase API(如Java)编写顺序程序来放入或取出数据。 但是我们使用Hadoop,HBase等来处理大量的数据,所以没有多大意义。 当你的数据太大时,使用正常的顺序程序会非常低效。
回到你的问题的第一部分,Hadoop基本上是两件事: 分布式文件系统(HDFS) + 计算或处理框架(MapReduce) 。 像所有其他FS一样,HDFS也为我们提供了存储,但却具有高吞吐量和低数据丢失风险(由于复制)的容错方式。 但是,作为一个FS,HDFS缺乏随机的读写访问 。 这是HBase进入图片的地方。 这是一个分布式,可扩展的大数据存储 ,仿照Google的BigTable。 它将数据存储为键/值对。
来蜂巢。 它为我们提供了在现有Hadoop集群之上的数据仓库设施。 除此之外,它还提供了一个类似于SQL的界面,可以让您的工作变得更轻松,以防来自SQL背景。 您可以在Hive中创build表格并在其中存储数据。 除此之外,您甚至可以将现有的HBase表映射到Hive并对其进行操作。
虽然Pig基本上是一种数据stream语言 ,可以让我们轻松快速地处理大量的数据。 猪主要有两个部分:Pig Interpreter和语言PigLatin 。 你在PigLatin中写猪脚本并使用Pig解释器处理它们。 猪让我们的生活变得更轻松,否则编写MapReduce总是不容易的。 事实上,在某些情况下,它确实会变成一种痛苦。
我刚才写了一篇关于Hadoop生态系统不同工具的简短比较的文章 。 这不是一个深入的比较,而是每个这些工具的简短介绍,可以帮助您开始。 (只是添加到我的答案,没有自我推销的意图)
Hive和Pig查询都转化为底层的MapReduce作业。
HTH
我最近在我的公司实施了一个Hive Data平台,可以从第一人称开始,因为我是一个团队。
目的
- 通过一些像语言一样的SQL,可以从每天从350多个服务器收集的每日networking日志文件
- replace通过MySQL与Hive生成的日常聚合数据
- 通过Hive中的查询构build自定义报告
架构选项
我基准以下选项
- 蜂巢+ HDFS
- Hive + HBase – 查询太慢,所以抛弃了这个选项
devise
- 每日日志文件被传输到HDFS
- MR作业parsing了这些日志文件并在HDFS中输出文件
- 使用指向HDFS位置的分区和位置创buildHive表
- 创buildHive查询脚本(如果你喜欢SQL的差异,就把它叫做HQL ),然后在后台运行MR作业并生成聚合数据
- 把所有这些步骤放到Oozie工作stream程中 – 按照每日Oozie协调员计划
概要
HBase就像一个Map。 如果你知道钥匙,你可以马上获得价值。 但是,如果你想知道Hbase中有多less个整数键在1000000到2000000之间,那么它就不适合单独使用Hbase 。
如果您有数据要汇总,汇总,跨行分析,请考虑Hive
希望这有助于。
蜂巢其实岩石真的很好…我知道我已经住了12个月了… HBase也是这样 …
考虑你使用RDBMS,必须select使用什么 – 全表扫描或索引访问 – 但只有其中之一。
如果您select全表扫描 – 使用configuration单元。 如果索引访问 – HBase。
Hadoop是一个框架,允许使用简单的编程模型跨计算机群集分布式处理大型数据集。
Hadoop中有四个主要模块。
-
Hadoop Common :支持其他Hadoop模块的常用工具。
-
Hadoop分布式文件系统( HDFS™ ):提供对应用程序数据的高吞吐量访问的分布式文件系统。
-
Hadoop YARN :作业调度和集群资源pipe理的框架。
-
Hadoop MapReduce :一个用于并行处理大型数据集的基于YARN的系统。
在继续之前,让我们注意到,我们有三种不同types的数据。
-
结构化 :结构化数据具有强大的模式,在写操作和读操作期间将检查模式。 例如Oracle,MySQL服务器等RDBMS系统中的数据。
-
非结构化 :数据没有任何结构,可以是任何forms – Web服务器日志,电子邮件,图像等。
-
半结构化 :数据结构不严格,但有一定的结构。 如XML文件。
根据要处理的数据types,我们必须select正确的技术。
还有一些项目,它们是Hadoop的一部分:
-
HBase™ :一种可扩展的分布式数据库,支持大型表格的结构化数据存储。
-
Hive ™:一种数据仓库基础架构,提供数据汇总和临时查询。
-
Pig™ :用于并行计算的高级数据stream语言和执行框架。
蜂巢Vs猪比较可以在这篇文章和我在这个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用例 。
Hive应该用于对一段时间内收集的数据进行分析查询。 例如计算趋势,总结网站日志,但不能用于实时查询。
HBase适合实时查询大数据。 Facebook使用它进行消息传递和实时分析。
PIG可用于构build数据stream,运行预定作业,处理大量数据,汇总/汇总数据并将其存储到关系数据库系统中。 适合特别分析。
Hive可用于即席数据分析,但不能支持所有与PIG不同的非结构化数据格式。
对于Hadoop Vs Cassandra / HBase的比较阅读这篇文章 。
基本上HBase能够以可扩展性实现快速读取和写入。 多快和可扩展? Facebook使用它来pipe理其用户状态,照片,聊天消息等。HBase是如此之快,有时Facebook已经开发了堆栈来使用HBase作为Hive本身的数据存储。
As Hive更像是一个数据仓库解决scheme。 您可以使用类似于SQL的语法来查询导致Map Reduce作业的Hive内容。 对于快速交易系统来说,这并不理想。
我在处理实时和批量加载的Lambda架构上工作。 如果在传感器发出火警或在银行交易中发现欺诈,需要做出快速决定的实时处理。 需要批处理才能汇总可以inputBI系统的数据。
我们将Hadoop生态系统技术用于以上应用程序。
实时处理
Apache Storm:stream数据处理,规则应用程序
HBase:数据存储服务实时仪表板
批处理 Hadoop: 处理大量的数据。 360度概览或为事件添加上下文。 像Pig,MR,Spark,Hive,Shark等接口或框架有助于计算。 这个层需要调度程序的Oozie是不错的select。
事件处理层
Apache Kafka是第一个消耗传感器高速事件的层。 Kafka通过Linkedin连接器提供实时和批量分析数据stream。
首先,我们应该清楚的知道, Hadoop被创build为RDBMS的更快select。 以较快的速度处理大量的数据,这在RDBMS中花费了大量的时间。
现在应该知道这两个术语:
-
结构化数据 :这是我们在传统的RDBMS中使用的数据,并分为定义明确的结构。
-
非结构化数据 :这一点很重要,大约80%的世界数据是非结构化或半结构化的。 这些数据是原始数据,不能用RDMS处理。 例如:facebook,twitter数据。 ( http://www.dummies.com/how-to/content/unstructured-data-in-a-big-data-environment.html )。
因此,近几年来大量的数据产生,数据大部分是非结构化的,这就产生了HADOOP。 它主要用于非常大量的使用RDBMS的时间不可行的数据。 它有许多缺点,它不能实时用于比较小的数据,但是它们已经设法消除了在较新版本中的缺点。
在进一步讨论之前,我想告诉大家,当他们发现以前的工具出现故障时,会创build一个新的大数据工具。 因此,无论您将看到创build的哪个工具,都可以克服以前工具的问题。
Hadoop可以简单地说成是两件事: Mapreduce和HDFS 。 Mapreduce是处理发生的地方,HDFS是存储数据的DataBase。 这个结构遵循WORM主体,即多次写入一次。 所以,一旦我们将数据存储在HDFS中,我们就不能做出改变。 这导致创build了一个NOSQL产品HBASE ,我们可以在写入数据之后对数据进行更改。
但随着时间的推移,我们看到Hadoop出现了许多错误,为此我们在Hadoop结构上创build了不同的环境。 PIG和HIVE是两个stream行的例子。
HIVE是为具有SQL背景的人创build的。 写入的查询类似于名为HIVEQL的 SQL。 HIVE的开发是为了处理完整的结构化数据 。 它不被用于结构化数据。
猪另一方面有它自己的查询语言,即猪拉丁 。 它既可以用于结构化数据 ,也可以用于非结构化数据 。
关于什么时候使用HIVE和何时使用PIG,我不认为PIG的build筑师可以说任何人都不会说。 请点击以下链接: https : //developer.yahoo.com/blogs/hadoop/comparing-pig-latin-sql-constructing-data-processing-pipelines-444.html
我是Hadoop的初学者,目前我正在使用Hadoop和Pig Latin进行项目。 有一点经验,我可以评论猪vs蜂巢。
这是比较:
- 猪拉丁语是程序性的,Hive是声明性的。
- Pig Latin允许pipe道开发人员决定pipe道中的检查点数据。
- Pig Latin允许开发者直接select特定的操作符实现,而不是依赖于优化器。
- 猪拉丁语支持分裂。
- Pig Latin允许开发人员在数据pipe道的几乎任何位置插入自己的代码。
让我试着用几句话来回答。
Hadoop是一个包含所有其他工具的生态系统。 所以,你不能比较Hadoop,但你可以比较MapReduce。
这是我的几分钱:
- Hive:如果您的需求非常SQLish,那么您的问题陈述可以由SQL来处理,那么最简单的方法就是使用Hive。 另一种情况是,当你使用configuration单元的时候,你希望服务器有一定的数据结构。
- 猪:如果你喜欢猪拉丁文,你需要更多的数据pipe道。 而且,你的数据缺乏结构。 在这些情况下,你可以使用猪。 说实话,Hive和Pig在用例方面没有太大的区别。
- MapReduce:如果直接使用SQL无法解决问题,首先应该尝试为Hive&Pig创buildUDF,然后如果UDF没有解决问题,那么通过MapReduce来完成是有意义的。
猪:最好是处理文件和清理数据例如:删除空值,string处理,不必要的值蜂巢:用于查询清理的数据