DAG专题-1.Performance-effective and low-complexity task scheduling for heterogeneous computing

        写在开头:一方面研究在车联网中如何高效调度基于DAG的计算密集型(数据密集型)业务是我phd阶段的major,另一方面之前看完paper无论是做成ppt还是word文档在后续整理归纳的时候还是难以查阅,相反upload到网上以专题方式呈现就清晰明了许多,并且作为一个1年级的phd菜鸟,这样子的记录方式在帮我重新梳理逻辑的同时也可以记录自己不断成长的样子,也是一件很开心的事情,当然!如果茫茫人海中的你恰好也在research这个方向,恰好看到了我这篇文章,又恰好得到了一些帮助,那就更好了~————OK,废话不多说,开始今天的主题:

        这篇文章在ieee上已经高达1909次引用,只要你是做DAG方向的文章,那你必然躲不掉这篇经典中的经典,在下面的梳理中我就按照文章的逻辑进行自认为重点的强调,具体细节你可以自行去ieee上download查阅(自我感觉这篇文章应该是要100%吃透的,于玩DAG的人来说)。


        摘要中核心提出要在异质(i.e.,计算能力不同)的服务器中调度DAG,现存的算法要么只考虑在同质服务器上调度缺少泛化性,要么就是虽然考虑了异质服务器但算法复杂度相当高,作者提出了2个调度算法分别名为HEFT和CPOP,对应着不同的DAG任务优先级排序方式服务器选择方式(在算法那块再具体展开),仿真中分别考虑随机生成的DAG拓扑图真实世界问题产生的DAG拓扑图,不得不说该篇文章的仿真阶段非常牛逼,可所谓叹为观止,15页的篇幅用了7页跑仿真,我真的是会谢,仿真也在后续细说。


        引言中:略,没啥好强调的


        相关工作:由于调度DAG任务是NP-complete问题(跟NP-hard应该差不多?,i.e.,无法在多项式时间polynomial time里获得optimal solution),作者将调度算法分为2个种类,基于启发式的调度算法;引导的基于随机的搜索算法,对于启发式算法又可以细分为3个类型:①列表调度启发式(LSH);②成簇启发式(CH);③任务重复启发式(TDH):

        LSH:核心包括2个步骤,1是任务优先级排序:在每一个步骤选择优先级最高的任务来进行调度;2是服务器选择:面对选择出来的任务分配给一个“最好”(取决于你自己文章定义的效用函数)的服务器,作者提到这类算法普遍能提供不错的表现和较低的算法复杂度(所以其实作者的HEFT和CPOP也是属于LSH);

        CH:核心在于将DAG图中的不同任务映射到不同的簇中,如果不同的任务被映射到一个簇中那么他们就会在一个服务器上执行,其中有一个点要关注,作者提到此类算法可以映射所有的任务到一个簇中,不用关注映射的任务的父类任务是否已经调度完成,所以这或许会产生与DAG拓扑结构不符合的解(i guess),细节包括3个小步骤,1.簇融合步骤,为了让簇的数量小于等于服务器的数量;2.簇映射步骤,为不同的簇选择不同的服务器;3.在每个簇中对任务进行排序(maybe 2 late);

        TDH:核心在于redundantly schedule,即通过在同一个服务器上调度不同的任务减少服务期间的通信代价(这个思路运用在数据密集型业务上或许会有显著的效果,相反计算密集型业务可能更多是computing-resource-hungry),此类算法的区别在于如何选择重复计算的任务,however,这类算法的应用场景大多是无限个相同的服务器且拥有很高的计算复杂度;

        那么相较于基于启发式的调度算法,另一个算法就是我们耳熟能详的引导的基于随机的搜索算法(有多少人第一篇paper的benchmark是random,233),这类算法区别于完全瞎jb找的随机搜索算法,而是在每步利用之前步骤的先验知识来优化随机空间,譬如很多大名鼎鼎的遗传式算法(genetic algorithm),这类算法能跑出不错的解,但因为需要不断地迭代因此在找解的过程中需要花费大量的时间,同时需要很多附加的控制参数。

        在异质环境中启发式调度任务,这一块是和作者相似的场景,因此作者在这一块的关键是突出了这些算法相较于他没有考虑到的点

        DLS:同样也涉及给任务进行优先级定义,但不同在于优先级定义的式子不同,该算法对于计算代价取的是每个服务器上计算代价的中位数,并且没有考虑通信代价,复杂度高

        MH:这个算法和作者最大的差别在于没有考虑利用两个已经被调度的任务间的空闲时隙(这个地方需要着重强调下,作者提出的insertion-based就是这个意思,已经被调度的任务不是指已经完成计算的任务而是指在算法中已经被调度的2个任务)

        LMT:核心第是运用并行属性将可以并行运算的任务归到一个类别


        系统模型:这一块我不展开描述了,因为都是细节,就上一个DAG计算模型的核心吧~也就是recursively~

 


        提出算法:作者分别提出了HEFT和CPOP算法,这一块具体细节我也略掉了,一定要抓住玩DAG的本质其实就是去解决2个子问题:1. 如何定义不同任务的优先级;2. 如何选择服务器,这块重点说一下比较难理解的算法内容,也就是作者的novelty:

        HEFT: 直接上原文内容,如下图所示: 

