并行计算
由于在fastran进行流固耦合的时候需要进行并行计算,在观看fastran的相应文档发现需要Cygwin来进行并行计算。但是该如何进行却不知道,在网络上对Cygwin并行计算的方式进行搜索,先对这方面进行学习,希望 之后能和fastran的设置结合起来。
参考文档:https://wenku.baidu.com/view/8c53c723dd36a32d737581eb.html?from=search
1. MapReduce计算模型
- MapReduce将复杂的运行于大规模集群上的并行计算过程高度的抽象到两个函数,Map和Reduce。
- 数据集要求:待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行的进行处理。
计算模型的Map和reduce函数由用户负责实现。功能是按照一定的映射规则将输入的 <Key, Value>
对转换成另一个或另一批<Key, Value>
对输出。
以一个计算文本文件中每个单词出现的次数的程序为例子。<k1,v1>
可以是<行在文件中的偏移位置,文件中的一行>,经Map函数映射后,形成一批中间结果<单词,出现次数>,而Reduce函数则可以对中间结果进行处理,将相同单词的出现次数进行累加,得到每个单词的总的出现次数。
2. 集群上的并行计算
2.1 数据分布存储
Hadoop中的分布式文件系统HDFS由一个管理节点(NameNode)和N个数据节点(DataNode)组成,每个节点均是一台计算机。同单机上的文件系统类似,但地层实现上是把文件切割成Block,然后这些Block分散地存储在不同地DataNode上,每个Block还可以复制数份存储于不同的DataNode上,达到容错的目的。NameNode是HDFS的核心,通过维护一些数据结构,记录每一个文件被切割成的Block数量,这些Block可以从哪些DataNode中获得,各个DataNode的状态等重要信息。
2.2 分布式并行计算
Hadoop中有一个作为主控的JobTrack,用于调度和管理其它的TaskTracker,JobTracker可以运行在集群中任一台计算机上。TaskTracke负责执行任务,必须运行在DataNode上,DataNode既是数据存储节点,也是计算节点。JobTracker将Map任务和Reduce任务分发给空闲的TaskTracke,让这些任务并行运行,并负责监控任务的运行情况。如果某一个 TaskTracker 出故障了,JobTracker 会将其负责的任务转交给另一个空闲的 TaskTracker 重新运行。
2.3 本地计算
数据存储在哪一台计算机,就由该计算机负责该部分数据的计算,可以减小数据在网络上的传输,将低对网路带宽的要求。
2.4 任务粒度
把原始数据切割成小数据集时,通常让小数据集小于或等于HDFS中一个Block的大小,缺省式64M,保证一个小数据集位于一台计算机上,便于本地计算。有M个小数据集就启动M个Map任务,这M个Map任务分布于N台计算机上并行运行,Reduce任务的数量R由用户指定。
2.5 Partition
把Map任务输出的中间结果按Key的范围划分为R份(R是预先定义的Reduce任务个数),划分时通常使用hash函数。
2.6 Combine
在partition之前还可以对中间结果先做combine,即将中间结果中有相同key的<key, value>
对合并成一对,。combine的过程和Reduce的过程类似,很多情况下就可以直接使用Reduce函数,但combine作为Map任务的一部分,在执行完Map函数后紧接着执行的。combine能够减少中间结果中<key, value>
对的数目,从而减少网络流量。
2.7 Reduce任务从Map任务节点中取中间结果
Map任务的中间结果在做完Combine和Partition之后,以文件形式存于本地磁盘。中间结果的位置会通知主控Jobtracker,JobTracker再通知Reduce任务到哪一个DataNode上去取中间结果。注意所有的Map任务产生中间结果均按其key用同一个hash函数划分为R份,R个Reduce任务各自负责一段key区间。每个reduce需要向许多个Map任务节点取得落在其负责的key区间内的中间结果,然后执行Reduce函数,形成一个最终的结果文件。
2.8 任务管道
有R个Reduce任务就会有R个最终结果,很多情况下这R个最终结果并不要合并,因为可能要作为另一个计算任务的输入。
3. 下一步
在了解hadoop的时候发现这并不是一下子就能啃下来的骨头,笔者接下来会继续学习关于hadoop的相关知识。