当前位置: 代码迷 >> 综合 >> Spark Core 03(On Yarn)
  详细解决方案

Spark Core 03(On Yarn)

热度:30   发布时间:2023-11-13 09:36:45.0

Spark on YARN
    将spark作业提交到yarn上去执行
    spark仅仅作为一个客户端
示例:
./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
/home/hadoop/app/spark-2.3.1-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.3.1.jar \
3

deploy-mode: 可以是client 或 cluster    
--maste yarn 默认 yarn-client
等同于
--masteyarn-cluster
--deploy-mode client

--executor-cores
--executor-memory

Yarn-only的参数:

Options:--executor-memory MEM       Memory per executor (e.g. 1000M, 2G) (Default: 1G).
Spark standalone and YARN only:--executor-cores NUM        Number of cores per executor. (Default: 1 in YARN mode,or all available cores on the worker in standalone mode)
 YARN-only:--queue QUEUE_NAME          The YARN queue to submit to (Default: "default").--num-executors NUM         Number of executors to launch (Default: 2).If dynamic allocation is enabled, the initial number ofexecutors will be at least NUM.--archives ARCHIVES         Comma separated list of archives to be extracted into theworking directory of each executor.--principal PRINCIPAL       Principal to be used to login to KDC, while running onsecure HDFS.--keytab KEYTAB             The full path to the file that contains the keytab for theprincipal specified above. This keytab will be copied tothe node running the Application Master via the SecureDistributed Cache, for renewing the login tickets and thedelegation tokens periodically.

模式差异client vs cluster
详解:
https://www.cnblogs.com/MOBIN/p/5857314.html
1.driver运行在哪里
  client:当前机器
  cluster:am
2.网络通信
3.机制

任务运行完就查看不到信息了,如何保存信息以便查看:
1.配置conf/spark-defaults.conf

 spark.eventLog.enabled           truespark.eventLog.dir               hdfs://ruozehadoop000:9000/sparkeventLog//开启压缩spark.eventLog.compress          true

2.配置conf/spark-env.sh
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://ruozehadoop000:9000/sparkeventLog"
                                                        即可在默认端口18080查看任务日志
日志清理机制:


注意点:
1、历史服务器显示完成的和不完整的SCAPLE作业。如果应用程序在故障后多次尝试,将显示失败的尝试,以及任何正在进行的不完全尝试或最终的成功尝试。              
2、未完成的应用仅间歇地更新。更新之间的时间由更改文件检查的间隔定义(spark.history.fs.update.interval)。在较大的集群上,更新间隔可以设置为大的值。查看运行的应用程序的方式实际上是查看自己的Web UI。 
3、不注册自己完成的Application将被列为未完成的Application-甚至它们不再运行。如果应用程序崩溃,就会发生这种情况。 
4、有一个Application完成的信号标识,即Spark作业通过上下文终止(sc.stop()),
或者在Python中使用with SparkContext()作为sc: construct来处理Spark上下文的设置和拆解。 

coalesce vs reparition:
coalesce:用于减少分区(会影响性能,可用于解决小文件问题)
reparition: 底层调用的coalesce,用于增加分区

示例:
200条           200  只剩1条                 1           200  
rdd1 -map-> rdd2 -filter---------------> rddc --> save...
                                                                          x
rdd1 -map-> rdd2 -filter--coalesce-> rddc --> save...
不可能存200个空文件,所以要减少分区
*.coalesce(x)

map vs mapPartitions
Spark中map和mapPartitions区别

foreach  vs foreachPartition

spark RDD中foreachPartition和foreach说明

Foreach与foreachPartition都是在每个partition中对iterator进行操作,

不同的是,foreach是直接在每个partition中直接对iterator执行foreach操作,而传入的function只是在foreach内部使用,

而foreachPartition是在每个partition中把iterator给传入的function,让function自己对iterator进行处理.

只要涉及到输出的,用foreachPartition

  相关解决方案