2021SC@SDUSC
目录
概述
本次分析pig作为hadoop的轻量级脚本语言操作hadoop的executionengine包下的mapReduceLayer类的代码
ColumnChainInfo类
insert方法
为项目星标或项目尾部插入新的列信息
public void insert(int startCol, byte type)
{
ColumnInfo newColumnInfo = new ColumnInfo(startCol, type);
columnInfos.add(newColumnInfo);
}
insertInReduce方法
此方法被用来将项目插入reduce过程中
public void insertInReduce(POProject project)
{
if (size()==0)
{
int col;
if(project.isProjectToEnd() || project.getColumns().size() != 1){
col = -1;
return;
}else{
col = project.getColumns().get(0) - 1;
}
List<Integer> newColumns = new ArrayList<Integer>();
newColumns.add(col);
ColumnInfo newColumnInfo = new ColumnInfo(newColumns, project.getResultType());
columnInfos.add(newColumnInfo);
}
else if (project.isProjectToEnd()){
insert(project.getStartCol(), project.getResultType());
}
else {
insert(project.getColumns(), project.getResultType());
}
}
在 reduce 过程中,input#1 表示第一个输入,将使用0 替代1,以便我们可以匹配从 POLocalRearrange 收集的排序信息
其中
if(project.isProjectToEnd() || project.getColumns().size() != 1){
col = -1;
return;
}
我们希望的是第一个项目变成整个集群包的一部分,因此出现在这个地方是不合理 的。于是我们将这一列设置为-1,以便它在二次排序优化中不会被用到。