栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark-提交作业命令详解(五)

Spark-提交作业命令详解(五)

Spark作业提交命令详解
  上篇博客,我们讲完了最全面的WordCount实现方法,现在我们讲一讲任务的提交。有人可能觉得这一块起码得要和Spark框架一起说,但是呢,有的同学迫切需要提交下自己的小作业,感受一下服务器集群的魅力。那好呗,开始了哈。


1、命令介绍

啥话不说先看一组命令吧

#submit.sh
CONF_DIR=//demoFile
APP_CONF=app.conf

spark-submit 
  --class com.thinkenergy.AlarmApp 
  --master yarn 
  --deploy-mode cluster 
  --driver-memory 6g 
  --driver-cores 2 
  --executor-memory 8g 
  --executor-cores 4 
  --num-executors 10 
  --conf spark.dynamicAllocation.enabled=false 
  --conf spark.driver.extraClassPath=/etc/hbase/conf 
  --conf spark.yarn.maxAppAttempts=1 
  --conf spark.sql.shuffle.partitions=20 
  --conf spark.yarn.submit.waitAppCompletion=false 
  --conf spark.yarn.executor.memoryOverHead=2028 
  --keytab /appserv/tsinghua/gcy.gybatt.keytab 
  --driver-java-options "-Djava.security.krb5.conf=/etc/krb5.conf" 
  --conf "spark.executor.extraJavaOptions=-Djava.security.krb5.conf=/etc/krb5.conf"
  --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/demoFile/jaas.conf" 
  --files $CONF_DIR/APP_CONF,CONF_DIR/log4j.properties,/demoFile/krb5.conf,/demoFile/jaas.conf 
  --jars /demoFile/xxxjava-1.0.jar

  这是我们运行某项目时候的执行脚本,看起来是不是还可以?不着急 ,我们慢慢来哈。
接下来我们上一个任务参数介绍表:

参数名参数说明
–mastermaster 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local,这里我们用到的最多的是其实是local[](这里是指使用本机电脑的所有核,亦可以改成你想要的核数,比如四核:4),也就是本地调试。其他的还可以是mesos://host:port,k8s://HOST:PORT等等资源容器,这里的yarn就是hadoop的资源管理器。看来hadoop还是很重要的。
–name这里是我们提交任务的名称,比如 “WordCount App”
–jars这个是我们的jar包,如上/demoFile/xxxjava-1.0.jar
–packages包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
–exclude-packages为了避免冲突 而指定不包含的 package
–repositories远程 repository
–conf PROP=VALUE指定 spark 配置属性的值,通过这些Key-values的键值对可以设置我们的集群节点资源等信息,例如spark.yarn.executor.memoryOverHead=2028,控制我们集群子节点的对外内存,放置内存太小,不够JVM的开销。当我们在真正开发,遇到内存溢出等问题的时候,可以考虑一下这里的设置
–properties-file加载的配置文件路径。这个的目的是便于测试,或者便于部署。通过修改配置文件路径,来控制运行环境。
–driver-memoryDriver内存,我们集群driver的任务可用资源,缺省默认 1G,一般情况下下,相对executor,它消耗内存不会太大,因为driver一般都是任务的控制节点。
–driver-java-options传给 driver 的额外的 Java 选项
–driver-library-path传给 driver 的额外的库路径
–driver-class-path传给 driver 的额外的类路径
driver-cores允许集群dirver使用的核数
–executor-core每个 executor 的核数。这个参数决定了每个Executor进程并行执行task线程的能力,在yarn或者standalone下使用
–executor-memory允许使用的executor的内存大小,因为executor是我们任务的执行节点,一般可以按照资源分配合适的情况下可以多给一点。这里缺省默认是1G。
–num-executors启动的 Executor进程数量。可以是集群节点以及目前执行任务个数而定在,一般情况下下可以除去dirver,尽量的多给就可以,每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适,设置太少或太多的Executor进程都不好,这里要说明一下,executor和物理节点不是一回事。 yarn 下使用缺失默认默认为2。
–total-executor-cores所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用。这个就是total-executor-cores = executor-core*num-executor

上面是绝大部分用得到的参数设置了,还有一些可能大姐也不会遇到,所以暂时不说了,等我真正的需要设置的时候,在介绍吧,否则也只是纸上谈兵。

2、设置技巧

  看了这么多复杂的设置,那在我们提交任务的会后我们应该怎么设置了?
我们下来看一个腾讯云大佬的实验例子:https://cloud.tencent.com/developer/ask/52337;

节点CPURAMHDD
host1Core i7-4790(内核数量:4,线程数量:8)32GB(8GB x 4)8TB(2TB x 4)
host2Core i7-4790(内核数量:4,线程数量:8)32GB(8GB x 4)8TB(2TB x 4)
host3Core i7-4790(内核数量:4,线程数量:8)32GB(8GB x 4)8TB(2TB x 4)
  1. 网络:1Gb
  2. Spark版本:1.0.0
  3. Hadoop版本:2.4.0(Hortonworks HDP 2.1)
  4. Spark工作流程:sc.textFile - > filter - > map - > filter - > mapToPair - > reduceByKey - > map - > saveAsTextFile
  5. 输入数据: 类型:单个文本文件,
         大小:165GB,
         行数:454,568,833。
  6. 输出数据: 第二次过滤后的行数:310,640,717
         结果文件的行数:99,848,268
         结果文件的大小:41GB
方案参数设置任务时间
方案1–master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3(每个数据节点的执行者,尽可能多地使用核心)50分15秒
方案2–master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3 (减少了内核数量)55分48秒
方案3–master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12 (少核心,多执行31分23秒

可以看到方案三的时间是最少的。有人会问,方案1那么多的内存为什么会是比方案3慢呢?
主要是因为虽然内存给的大,但是任务的速度却没有提高,大部分数据加载在内存里面处于排队状态,但是方案3num-executors给的多,任务的并行度会高一下,排队等待的时间少,所以会快。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/601194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号