猪将如何产生DAG的工作

You*_*bit 0 hadoop apache-pig hdfs directed-acyclic-graphs

我正在使用PIG处理数百万条记录的订阅源.从HDFS读取源后,我需要执行三个不同的"分组依据"操作,然后将所有这些的结果合并.让我们说无论关系联盟的架构如何运作良好.现在我的问题是PIG如何生成执行的DAG,并且所有这三个按操作分组将并行执行.

Lor*_*dig 6

猪的加工步骤如下:

  1. 脚本解析
    • 检查语法以及引用的变量是否有效
    • 类型检查
    • 模式推断
    • 检查自定义类(UDF)(instantiation..etc)

输出:规范逻辑计划,它是猪拉丁语句和逻辑运算符之间的一对一映射,以DAG的形式排列.

  1. 逻辑优化器
    • 逻辑计划通过逻辑优化器传递(例如:执行投影下推)

  2. 实际计划
    • 优化的逻辑计划将转换为物理计划.(每个逻辑运算符都有相应的物理等价)

  3. MapReduce计划及其优化
    • 每个物理运算符都将分配给MapReduce阶段(Map任务或Reduce任务).
    • 在创建MR计划之后,基于操作的性质执行进一步的优化.目标:尽量减少减少阶段的数量

您可以使用EXPLAIN检查为您生成的PIG脚本计划

对于您的第二个问题:
按操作组强制执行缩减阶段,您可以为其定义并行度级别.默认情况下,如果未指定并行度,则通过以下公式计算reducer的数量:

min(maxReducersNumber, reducers)
Run Code Online (Sandbox Code Playgroud)

其中:
- maxReducersNumber可以通过属性pig.exec.reducers.max设置(默认为999)
- reducers =(totalInputFileSize/bytesPerReducer)
- bytesPerReducer可以通过属性pig.exec.reducers.bytes.per.reducer设置(默认值) :1GB)即:对于每1GB的输入数据,Pig将分配一个新的reducer

有关并行的更多信息,请参见:
- 如何使用并行功能
- 选择正确的并行级别
- reducer估算器的源代码