怎么来理解呢?作者想表达的就是之前大多数算法在调度任务时,去算服务器p可以调度任务的最早完成时间是当p完成算法给它分配的最后一个任务的时间,但这就会有一个bug就是倘若有i,j两个任务被分配在服务器P上来计算并且他们之间隔着一段idle slot(大概率是因为任务j的完成要依赖于任务k,但任务k正在其他服务器P‘上计算),那么这段idel slot就会被浪费掉,作者却提出在满足DAG优先级约束的基础上,这个idel slot是可以利用起来调度的(这个idel slot大概率可以给任务j并行的任务且没有与任务j有连接关系),我自己画了一个示意图,供大家参考:

那么就我自己理解insertion-based想要利用的就是(t1-t2)的这段时间,可以用来调度任务4或者6(反正就是不能调度与任务5有连接的任务),那么相较于之前的算法,任务7就可能可以在t3开始调度了~那么makespan也就进一步降低了。文章是这样讲述如何使用这个技巧的(在算法就提了一嘴using the insertion-based scheduling policy,鬼知道怎么用): 

结合2张图来理解,简单来说就是:总体上按照EFT的原则来分配,当产生2个任务i,j调度在同1个服务器的时候,那么就可能会产生idel time slot,在后续调度任务k的时(这个任务k和任务j必定没有连接关系),就可以算一下任务k在这个服务器上的执行时间是否\leqidel time slot(同时还要确定任务k的ready_time是\leqt1的),如果满足那就丢进去。文章举例如下图所示:

 

 我严重怀疑n3与n6是基于insertion插入的P3和P2的两个任务,我也发现n3,n6的确是和n5,n9是没有连接关系的~

        CPOP:一个差别是给任务定义优先级的方式不一样(这个不细说,很简单,自己去看),另一个差别是服务器的选择不一样(展开说一下),这里着重提一下在这个算法里很关键的一个定义critical path(关键路径),文章给了很多解释我觉得最好理解的是:which is the path with the maximum number of tasks,你可以简单理解为这条路上的任务调度很复杂对整个makespan的影响是最大的,然后CPOP将CP上的task认为是critical task把他们全部扔到一个算力最强的服务器上去计算,这里可能有一个小confuse就是任务的执行顺序还是按照原来该有的拓扑结构来执行,但调度顺序上有可能存在优先级很低的critical task提前安排好了(需要强调任务的实际执行顺序和调度顺序并不严格相等!)。


仿真: 文章很多笔墨都用在这里,但都比较容易理解,这里也不再啰嗦了,有几个点可以强调下就是文章自己定义了好几个评判指标(average schedule length ratio, speedup, frequency of best results, and average running time),DAG的图呢来自于随机产生(有严格的参数配置)或是真实世界,最后文章还强行给HEFT和CPOP2个算法小小改进了下,不过也没啥不好理解的,也不再多说~


Fineeee,这篇文章学习笔记到此结束,如果有说的不对的地方欢迎指正交流~

edit by 八毛

2022/3/10

