1.一种考虑任务相关性的Hive优化方法,其特征在于,所述方法包括:
将HQL语句转化为MapReduce物理计划,并获取所述MapReduce物理计划中各MapReduce Job在shuffle阶段用于排序的键shuffle key;
根据相关性规则,合并所述各MapReduce Job中相关MapReduce Job。
2.如权利要求1所述的方法,其特征在于,所述相关性规则包括:
规则a.若n个MapReduce Job间不包含父子关系且shuffle key相同,则所述n个MapReduce Job互为相关MapReduce Job,并对所述规则a确定的相关MapReduce Job进行合并,其中,n为正整数且n小于所述MapReduce物理计划中MapReduce Job的总个数;
规则b.若父MapReduce Job与其所有子MapReduce Job的shuffle key相同,则所述父MapReduce Job与其所有子MapReduce Job互为相关MapReduce Job,并对所述规则b确定的相关MapReduce Job进行合并;
规则c.若父MapReduce Job与其所有子MapReduce Job中的一个子MapReduce Job的shuffle key相同,则所述父MapReduce Job与其所有子MapReduce Job中的一个子MapReduce Job互为相关MapReduce Job,并对所述规则c确定的相关MapReduce Job进行合并。
3.如权利要求2所述的方法,其特征在于,所述对所述规则a确定的相关MapReduce Job进行合并包括:
所述n个MapReduce Job读磁盘时读取所述n个MapReduce Job对应的map函数的处理数据并将所述n个MapReduce Job对应的map函数输出数据
的n个shuffle key分别与n个标记{tag1,tag2...tagi...tagn}进行合并,获取合并结果
其中,
为第i个MapReduce Job对应的map函数的处理数据,
为第i个MapReduce Job对应的map函数的处理数据的排序键,
为第i个MapReduce Job对应的map函数的处理数据的排序键的属性值,
为第i个MapReduce Job对应的map函数输出数据,
为第i个MapReduce Job对应的shuffle key且
列相同,
第i个MapReduce Job对应的shuffle key的属性值,tagi与
为唯一对应关系,用于标记shuffle key与MapReduce Job的对应关系;
将所述合并结果放入shuffle过程,通过shuffle key对应的标记确定数据来源,将第i个标记tagi对应的
发送至所述第i个MapReduce Job的reduce函数。
4.如权利要求2所述的方法,其特征在于,所述对所述规则b确定的相关MapReduce Job进行合并包括:
所述父MapReduce Job的所有子MapReduce Job互为所述规则a定义的相关MapReduce Job,则将所述父MapReduce Job的所有子MapReduce Job按所述对所述规则a确定的相关MapReduce Job进行合并的合并方式进行合并;
将所述父MapReduce Job的所有子MapReduce Job对应的reduce函数处理结果直接发送至所述父MapReduce Job的map函数,且所述父MapReduce Job的map函数直接将所述父MapReduce Job的map函数的输出结果发送至所述父MapReduce Job的reduce函数。
5.如权利要求2所述的方法,其特征在于,所述对所述规则c确定的相关MapReduce Job进行合并包括:
所述父MapReduce Job读磁盘时读取与其不相关的子MapReduce Job的存盘结果和与其相关的子MapReduce Job对应的map函数的处理数据;
将所述与其相关的子MapReduce Job对应的map函数的处理数据发送至所述与其相关的子MapReduce Job对应的map函数并获取所述与其相关的子MapReduce Job对应的map函数的输出结果,将该输出结果放入shuffle过程,再发送至所述与其相关的子MapReduce Job对应的reduce函数,将所述与其相关的子MapReduce Job对应的reduce函数的输出结果直接发送至所述父MapReduce Job对应的map函数,并直接将所述父MapReduce Job对应的map函数的输出结果发送至所述父MapReduce Job对应的reduce函数;
将所述与其不相关的子MapReduce Job的存盘结果发送至所述父MapReduce Job对应的map函数并获取所述父MapReduce Job对应的map函数的输出结果,将该输出结果放入shuffle过程,再发送至所述父MapReduce Job对应的reduce函数。
6.一种考虑任务相关性的Hive优化系统,其特征在于,所述系统包括:相互连接的HQL解释器和查询优化器,其中,所述HQL解释器,用于将HQL语句转化为MapReduce物理计划,并获取所述MapReduce物理计划中各MapReduce Job在shuffle阶段用于排序的键shuffle key,所述查询优化器,用于接收所述MapReduce物理计划并根据相关性规则,合并所述MapReduce物理计划中各MapReduce Job中相关MapReduce Job。
7.如权利要求6所述的系统,其特征在于,所述相关性规则包括:
规则a.若n个MapReduce Job间不包含父子关系且shuffle key相同,则所述n个MapReduce Job互为相关MapReduce Job,并对所述规则a确定的相关MapReduce Job进行合并,其中,n为正整数且n小于所述MapReduce物理计划中MapReduce Job的总个数;
规则b.若父MapReduce Job与其所有子MapReduce Job的shuffle key相同,则所述父MapReduce Job与其所有子MapReduce Job互为相关MapReduce Job,并对所述规则b确定的相关MapReduce Job进行合并;
规则c.若父MapReduce Job与其所有子MapReduce Job中的一个子MapReduce Job的shuffle key相同,则所述父MapReduce Job与其所有子MapReduce Job中的一个子MapReduce Job互为相关MapReduce Job,并对所述规则c确定的相关MapReduce Job进行合并。
8.如权利要求7所述的系统,其特征在于,所述对所述规则a确定的相关MapReduce Job进行合并包括:
所述n个MapReduce Job读磁盘时读取所述n个MapReduce Job对应的map函数的处理数据并将所述n个MapReduce Job对应的map函数输出数据
的n个shuffle key分别与n个标记{tag1,tag2...tagi...tagn}进行合并,获取合并结果
其中,
为第i个MapReduce Job对应的map函数的处理数据,
为第i个MapReduce Job对应的map函数的处理数据的排序键,
为第i个MapReduce Job对应的map函数的处理数据的排序键的属性值,
为第i个MapReduce Job对应的map函数输出数据,
为第i个MapReduce Job对应的shuffle key且
列相同,
第i个MapReduce Job对应的shuffle key的属性值,tagi与
为唯一对应关系,用于标记shuffle key与MapReduce Job的对应关系;
将所述合并结果放入shuffle过程,通过shufflekey对应的标记确定数据来源,将第i个标记tagi对应的
发送至所述第i个MapReduce Job的reduce函数。
9.如权利要求7所述的系统,其特征在于,所述对所述规则b确定的相关MapReduce Job进行合并包括:
所述父MapReduce Job的所有子MapReduce Job互为所述规则a定义的相关MapReduce Job,则将所述父MapReduce Job的所有子MapReduce Job按所述对所述规则a确定的相关MapReduce Job进行合并的合并方式进行合并;
将所述父MapReduce Job的所有子MapReduce Job对应的reduce函数处理结果直接发送至所述父MapReduce Job的map函数,且所述父MapReduce Job的map函数直接将所述父MapReduce Job的map函数的输出结果发送至所述父MapReduce Job的reduce函数。
10.如权利要求7所述的系统,其特征在于,所述对所述规则c确定的相关MapReduce Job进行合并包括:
所述父MapReduce Job读磁盘时读取与其不相关的子MapReduce Job的存盘结果和与其相关的子MapReduce Job对应的map函数的处理数据;
将所述与其相关的子MapReduce Job对应的map函数的处理数据发送至所述与其相关的子MapReduce Job对应的map函数并获取所述与其相关的子MapReduce Job对应的map函数的输出结果,将该输出结果放入shuffle过程,再发送至所述与其相关的子MapReduce Job对应的reduce函数,将所述与其相关的子MapReduce Job对应的reduce函数的输出结果直接发送至所述父MapReduce Job对应的map函数,并直接将所述父MapReduce Job对应的map函数的输出结果发送至所述父MapReduce Job对应的reduce函数;
将所述与其不相关的子MapReduce Job的存盘结果发送至所述父MapReduce Job对应的map函数并获取所述父MapReduce Job对应的map函数的输出结果,将该输出结果放入shuffle过程,再发送至所述父MapReduce Job对应的reduce函数。