跳转到主要内容
公司博客上

壳牌石油用例:并行大型模拟与Apache SparkR砖

分享这篇文章

这篇博客是壳之间的联合工程工作的数据科学团队(韦恩·w·琼斯丹尼斯Vallinga)和砖(侯赛因Falaki)。

介绍

Apache 2.0火花引入了一个新家庭的apiSparkRApache火花R接口,让用户现有R函数并行化。新有斑纹的,新闻出版总署spark.lapply方法为R用户开放的令人兴奋的可能性。在这篇文章中,我们提出一个用例细节共同完成的壳牌石油公司

用例:长袜的建议

在壳牌,当前的袜子实践通常是由供应商推荐的组合,之前的操作经验和“直觉。”因此,有限的重点是指向包含历史数据在这些决策,这有时会导致过度或不足的股票被关押在壳牌的位置(例如,一个石油钻井平台)。

原型工具,库存优化分析解决方案,证明,壳可以使用先进的数据分析技术在SAP库存数据:

  • 优化仓库库存水平
  • 预测安全库存水平
  • 合理化缓慢移动的材料
  • 审查和重新分配非现成和股票项目材料清单
  • 确定材料的临界(例如,通过材料清单链接,过去使用或交货时间)

计算推荐的贮存材料库存水平要求,数据科学团队实现了一个马尔可夫链蒙特卡罗(密度)引导统计模型在r模型应用于每一个材料(通常是3000 +)发布在50 +壳位置。每个材料模型涉及到模拟10000年获得迭代来捕获的历史分布问题。累计计算的任务是大,但幸运的是,是一个高度平行的性质,因为独立模型可以应用到每个材料。

现有的设置

完整的模型是目前执行48核,192 gb的RAM独立物理离线电脑。获得引导模型是一组自定义构建的函数使用一个第三方R包的数量(“fExtremes”、“ismev”、“dplyr”、“tidyr”,“stringr”)

脚本遍历每个壳位置和分布的历史材料分成大致相等大小的组在48芯材料。每个核心然后迭代模型适用于每一个个人材料。我们分组每个材料的材料,因为一个简单的循环会产生太多的开销(例如开始R过程等)因为每个计算需要2 - 5秒。材料的分配小组工作在内核实现通过R平行包。当最后一个个体的48个核心工作完成,脚本将继续到下一个位置和重复的过程。脚本需要的总时间大约48小时来计算所有壳牌的推荐库存水平位置。

使用Apache火花砖

而不是依靠一个大机与许多核心,壳牌决定使用集群计算规模。新的R API在Apache火花是一个适合这个用例。两个版本的开发工作负载SparkR的原型来验证可伸缩性和性能。

样机我:一个概念证明

第一个原型,我们试图减少代码的数量变化的目标是快速验证新的SparkR API可以处理工作负载。我们有限的变化模拟步骤如下:

为每个壳位置列表元素:

  1. 作为一个火花DataFrame并行化输入日期
  2. 使用SparkR:新闻出版总署()执行并行仿真的每个块。

有限的改变现有的仿真代码库,我们可以减少仿真总时间3.97小时50个节点火花集群砖。

原型II:改善性能

第一个原型很快实现,它遭受了一个明显的性能瓶颈:火花工作启动的每个迭代模拟。数据是高度倾斜的结果,在每个工作大多数执行人空闲等待straglers完成之前从下一份工作可以承担更多的工作。进一步,在每个工作的开始,我们花时间并行的数据作为一个火花DataFrame虽然大多数CPU核的集群处于空闲状态。

解决这些问题,我们修改了预处理步骤输入和辅助生产前期所有位置和材料日期值。输入数据是作为大型火花DataFrame并行。接下来,我们使用一个单一的SparkR:新闻出版总署()电话两个键:位置ID和材料ID执行模拟

与这些简单的改进,我们可以减少仿真时间45分钟50节点火花集群数据砖。

改进SparkR

SparkR是最新添加Apache火花,和应用API的家人当时最新的SparkR之外的工作。通过这个实验,我们发现了一个SparkR的局限性和缺陷数量和固定在Apache火花。

接下来是什么?

如果你是一个SparkR开发商和你想探索SparkR,得到一个账户今天的砖并通过我们的阅读SparkR文档

免费试着砖
看到所有公司博客上的帖子