来自云龙湖轮廓分明的月亮 发表于 2024-6-14 21:46:03

云盘算与大数据课程笔记(六)之Apache Tez/Pig辅助笔记

Apache Tez

Apache Tez 是一个为 Hadoop 集群设计的通用数据处置惩罚框架,主要用于优化 MapReduce 盘算模子的执行效率。Tez 通过答应复杂的数据流图来表示数据处置惩罚使命,提高了在 YARN(Yet Another Resource Negotiator)上执行这些使命的机动性和效率。
   一句话:Tez用DAG表示数据处置惩罚使命,优化使命调度和资源管理过程
工作原理

   
[*] 数据流图:Tez 的焦点是将数据处置惩罚使命表示为一个有向无环图(DAG),其中图的节点(称为极点)代表数据处置惩罚逻辑(如读取、转换、聚合等操作),而图的边代表数据在极点之间的移动。这种表示方式比传统的 MapReduce 模子(仅限于两个阶段:Map 和 Reduce)提供了更大的机动性。
[*] 使命调度和执行:Tez DAG 描述了整个数据处置惩罚使命的布局,包括各个处置惩罚步骤及其依赖关系。当 DAG 提交给 Tez 运行时,Tez 调度器负责 DAG 的布局安排使命的执行次序,并且在 YARN 上为这些使命分配资源(CPU、内存)。Tez 运行时库负责详细的使命执行,包括数据的读取、处置惩罚和写入。
[*] 资源管理:Tez 与 YARN 紧麋集成,利用 YARN 进行资源管理。它可以根据使命的需求动态地请求释放资源,使得资源的使用更加高效。
[*] 优化执行:Tez 通过镌汰不必要的数据传输和磁盘I/O来优化使命执行。比方,它可以将多个逻辑步骤合并在一个物理使掷中执行,镌汰中心数据的写入和读取。
应用场景

Apache Tez 并不是默认固定集成到 Hadoop 的 JAR 包中的。Tez 是一个独立的项目,必要额外下载和安装。
   
[*] 交互式查询:Tez 特别适用于支持 Hive 和 Pig 等数据堆栈工具的交互式查询,可以显著镌汰查询的执行时间,提高用户的查询体验。
[*] 复杂的数据处置惩罚流程:对于必要执行多个数据处置惩罚步骤、并且这些步骤之间有复杂依赖关系的使命,Tez 通过其 DAG 模子可以或许更自然和高效地表示和执行这些使命。
[*] 批处置惩罚作业:Tez 也得当执行那些必要处置惩罚大量数据的批处置惩罚作业,特别是当这些作业包含多个处置惩罚阶段时,Tez 的优化可以带来显著的性能提拔。
Apache Tez 通过其 DAG 数据流图提供了一种比传统 MapReduce 更机动、更高效的方式来表示和执行复杂的数据处置惩罚使命。它与现有的 Hadoop 生态体系紧麋集成,特别得当用于优化交互式查询和复杂的数据处置惩罚流程。
在DAG方面,Tez和Spark有什么共同点和不同点?

Apache Tez 和 Apache Spark 都是大数据处置惩罚框架,它们在处置惩罚数据时都采用了有向无环图(DAG)的概念来表示使命的执行计划。尽管它们在设计和应用场景上有一些共同点,但也存在显著的差别。
共同点

   
[*] DAG 执行模子:Tez 和 Spark 都使用 DAG 来表示作业的执行计划,其中节点代表盘算使命,边代表数据的流向。这种模子相比传统的 MapReduce 提供了更大的机动性和更高的执行效率。
[*] 内存盘算:两者都重视在内存中处置惩罚数据以加快使命执行。通过镌汰对磁盘I/O的依赖,Tez 和 Spark 可以或许显著提高数据处置惩罚的速率。
[*] 适用于 Hadoop 生态体系:Tez 和 Spark 都可以与 Hadoop 生态体系中的其他组件(如 HDFS、YARN)集成,利用 Hadoop 生态体系提供的分布式存储和资源管理功能。
不同点

   
[*] 设计目标和偏重点:

[*]Tez 旨在为像 Hive 和 Pig 这样的现有 Hadoop 生态体系工具提供一个更机动和高效的执行引擎。
[*]Spark 是一个通用的大数据处置惩罚框架,它不但支持批处置惩罚和交互式查询,还支持流处置惩罚、机器学习和图盘算等多种大数据应用场景。

[*] 编程模子:

