首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过动态资源分配运行spark + cassandra + mesos (dcos)?

如何通过动态资源分配运行spark + cassandra + mesos (dcos)?
EN

Stack Overflow用户
提问于 2016-12-08 23:11:11
回答 2查看 767关注 0票数 1

在通过马拉松的每个从节点上,我们运行Mesos外部Shu浮服务。当我们在粗粒度模式下通过dcos CLI提交spark作业时,没有动态分配,一切都按预期工作。但是,当我们提交相同的任务时,动态分配会失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
16/12/08 19:20:42 ERROR OneForOneBlockFetcher: Failed while starting block fetches
java.lang.RuntimeException: java.lang.RuntimeException: Failed to open file:/tmp/blockmgr-d4df5df4-24c9-41a3-9f26-4c1aba096814/30/shuffle_0_0_0.index
at   org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.getSortBasedShuffleBlockData(ExternalShuffleBlockResolver.java:234)
...
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
...
Caused by: java.io.FileNotFoundException: /tmp/blockmgr-d4df5df4-24c9-41a3-9f26-4c1aba096814/30/shuffle_0_0_0.index (No such file or directory)

详细说明:

  • 我们使用Azure安装了带有马拉松的Mesos (DCOS)。
  • 通过我们安装的宇宙软件包:卡桑德拉,火花和马拉松-lb。
  • 我们在卡桑德拉生成了测试数据。
  • 我在笔记本电脑上安装了dcos CLI

当我按下面的方式提交工作时,一切都如预期的那样工作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dcos spark run --submit-args="--properties-file coarse-grained.conf --class portal.spark.cassandra.app.ProductModelPerNrOfAlerts http://marathon-lb-default.marathon.mesos:10018/jars/spark-cassandra-assembly-1.0.jar"
Run job succeeded. Submission id: driver-20161208185927-0043

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cqlsh:sp> select count(*) from product_model_per_alerts_by_date ;

count
-------
476

coarse-grained.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spark.cassandra.connection.host 10.32.0.17
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.executor.cores 1
spark.executor.memory 1g
spark.executor.instances 2
spark.submit.deployMode cluster
spark.cores.max 4

portal.spark.cassandra.app.ProductModelPerNrOfAlerts:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package portal.spark.cassandra.app

import org.apache.spark.sql.{SQLContext, SaveMode}
import org.apache.spark.{SparkConf, SparkContext}

object ProductModelPerNrOfAlerts {
  def main(args: Array[String]): Unit = {

     val conf = new SparkConf(true)
                    .setAppName("cassandraSpark-ProductModelPerNrOfAlerts")

     val sc = new SparkContext(conf)

     val sqlContext = new SQLContext(sc)

     import sqlContext.implicits._

     val df = sqlContext
             .read
             .format("org.apache.spark.sql.cassandra")
             .options(Map("table" -> "asset_history", "keyspace" -> "sp"))
            .load()
            .select("datestamp","product_model","nr_of_alerts")

     val dr = df
           .groupBy("datestamp","product_model")
           .avg("nr_of_alerts")
           .toDF("datestamp","product_model","nr_of_alerts")

     dr.write
          .mode(SaveMode.Overwrite)
          .format("org.apache.spark.sql.cassandra")
          .options(Map("table" -> "product_model_per_alerts_by_date", "keyspace" -> "sp"))
          .save()


     sc.stop()
 }
}

动态分配

通过马拉松,我们运行Mesos外部洗牌服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "id": "spark-mesos-external-shuffle-service-tt",
  "container": {
     "type": "DOCKER",
     "docker": {
        "image": "jpavt/mesos-spark-hadoop:mesos-external-shuffle-service-1.0.4-2.0.1",
        "network": "BRIDGE",
        "portMappings": [
           { "hostPort": 7337, "containerPort": 7337, "servicePort": 7337 }
         ],
       "forcePullImage":true,
       "volumes": [
         {
           "containerPath": "/tmp",
           "hostPath": "/tmp",
           "mode": "RW"
         }
       ]
     }
   },
   "instances": 9,
   "cpus": 0.2,
   "mem": 512,
   "constraints": [["hostname", "UNIQUE"]]
 }

用于jpavt/mesos-spark-hadoop:mesos-external-shuffle-service-1.0.4-2.0.1:的文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM mesosphere/spark:1.0.4-2.0.1
WORKDIR /opt/spark/dist
ENTRYPOINT ["./bin/spark-class", "org.apache.spark.deploy.mesos.MesosExternalShuffleService"]

