yarn资源多租户隔离

标题随意取的,别太在意。

技术栈

实时计算:spark streaming + kafka + yarn
离线计算:sparkSQL + yarn

当前yarn集群资源如图

image.png

目前公司离线计算和实时计算都是跑在一个yarn集群,最近离线计算资源占用非常高,整个CDH集群状态高负载运行。


image.png

通过运维人员监控发现,实时计算服务发现kafka消息堆积大量波动,排查后发现离线计算任务占用大量yarn资源。


image.png

对于业务价值,实时计算的优先级远大于离线计算,必须优先保证实时计算资源。

目前有2种方案:

1、独立2套yarn集群分别用于实时计算和离线计算
2、继续使用同一套yarn集群,分2个QUEUE(default,realtime)隔离yarn资源

分析:

方案1

服务器完全隔离,cpu,memory,io完全独立,但服务器资源紧张,无法调度到资源。

方案2

现有yarn集群配置,内存完全隔离,cpu理论上也可隔离,但是io和network不一定完全隔离,还存在一定影响。

结论

相关同事讨论后,一致选择方案2

实施

1、由大数据同事负责yarn具体实施,对QUEUE realtime 资源分配: memory 1T, vcore:1500
2、由测试同事负责测试环境验证可行性
3、由运营同事负责线上实施

参考

1、利用yarn多队列实现hadoop资源隔离 https://blog.csdn.net/bbaiggey/article/details/53574468
2、CDH Yarn资源队列划分管理 https://blog.csdn.net/u012551524/article/details/80544595

spark submit参数介绍

你可以通过spark-submit --help或者spark-shell --help来查看这些参数。
使用格式:
./bin/spark-submit
--class <main-class>
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
... # other options
<application-jar>
[application-arguments]
参数名 格式 参数说明
--master MASTER_URL 如spark://host:port, mesos://host:port, yarn, yarn-cluster,yarn-client, local
--deploy-mode DEPLOY_MODE Client或者master,默认是client
--class CLASS_NAME 应用程序的主类
--name NAME 应用程序的名称
--jars JARS 逗号分隔的本地jar包,包含在driver和executor的classpath下
--packages 包含在driver和executor的classpath下的jar包逗号分隔的”groupId:artifactId:version”列表
--exclude-packages 用逗号分隔的”groupId:artifactId”列表
--repositories 逗号分隔的远程仓库
--py-files PY_FILES 逗号分隔的”.zip”,”.egg”或者“.py”文件,这些文件放在python app的PYTHONPATH下面
--files FILES 逗号分隔的文件,这些文件放在每个executor的工作目录下面
--conf PROP=VALUE 固定的spark配置属性,默认是conf/spark-defaults.conf
--properties-file FILE 加载额外属性的文件
--driver-memory MEM Driver内存,默认1G
--driver-java-options 传给driver的额外的Java选项
--driver-library-path 传给driver的额外的库路径
--driver-class-path 传给driver的额外的类路径
--executor-memory MEM 每个executor的内存,默认是1G
--proxy-user NAME 模拟提交应用程序的用户
--driver-cores NUM Driver的核数,默认是1。这个参数仅仅在standalone集群deploy模式下使用
--supervise Driver失败时,重启driver。在mesos或者standalone下使用
--verbose 打印debug信息
--total-executor-cores NUM 所有executor总共的核数。仅仅在mesos或者standalone下使用
--executor-core NUM 每个executor的核数。在yarn或者standalone下使用
--driver-cores NUM Driver的核数,默认是1。在yarn集群模式下使用
--queue QUEUE_NAME 队列名称。在yarn下使用
--num-executors NUM 启动的executor数量。默认为2。在yarn下使用

image.png

推荐阅读更多精彩内容

  • spark-submit的时候如何引入外部jar包 在通过spark-submit提交任务时,可以通过添加配置参数...
    博弈史密斯阅读 1,874评论 1 14
  • Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AM...
    大佛爱读书阅读 2,173评论 0 20
  • 1.1、 分配更多资源 1.1.1、分配哪些资源? Executor的数量 每个Executor所能分配的CPU数...
    miss幸运阅读 2,660评论 3 15
  • 1、 性能调优 1.1、 分配更多资源 1.1.1、分配哪些资源? Executor的数量 每个Executor所...
    Frank_8942阅读 3,661评论 2 35
  • YarnYarn产生背景:Yarn直接来自于MR1.0MR1.0 问题:采用的是master slave结构,ma...
    时待吾阅读 3,962评论 2 23