我对 Pig、Hive 抽象是什么有了基本的了解。但我对需要 Hive、Pig 或原生 map reduce 的场景没有明确的想法。
我浏览了几篇文章,基本上指出 Hive 用于结构化处理,Pig 用于非结构化处理。我们什么时候需要原生 map reduce?您能否指出一些使用 Pig 或 Hive 无法解决但在原生 map reduce 中无法解决的场景?
我对 Pig、Hive 抽象是什么有了基本的了解。但我对需要 Hive、Pig 或原生 map reduce 的场景没有明确的想法。
我浏览了几篇文章,基本上指出 Hive 用于结构化处理,Pig 用于非结构化处理。我们什么时候需要原生 map reduce?您能否指出一些使用 Pig 或 Hive 无法解决但在原生 map reduce 中无法解决的场景?
具有大量嵌套 if .. else .. 结构的复杂分支逻辑在标准 MapReduce 中更容易和更快地实现,对于处理结构化数据,您可以使用Pangool,它还简化了诸如 JOIN 之类的事情。此外,标准 MapReduce 让您可以完全控制数据处理流程所需的 MapReduce 作业数量,从而转化为性能。但它需要更多时间来编码和引入更改。
Apache Pig 也适用于结构化数据,但它的优势在于能够处理 BAG 数据(按键分组的所有行),实现以下内容更简单:
Hive 更适合临时查询,但它的主要优点是它具有存储和分区数据的引擎。但它的表可以从 Pig 或 Standard MapReduce 中读取。
还有一件事,Hive 和 Pig 不太适合处理分层数据。
简短的回答 - 当我们需要对我们想要处理数据的方式进行非常深层次和细粒度的控制时,我们需要 MapReduce。有时,用 Pig 和 Hive 查询来准确表达我们需要的内容并不是很方便。
您可以通过 Pig 或 Hive 使用 MapReduce 做些什么,这不应该是完全不可能的。借助 Pig 和 Hive 提供的灵活性水平,您可以以某种方式设法实现您的目标,但可能并不那么顺利。您可以编写 UDF 或做一些事情并实现它。
这些工具的使用没有明显的区别。这完全取决于您的特定用例。根据您的数据和您需要的处理类型来决定哪种工具更适合您的需求。
编辑 :
前段时间我有一个用例,我必须收集地震数据并对其进行一些分析。保存这些数据的文件格式有些奇怪。部分数据采用EBCDIC编码,其余数据采用二进制格式。它基本上是一个平面二进制文件,没有像 \n 之类的分隔符。我很难找到使用 Pig 或 Hive 处理这些文件的方法。结果我不得不和MR安定下来。最初需要一些时间,但随着 MR 的速度非常快,一旦你准备好基本模板,它就会逐渐变得流畅。
所以,就像我之前说的,它基本上取决于你的用例。例如,在 Pig 中迭代数据集的每条记录真的很容易(只是一个 foreach),但是如果您需要foreach n怎么办?因此,当您需要对处理数据的方式进行“那种”级别的控制时,MR 更合适。
另一种情况可能是您的数据是分层的而不是基于行的,或者您的数据是高度非结构化的。
涉及作业链接和作业合并的元模式问题直接使用 MR 比使用 Pig/Hive 更容易解决。
与使用 Pig/hive 相比,有时使用某些 xyz 工具完成特定任务非常方便。恕我直言,MR 在这种情况下也表现得更好。例如,如果您需要对 BigData 进行一些统计分析,与 Hadoop 流一起使用的 R 可能是最好的选择。
高温高压
映射减少:
Strengths:
works both on structured and unstructured data.
good for writing complex business logic.
Weakness:
long development type
hard to achieve join functionality
蜂巢:
Strengths:
less development time.
suitable for adhoc analysis.
easy for joins
Weakness :
not easy for complex business logic.
deals only structured data.
猪
Strengths :
Structured and unstructured data.
joins are easily written.
Weakness:
new language to learn.
converted into mapreduce.
蜂巢
优点:
像数据库这样的 Sql 家伙喜欢它。对结构化数据的良好支持。目前支持数据库模式和视图类结构支持并发多用户、多会话场景。更大的社区支持。Hive , Hiver 服务器 , Hiver Server2 , Impala , Centry 已经
缺点:随着数据变得越来越大,性能下降,没有太多可做的,内存溢出问题。不能用它做太多。分层数据是一个挑战。非结构化数据需要类似 udf 的组件 在大数据等情况下,多种技术的组合可能是使用 UTDF 的噩梦动态部分
Pig:优点:基于脚本的出色数据流语言。
缺点:
非结构化数据需要类似 udf 的组件 没有大的社区支持
MapReudce:优点:不同意“难以实现连接功能”,如果您了解要实现哪种连接,您可以用几行代码实现。大多数情况下,MR 会产生更好的性能。MR 对分层数据的支持非常好,尤其是实现树状结构。更好地控制分区/索引数据。作业链。
缺点:需要非常了解api才能获得更好的性能等代码/调试/维护
Hadoop Map Reduce 优于 Hive 或 PIG 的场景
当您需要明确的驱动程序控制时
每当作业需要实现自定义分区器时
如果已经存在作业的 Java Mappers 或 Reducers 的预定义库
猪/蜂巢的优点:
看看这篇关于Pig Vs Hive比较的帖子。
这是一个很好的比较。它指定了所有用例场景。
我们可以使用 PIG 和 HIVE 做的所有事情都可以使用 MR 来实现(虽然有时会很耗时)。PIG 和 HIVE 在下面使用 MR/SPARK/TEZ。因此,MR 可以做的所有事情在 Hive 和 PIG 中可能会也可能不会。