现在,当我提交带有动态分配的作业时,它会失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dcos spark run --submit-args="--properties-file dynamic-allocation.conf --class portal.spark.cassandra.app.ProductModelPerNrOfAlerts http://marathon-lb-default.marathon.mesos:10018/jars/spark-cassandra-assembly-1.0.jar"
 Run job succeeded. Submission id: driver-20161208191958-0047

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(*) from product_model_per_alerts_by_date ;

count
-------
 5

dynamic-allocation.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spark.cassandra.connection.host 10.32.0.17
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.executor.cores 1
spark.executor.memory 1g
spark.submit.deployMode cluster
spark.cores.max 4

spark.shuffle.service.enabled true
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.minExecutors 2
spark.dynamicAllocation.maxExecutors 5
spark.dynamicAllocation.cachedExecutorIdleTimeout 120s
spark.dynamicAllocation.schedulerBacklogTimeout 10s
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 20s
spark.mesos.executor.docker.volumes /tmp:/tmp:rw
spark.local.dir /tmp

来自mesos的日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
16/12/08 19:20:42 INFO MemoryStore: Block broadcast_7_piece0 stored as bytes in memory (estimated size 18.0 KB, free 366.0 MB)
16/12/08 19:20:42 INFO TorrentBroadcast: Reading broadcast variable 7 took 21 ms
16/12/08 19:20:42 INFO MemoryStore: Block broadcast_7 stored as values in memory (estimated size 38.6 KB, free 366.0 MB)
16/12/08 19:20:42 INFO MapOutputTrackerWorker: Don't have map outputs for shuffle 0, fetching them
16/12/08 19:20:42 INFO MapOutputTrackerWorker: Doing the fetch; tracker endpoint = NettyRpcEndpointRef(spark://MapOutputTracker@10.32.0.4:45422)
16/12/08 19:20:42 INFO MapOutputTrackerWorker: Got the output locations
16/12/08 19:20:42 INFO ShuffleBlockFetcherIterator: Getting 4 non-empty blocks out of 58 blocks
16/12/08 19:20:42 INFO TransportClientFactory: Successfully created connection to /10.32.0.11:7337 after 2 ms (0 ms spent in bootstraps)
16/12/08 19:20:42 INFO ShuffleBlockFetcherIterator: Started 1 remote fetches in 13 ms
16/12/08 19:20:42 ERROR OneForOneBlockFetcher: Failed while starting block fetches java.lang.RuntimeException: java.lang.RuntimeException: Failed to open file: /tmp/blockmgr-d4df5df4-24c9-41a3-9f26-4c1aba096814/30/shuffle_0_0_0.index
at   org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.getSortBasedShuffleBlockData(ExternalShuffleBlockResolver.java:234)
...
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
...
 Caused by: java.io.FileNotFoundException: /tmp/blockmgr-d4df5df4-24c9-41a3-9f26-4c1aba096814/30/shuffle_0_0_0.index (No such file or directory)

来自马拉松spark-mesos-external-shuffle-service-tt:日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
16/12/08 19:20:29 INFO MesosExternalShuffleBlockHandler: Received registration request from app 704aec43-1aa3-4971-bb98-e892beeb2c45-0008-driver-20161208191958-0047 (remote address /10.32.0.4:49710, heartbeat timeout 120000 ms).
16/12/08 19:20:31 INFO ExternalShuffleBlockResolver: Registered executor AppExecId{appId=704aec43-1aa3-4971-bb98-e892beeb2c45-0008-driver-20161208191958-0047, execId=2} with ExecutorShuffleInfo{localDirs=[/tmp/blockmgr-14525ef0-22e9-49fb-8e81-dc84e5fba8b2], subDirsPerLocalDir=64, shuffleManager=org.apache.spark.shuffle.sort.SortShuffleManager}
16/12/08 19:20:38 ERROR TransportRequestHandler: Error while invoking RpcHandler#receive() on RPC id 8157825166903585542
java.lang.RuntimeException: Failed to open file: /tmp/blockmgr-14525ef0-22e9-49fb-8e81-dc84e5fba8b2/16/shuffle_0_55_0.index
at org.apache.spark.network.shuffle.ExternalShuffleBlockResolver.getSortBasedShuffleBlockData(ExternalShuffleBlockResolver.java:234)
...
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
Caused by: java.io.FileNotFoundException: /tmp/blockmgr-14525ef0-22e9-49fb-8e81-dc84e5fba8b2/16/shuffle_0_55_0.index (No such file or directory)
...

但是文件存在于给定的从框上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ls -l /tmp/blockmgr-14525ef0-22e9-49fb-8e81-dc84e5fba8b2/16/shuffle_0_55_0.index
-rw-r--r-- 1 root root 1608 Dec  8 19:20 /tmp/blockmgr-14525ef0-22e9-49fb-8e81-dc84e5fba8b2/16/shuffle_0_55_0.index


 stat shuffle_0_55_0.index 
  File: 'shuffle_0_55_0.index'
  Size: 1608        Blocks: 8          IO Block: 4096   regular file
  Device: 801h/2049d    Inode: 1805493     Links: 1
  Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  Access: 2016-12-08 19:20:38.163188836 +0000
  Modify: 2016-12-08 19:20:38.163188836 +0000
  Change: 2016-12-08 19:20:38.163188836 +0000
  Birth: -
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-12 06:06:44

在马拉松式外部洗牌服务配置中出现错误,而不是路径container.docker.volumes,我们应该使用container.volumes路径。

正确配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "id": "mesos-external-shuffle-service-simple",
  "container": {
     "type": "DOCKER",
     "docker": {
        "image": "jpavt/mesos-spark-hadoop:mesos-external-shuffle-service-1.0.4-2.0.1",
        "network": "BRIDGE",
        "portMappings": [
           { "hostPort": 7337, "containerPort": 7337, "servicePort": 7337 }
         ],
       "forcePullImage":true
     },
    "volumes": [
         {
           "containerPath": "/tmp",
           "hostPath": "/tmp",
           "mode": "RW"
         }
    ]
   },
   "instances": 9,
   "cpus": 0.2,
   "mem": 512,
   "constraints": [["hostname", "UNIQUE"]]
 }
