Spark core详解系列五

提交spark任务

使用spark-submit提交并运行spark任务。例:

spark-submit --master local[2] \
--name appName \
--class 主类的全路径 \
/home/hadoop/lib/mySpark-1.0.jar \
hdfs://hadoop001:9000/input/ hdfs://hadoop001:9000/output/ 

加入依赖

一般使用spark任务打包都是瘦包,即只包含代码,不包含spark和hadoop的相关包,因为我们提交代码的服务器运行都自带有这些环境包,无需额外上传。但是,很多时候需要加入第三方依赖包,如mysql包、fashjson包等,这些外部jar包则需要手动传人。常用的有以下两种方式:

  1. 采用assembly方式(需安装maven插件),对于不需要的spark和hadoop包,在pom中写provided属性,表示不打进jar包。形如:<scope>provided</scope>
  2. 采用–jars(推荐)

加载配置文件

运行spark-submit时会加载配置文件,默认加载conf/spark-defaults.conf文件
需要传入外部文件时,可使用 --files 参数,手动传入配置文件。

spark web UI

可以t展示已完成的和正在进行的任务,展示每个任务的stage、tasks、sizes、storage、environmental、executors信息。
默认端口:4040(4041,4042,etc)
默认情况,以上信息只在 spark application 运行期间有效。为了查看历史任务运行情况,可以启动任务前设置参数:spark.eventLog.enabled设置为true,并启动 spark history server。
注意: 一定要sc.stop(),已完成任务的页面才会有显示。
另:UI是从cache里加载50个history(默认),超过50个的部分从磁盘读取。

spark history server

在源码 org.apache.spark.deploy.history.HistoryServer 的 271 行注释如下:

/**
 * The recommended way of starting and stopping a HistoryServer is through the scripts
 * start-history-server.sh and stop-history-server.sh. The path to a base log directory,
 * as well as any other relevant history server configuration, should be specified via
 * the $SPARK_HISTORY_OPTS environment variable. For example:
 *
 *   export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/tmp/spark-events"
 *   ./sbin/start-history-server.sh
 *
 * This launches the HistoryServer as a Spark daemon.
 */

启动:./sbin/start-history-server.sh

启动前修改配置文件spark-env.sh:

  • 默认spark_daemon_memory:1G,一般不够,灵活增加。
  • spark_history_opts:配置项,通过-D设置。
    默认页面刷新周期:10s
    默认端口:18080
    指定展示日志时的读取目录:
    export spark_history_opts="-Dspark.history.fs.logDirectory=hdfs://namenode/spark-logs"
  • 可以指定日志目录(spark-defaults.conf):
    打开开关:spark.eventLog.enabled true
    指定位置:spark.eventLog.dir hdfs://namenode/spark-logs
  • web UI上支持排序,可以方便看出慢任务和数据倾斜的情况。(重点!!)

共享变量

共享变量有两种:广播变量和累加器

广播变量

允许程序员在每台计算机上缓存一个只读变量,而不是将其副本与任务一起发送,以降低通信成本。
例:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)
累加器

可用于计数器和数值类型求和,也可自定义其他类型求和。
例:

scala> val accum = sc.longAccumulator("My Accumulator")
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum.add(x))                                                                              
scala> accum.value
res1: Long = 10

可在web UI上查看到Accumulators的值。
在这里插入图片描述
注意:累加器必须写在action算子后,以下代码是错误的。

scala>  val accum = sc.longAccumulator
scala>  data.map { x => accum.add(x); x }
// Here, accum is still 0 because no actions have caused the map operation to be computed.

REST API

参考 spark 官网:http://spark.apache.org/docs/latest/monitoring.html
对于历史任务,使用 http://<server-url>:18080/api/v1,对于运行中的任务,使用 http://localhost:4040/api/v1,返回 json 数据格式。可以在后面拼接各种 Endpoint,返回想要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值