20:50

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: Apache Hive是一个开源的数据仓库基础设施,可以通过使用SQL来查询和分析大规模的数据集。apache-hive-2.1.1-bin.tar.gz是Hive的2.1.1版本的二进制安装包。这个安装包包含了Hive运行所需的所有文件。 在安装Hive之前,我们需要确保已经安装了Java Development Kit (JDK),因为Hive是在Java环境下运行的。然后,我们可以通过以下步骤来安装apache-hive-2.1.1-bin.tar.gz: 1. 首先,我们需要下载apache-hive-2.1.1-bin.tar.gz文件。我们可以从Apache Hive官方网站下载这个文件。 2. 下载完成后,我们需要将下载的文件解压缩。可以使用以下命令进行解压缩:tar -zxvf apache-hive-2.1.1-bin.tar.gz 3. 解压缩完成后,我们需要配置Hive的环境变量。我们可以打开.bashrc或.bash_profile文件,并添加以下配置行: export HIVE_HOME=/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 请将上述配置行中的"/path/to/hive"替换为您解压缩Hive的路径。 4. 保存文件,然后加载这些配置。我们可以使用以下命令加载.bashrc文件:source ~/.bashrc 5. 现在,我们可以启动Hive了。使用以下命令启动:hive 这将启动Hive的命令行界面,我们可以在其中执行Hive的SQL查询和操作。 这就是安装apache-hive-2.1.1-bin.tar.gz的基本步骤。安装完成后,您可以开始使用Hive来查询和分析大规模的数据集。希望这个回答能对您有帮助! ### 回答2: Apache Hive是一个基于Hadoop的数据仓库解决方案,它可以提供结构化查询语言(SQL),以便从大规模分布式数据集中检索和分析数据。hive-2.1.1-bin.tar.gz是Hive的一个版本,其中的bin表示该文件包含了Hive的可执行脚本和二进制文件。 在解压和安装这个tar.gz文件之后,我们可以通过运行Hive的命令行界面来开始使用Hive。Hive提供了类似于SQL的查询语言,称为HiveQL,它允许用户使用SQL语句来查询和分析存储在Hadoop集群上的数据。 Hive可以处理各种类型的数据,包括结构化数据、半结构化数据和非结构化数据。它允许用户定义表结构,将数据导入表中,并执行类SQL查询来处理这些表。Hive使用Hadoop的MapReduce框架来执行查询,因此具有良好的可扩展性和容错性。 除了基本的查询功能外,Hive还支持用户自定义函数(UDFs),以便根据特定需求编写自定义的函数,并将其应用于查询中。此外,Hive还支持分区和分桶的概念,以改进查询性能。 通过使用Hive,用户可以利用Hadoop集群的强大计算能力和存储能力来处理大规模数据集。它提供了一种简化和抽象化的方式来处理和查询大数据,对于那些熟悉SQL语法的用户来说,学习和使用Hive相对容易。 总之,apache-hive-2.1.1-bin.tar.gz是Apache Hive的一个版本,它提供了一个基于Hadoop的数据仓库解决方案,可以通过HiveQL语言来查询和分析大规模分布式数据集。 ### 回答3: apache-hive-2.1.1-bin.tar.gz 是Apache Hive项目的二进制压缩文件。Apache Hive是一个基于Hadoop的数据仓库基础架构工具,用于提供数据的存储、查询和分析。通过Hive,用户可以使用类SQL语言在Hadoop集群中执行数据查询,并将查询结果转换为MapReduce任务进行处理。 Apache Hive提供了一个类似于关系型数据库的查询语言,称为HiveQL,它使用了SQL语法来查询和操作存储在Hadoop HDFS或Hive表中的数据。Hive将HiveQL查询转换为MapReduce任务或Tez DAG(有向无环图)任务,让用户可以轻松地利用Hadoop集群的并行处理能力进行大规模数据处理。 通过Apache Hive,用户可以在不需要掌握复杂的MapReduce编程技术的情况下,利用简单的SQL语法进行数据分析和挖掘。用户可以创建Hive表,将数据加载到表中,并使用HiveQL进行查询和处理。此外,Hive还提供了用户定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义转换函数(UDTF)的能力,让用户可以按照自己的需求扩展和定制Hive的功能。 apache-hive-2.1.1-bin.tar.gz是Hive 2.1.1版本的二进制分发文件。用户可以下载并解压此文件,即可在本地环境中部署和运行Apache Hive。Hive还有其他版本和分发文件可供选择,用户可以根据自己的需求选择适合的版本进行使用。对于想要在Hadoop集群中快速搭建和使用数据仓库工具的用户,Apache Hive提供了一个强大而灵活的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值