票数 0
EN

Stack Overflow用户

发布于 2016-12-09 19:47:40

我不熟悉DCOS,马拉松和Azure,我使用动态资源分配( Mesos外部洗牌服务)在Mesos和Aurora与Docker。

  • 每个Mesos代理节点都有自己的外部洗牌服务(即一个mesos代理的一个外部洗牌服务)?
  • spark.local.dir设置是完全相同的字符串和指向相同的目录?不过,您的洗牌spark.local.dir服务是/tmp,我不知道DCOS设置。
  • spark.local.dir目录对两者都可以读/写吗?如果码头启动了mesos代理和外部洗牌服务,则必须将主机上的spark.local.dir安装到两个容器上。

编辑

  • 如果设置了SPARK_LOCAL_DIRS (mesos或独立的)环境变量,spark.local.dir将被重写。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41054952

复制
相关文章
Spark on Kubernetes 动态资源分配
本文主要讲述了 Spark on Kubernetes 的发展过程和 Dynamic Resource Allocatoin(DRA) 这个重要特性,以及与之相关的 External Shuffle Service(ESS)。
runzhliu
2020/08/06
2.4K0
Spark on Kubernetes 动态资源分配
Uber是如何通过Mesos和Cassandra实现跨多个数据中心每秒100万的写入速度的?
每隔三十秒就会有位置数据返回,包括来自于司机和乘客应用的各类数据,需要实时使用的实时数据非常之多,那么Uber是如何存储这些位置数据的呢? Uber的解决方案非常全面:他们在Mesos顶层构建了自己的系统,运行Cassandra。Uber的软件工程师Abhishek Verma有一个演讲,题为《Uber跨多个数据中心运行在Mesos上的Cassandra》(阅读原文查看PPT),便对这个解决方案做了全面的解释。 我们是否也该这么做呢?在聆听Abhishek的演讲时,这样的想法涌入脑海。 如今,开发者有许多艰
CSDN技术头条
2018/02/12
1.8K0
Uber是如何通过Mesos和Cassandra实现跨多个数据中心每秒100万的写入速度的?
Spark:Dynamic Resource Allocation【动态资源分配】
用户提交Spark应用到Yarn上时,可以通过spark-submit的num-executors参数显示地指定executor个数,随后,ApplicationMaster会为这些executor申请资源,每个executor作为一个Container在Yarn上运行。Spark调度器会把Task按照合适的策略分配到executor上执行。所有任务执行完后,executor被杀死,应用结束。在job运行的过程中,无论executor是否领取到任务,都会一直占有着资源不释放。很显然,这在任务量小且显示指定大量executor的情况下会很容易造成资源浪费。
topgunviper
2022/05/12
2K0
Spark:Dynamic Resource Allocation【动态资源分配】
Spark 动态资源分配(Dynamic Resource Allocation) 解析
所以便有了要开发一套针对Spark Streaming 动态资源调整的想法。我在文章最后一个章节给出了一个可能的设计方案。不过要做这件事情,首先我们需要了解现有的Spark 已经实现的 Dynamic Resource Allocation 机制,以及为什么它无法满足现有的需求。
用户2936994
2018/08/27
2.5K0
Mesosphere Data Center Operation Systeam
原因:2016年11月29日 星期二 架设DCOS(Data Center Operation Systeam)。 说明:本文主要记录DCOS架设过程中的问题与解决办法。
ZHaos
2019/02/27
8000
spark on mesos 两种运行模式
原文地址:http://blog.csdn.net/lsshlsw/article/details/47104913 Spark on mesos 有粗粒度(coarse-grained)和细粒度(fine-grained)两种运行模式,细粒度模式在spark2.0后开始弃用。 细粒度模式 优点 spark默认运行的就是细粒度模式,这种模式支持资源的抢占,spark和其他frameworks以非常细粒度的运行在同一个集群中,每个application可以根据任务运行的情况在运行过程中动态的获得更多或更少
Albert陈凯
2018/04/04
8530
spark on mesos 两种运行模式
Spark Core源码精读计划16 | 通过ExecutorAllocationManager实现动态Executor分配
按照SparkContext初始化的顺序,接下来就轮到调度系统的三大金刚——SchedulerBackend、TaskScheduler、DAGScheduler——出场了。与它们相关的细节非常多,绝不是一两篇文章能够讲清楚的,所以我们之后讲到Spark作业执行时,再自然地回过头详细看它们。本篇来讲解SparkContext初始化的倒数第二个组件:Executor分配管理器,即ExecutorAllocationManager。前面已经讲过,ExecutorAllocationManager可以通过与集群管理器联系,根据当前的负载动态增加或删除Executor,是一个比较智能的机制。
大数据真好玩
2019/08/19
9710
DCOS之Marathon应用管理篇
最近推出DCOS之Marathon相关文章,主要介绍DCOS系统选用Marathon作为应用管理工具使用情况,请阅读第三遍文章:DCOS之Marathon应用管理篇
zouyee
2021/02/01
8330
DCOS之Marathon应用管理篇
Spark生态系统的顶级项目
Spark开发了一个丰富的生态系统,包括le 官方和第三方工具。 我们来看看5个以不同方式加强了Spark的第三方项目。
哒呵呵
2018/08/06
1.2K0
Spark生态系统的顶级项目
【干货】华为九大热门开源项目,你了解多少?
世界 500 强的华为,旗下设有华为开源软件能力中心。是基于华为开源战略新成立的部门。承担开源新技术扫描与规划、开源技术研究、开源开发方法探索、开源社区运营和开源能力构建及管理等相关工作。本期,就为大家整理了华为的开源项目:
钱塘数据
2018/07/27
1.3K0
【干货】华为九大热门开源项目,你了解多少?
「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配
资源是影响 Spark 应用执行效率的一个重要因素。Spark 应用中真正执行 task 的组件是 Executor,可以通过spark.executor.instances 指定 Spark 应用的 Executor 的数量。在运行过程中,无论 Executor上是否有 task 在执行,都会被一直占有直到此 Spark 应用结束。
开源小E
2021/12/14
1.3K0
「Spark从精通到重新入门(二)」Spark中不可不知的动态资源分配
Kubernetes 1.26: 动态资源分配 Alpha API
作者: Patrick Ohly (Intel)、Kevin Klues (NVIDIA)
CNCF
2023/02/12
1.1K0
Kubernetes 1.26: 动态资源分配 Alpha API
Meson:Netflix即将开源的机器学习工作流编排工具
原文标题:Meson: Workflow Orchestration for Netflix Recommendations 译者:刘翔宇 审校:刘帝伟 责编:周建丁 未经许可,谢绝转载。机器学习投稿、采访请联系zhoujd@csdn.net 在Netflix,我们的目标是在你观看之前预测你想观看的。为做到这一点,我们每天运行了大量的机器学习(ML)工作流。为了支持建立这些工作流并且有效利用资源,我们开发了Meson。 Meson是一个通用的工作流编排和调度框架,用于管理跨异构系统执行工作负载的ML管
用户1737318
2018/06/06
1.9K0
Spark生态顶级项目汇总
 现在 Apache Spark 已形成一个丰富的生态系统,包括官方的和第三方开发的组件或工具。后面主要给出 5 个使用广泛的第三方项目。   Spark 官方构建了一个非常紧凑的生态系统组件,提供各种处理能力。 下面是 Spark 官方给出的生态系统组件(引自 Spark 官方文档)。 Spark DataFrames:列式存储的分布式数据组织,类似于关系型数据表。 Spark SQL:可以执行 SQL 查询,包括基本的 SQL 语法和 HiveQL 语法。读取的数据源包括 Hive 表、Parquent