[*]Tez 更多地作为其他数据处置惩罚工具(如 Apache Hive)的底层执行引擎,开发者通常不直接使用 Tez API 编写应用步伐。
[*]Spark 提供了丰富的 API(如 RDD、DataFrame 和 Dataset)供开发者直接编程,支持使用 Scala、Java、Python 和 R 语言进行开发。

[*] 数据处置惩罚能力:

[*]Spark 以其强大的内存盘算能力而闻名,尤其擅长迭代盘算,这对于机器学习算法等应用尤其重要。
[*]Tez 虽然也支持内存盘算,但它更专注于优化基于 Hadoop 生态体系的批处置惩罚和交互式查询的性能。

[*] 流处置惩罚:

[*]Spark 提供了 Spark Streaming 来处置惩罚及时数据流。
[*]Tez 主要专注于批处置惩罚和交互式查询,而不是及时流处置惩罚。

Tez 和 Spark 在利用 DAG 执行模子方面有共同点,都旨在提高大数据处置惩罚使命的机动性和效率。不同之处在于它们的设计目标、编程模子和适用场景。Spark 提供了一个全面的大数据处置惩罚平台,适用于从批处置惩罚到及时处置惩罚的多种应用场景,而 Tez 更偏重于作为其他 Hadoop 生态体系组件的优化执行引擎。
现实上,Tez 和 Spark 可以在同一个 Hadoop 生态体系中并存,由于它们服务于不同的目的和优化场景。在实践中,一些构造会根据不同的工作负载和需求选择合适的工具。比方,对于与 Hive 或 Pig 密切集成的工作负载,大概会选择 Tez;而对于必要复杂数据处置惩罚管道、必要一个支持多种数据处置惩罚模式(包括批处置惩罚、流处置惩罚、机器学习等)的同一框架的场景,则大概方向于使用 Spark。
Apache Pig

Apache Pig 是一个开源平台,用于分析大规模数据集。它提供了一种高级脚本语言,称为 Pig Latin,旨在简化 Hadoop MapReduce 编程的复杂性。Pig 的设计初志是让拥有不同编程技能配景的人也能轻松处置惩罚和分析存储在 Hadoop 文件体系中的大量数据。
工作原理

   
[*] Pig Latin 脚本:用户编写 Pig Latin 脚原来执行数据分析使命。这些脚本包括一系列的数据转换操作,如加载数据、过滤、分组、聚合以及排序等。
[*] 执行情况:Pig 脚本可以在两种执行模式下运行:

[*]当地模式:在单机上运行,得当开发和测试。
[*]MapReduce 模式:在 Hadoop 集群上运行,Pig 将 Pig Latin 脚本转换为 MapReduce 使命进行执行。

[*] 数据流:Pig Latin 采用数据流的方式进行编程。数据从一步流向下一步,每一步都对数据进行某种形式的处置惩罚。这种方式使得脚本容易理解和编写,纵然是对复杂的数据处置惩罚流程也是如此。
焦点组件

   

[*]Pig Latin 语言:更倾向于描述数据流和转换操作。
[*]运行时情况:将 Pig Latin 脚本转换为一系列的 MapReduce 使命,并在 Hadoop 集群上执行这些使命。
Pig Latin 答应开发者通过一系列的转换步骤(如加载、过滤、分组、聚合等)来明白地描述数据从输入到最闭幕果的整个处置惩罚流程。Pig Latin 更倾向于过程式编程,提供了丰富的操作符来支持复杂的数据转换和嵌套数据布局的处置惩罚。 
Pig Latin示例

让我们通过一个简单的例子来展示怎样使用 Pig Latin 处置惩罚数据。假设我们有一个数据文件 student_data.txt,内里存储了学生的ID、姓名和成绩,格式如下:
001,John Doe,85
002,Jane Doe,90
003,Bob Smith,77
我们的目标是加载这个数据文件,筛选出成绩大于 80 的学生,并输出他们的ID和姓名。
-- 加载数据
students = LOAD 'student_data.txt' USING PigStorage(',') AS (id:chararray, name:chararray, score:int);

-- 筛选成绩大于 80 的学生
high_score_students = FILTER students BY score > 80;

-- 投影操作,只选择 id 和 name 字段
high_score_students_info = FOREACH high_score_students GENERATE id, name;

-- 输出结果
DUMP high_score_students_info;
这个例子中:

[*] LOAD 操作用于加载数据文件,PigStorage(',') 指定了字段分隔符为逗号,AS 关键字背面界说了每个字段的名称和类型。
[*] FILTER 操作用于筛选出成绩大于 80 分的学生。
[*] FOREACH ... GENERATE 布局用于对每个符合条件的记录执行操作,这里我们选择了 id 和 name 字段。
[*] DUMP 操作用于输出结果到屏幕。
这个简单的示例展示了 Pig Latin 在数据加载、筛选和转换方面的基本使用方法。通过这样的方式,Pig Latin 使得处置惩罚大规模数据集变得更为直接和机动。
应用场景

   

[*]数据处置惩罚管道:Pig 适用于构建复杂的数据处置惩罚管道,其中包括数据清洗、转换、摘要和分析。
[*]探索性数据分析:Pig 的机动性使其成为进行大规模数据集上探索性数据分析的有力工具。
[*]原型开发:Pig 得当于快速开发原型和脚本,以验证数据处置惩罚逻辑。
长处

   

[*]简化复杂性:Pig 通过提供高级抽象来简化 MapReduce 编程模子的复杂性。
[*]机动性:Pig Latin 语言提供的数据操作机动且强大,可以表达复杂的数据转换和分析逻辑。
[*]适用于不同技能配景的用户:数据分析师和工程师都可以使用 Pig 来处置惩罚和分析数据,而无需深入了解 MapReduce 的底层细节。
Apache Pig 为处置惩罚和分析 Hadoop 上存储的大规模数据集提供了一个高级平台和语言。通过使用 Pig Latin,用户可以轻松编写数据转换和查询脚本,将复杂的数据处置惩罚使命转换为一系列 MapReduce 作业。Pig 的设计旨在让更广泛的用户可以或许参与到大数据处置惩罚中来,无论他们的编程配景怎样。
Pig和Hive底层最大的区别是什么?应用场景最大的区别是什么?

Apache Pig 和 Apache Hive 都是建立在 Hadoop 生态体系之上的高层数据处置惩罚工具,它们都旨在简化 Hadoop 数据处置惩罚的复杂性。尽管它们的目标相似,但在底层实现和最适应的应用场景上存在一些关键区别。简而言之,Pig 提供了一个机动的数据流处置惩罚模子,而 Hive 提供了一个更接近传统 SQL 查询的模子。
底层实现的区别

   

[*] 查询语言:

[*]Hive:提供了一种类似 SQL 的查询语言,称为 HiveQL。这使得那些已经熟悉 SQL 的用户可以比较容易地编写查询语句,进行数据分析和陈诉。
[*]Pig:使用一种名为 Pig Latin 的脚本语言。Pig Latin 是一种过程式语言,更偏重于数据流和数据转换的步骤,提供了更大的机动性来表达数据操作和转换逻辑。

[*] 数据模子:

[*]Hive:采用传统的表格数据模子,更得当那些已经存在的、布局化的数据堆栈查询。
[*]Pig:更机动地处置惩罚非布局化或半布局化数据(并不意味着Pig 在直接剖析诸如 HTML 这类半布局化数据方面有内置上风,而是说它处置惩罚数据转换逻辑的方式对于处置惩罚这类数据的预处置惩罚和后续分析更为机动)。Pig Latin 答应开发者处置惩罚复杂的数据类型,如嵌套的记录、列表和地图。

应用场景的区别

   

[*] Hive:最初被设计用于简化在 Hadoop 上的数据堆栈操作,得当于那些必要进行复杂的数据提取、转换和加载(ETL)使命、数据摘要、数据分析和陈诉的场景。Hive 特别得当于那些对 SQL 已经很熟悉,必要在大规模数据集上执行类似于传统数据库查询的用户和使命。
[*] Pig:由于 Pig Latin 提供了更高的机动性,Pig 特别得当于数据管道的构建和复杂的数据处置惩罚流程,其中大概涉及到大量的数据转换和处置惩罚逻辑。Pig 更得当于数据科学家和研究人员,他们必要对数据进行探索性分析和处置惩罚复杂的数据集,包括那些布局不是事先界说好的数据。
虽然 Pig 和 Hive 都可以在 Hadoop 上处置惩罚大数据,但它们在表达数据处置惩罚使命的方式和优化的应用场景上有所不同。Hive 得当于必要执行 SQL 类型查询的数据分析使命,而 Pig 则更得当于必要编写复杂数据处置惩罚逻辑的场景。选择使用 Pig 还是 Hive,应根据详细的使命需求、团队的技能配景以及对特定数据处置惩罚风格的偏好来决定。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 云盘算与大数据课程笔记(六)之Apache Tez/Pig辅助笔记