我是攻城师
2018/05/14
1.2K0
Spark GenericUDF动态加载外部资源
文章1中提到的动态加载外部资源,其实需要重启Spark任务才会生效。受到文章2启动,可以在数据中加入常量列,表示外部资源的地址,并作为UDF的参数(UDF不能输入非数据列,因此用此方法迂回解决问题),再结合文章1的方法,实现同一UDF,动态加载不同资源。本文通过继承GenericUDF类,读取存放在Redis集群中的字符串,构建字典树,完成词包匹配,来说明这一工作。
mikeLiu
2020/09/01
2.7K0
大数据高速计算引擎Spark
从狭义的角度上看:Hadoop是一个分布式框架,由存储、资源调度、计算三部分组 成; Spark是一个分布式计算引擎,由 Scala 语言编写的计算框架,基于内存的快速、通 用、可扩展的大数据分析引擎; 从广义的角度上看,Spark是Hadoop生态中不可或缺的一部分;
用户2337871
2021/03/15
8900
云架构师进阶攻略(3)-从容器到配置中心、日志中心、监控中心
Docker有几个核心技术,一个是镜像,一个是运行时,运行时又分看起来隔离的namespace和用起来隔离的cgroup。
物流IT圈
2019/07/16
9100
云架构师进阶攻略(3)-从容器到配置中心、日志中心、监控中心
为什么你的私有云可以很像PaaS?
在IT界数年针对私有云架构的优点的不断的争论之后,一个切实可行且企业可用(enterprise-ready)的私有云架构终于来到了我们面前。并且与其它在过去的一个世纪出现的技术方案不同,它已经在世界上的一些巨头公司,和采用先进技术的最多的公司里都证明了自己的价值。 重要的是,我们指的不是IaaS。到目前为止IaaS方案已经被尝试过太多次,难以统计,并且还没有怎样扩散开来。不断的有初创公司尝试然但无功而返,也不乏大公司步其后尘 - 包括像OpenStack这样的项目 - 结果却未能将私有的IaaS打造成为一个
静一
2018/03/22
2.6K0
为什么你的私有云可以很像PaaS?
大数据平台技术栈
Flume是一个分布式的高可用的数据收集、聚集和移动的工具。通常用于从其他系统搜集数据,如web服务器产生的日志,通过Flume将日志写入到Hadoop的HDFS中。
物流IT圈
2019/07/16
2.2K0
大数据平台技术栈
大家之前是不是误解了DC/OS与Kubernetes之间的关系
DC/OS 与 Kubernetes 本篇文章将主要介绍“Kubernetes on DC/OS”的实现机制与优势,不会就Mesos与Kubernetes的架构与技术细节做过多的展开。关于Mesos与DC/OS的具体功能细节,大家可以关注本公众号,本公众号后续会陆续推送不同类型的技术文章,这些文章将包括Mesos以及DC/OS的架构介绍、技术原理与实现方式,以及微服务、分布式应用、大数据平台、AI平台在DC/OS平台之上运行的最佳实践。 随着容器技术快速地发展与不断的成熟,与容器相关的生态体系也在不断地丰富
企鹅号小编
2018/01/19
1.2K0
大家之前是不是误解了DC/OS与Kubernetes之间的关系

相似问题

在dcos设置的mesos集群中访问spark

11

从Mesos DCOS集群中运行的应用程序提交Spark

15

有关如何设置mesos、cassandra和spark物理(测试)集群的任何资源

13

Mesos DCOS没有安装Kafka

16

DCOS/Mesos不会取消对框架删除的资源保留

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文