Running Spark
来源:互联网 发布:淘宝助理授权 编辑:程序博客网 时间:2024/06/05 15:50
一、工程打包
1.1 Maven
mvn cleanmvn packagejar tf target/*jar
1.2 sbt
sbt cleansbt packagejar tf target/scala-2.10/*jar
二、Spark Submit
2.1 启动
$ ./bin/spark-submit --master yarn \ --deploy-mode cluster \ --driver-memory 4g \ --executor-memory 2g \ --executor-cores 1 \ --queue thequeue \ --jars my-other-jar.jar,my-other-other-jar.jar \ --class org.apache.spark.examples.SparkPi \ lib/spark-examples*.jar \ app_arg1 app_arg2
#!\bin\bashSPARK_SUBMIT_SCRIPT=${SPARK_HOME}/bin/spark-submitASSEMBLY_JAR=./target/*0.0.1.jar${SPARK_SUBMIT_SCRIPT} \ --class com.oreilly.learningsparkexamples.scala.WordCount \ ${ASSEMBLY_JAR} local
2.2 Spark Conf参数配置
http://spark.apache.org/docs/1.6.1/configuration.html#application-properties
- Spark中可以设置参数的地方有四,优先级从高到低分别是
1、程序设定set
// 创建一个conf对象val conf = new SparkConf()conf.set("spark.app.name", "My Spark App") conf.set("spark.master", "local[4]") conf.set("spark.ui.port", "36000") // 重载默认端口配置// 使用这个配置对象创建一个SparkContext val sc = new SparkContext(conf)
2、spark submit 传参数指定
spark-submit \ --class com.example.MyApp \ --master local[4] \ --name "My Spark App" \ --conf spark.ui.port=36000 \ myApp.jar
3、spark submit 传配置文件设定
spark-submit \ --class com.example.MyApp \ --properties-file my-config.conf \ myApp.jar## Contents of my-config.conf ##spark.master local[4]spark.app.name "My Spark App"spark.ui.port 36000
4、调用系统默认值
Spark 安装目录中找到 conf/spark-defaults.conf 文件,尝试读取该文件中以空格隔开的键值对数据
三、运行参数详解
3.1 –master
http://spark.apache.org/docs/1.6.1/submitting-applications.html
四、集群管理器
4.1 Saprk自带的独立集群管理器
http://spark.apache.org/docs/1.6.1/spark-standalone.html
- 启动独立集群管理器
(1) 将编译好的 Spark 复制到所有机器的一个相同的目录下,比如 /home/yourname/spark。(2) 设置好从主节点机器到其他机器的 SSH 无密码登陆。这需要在所有机器上有相同的用 户账号,并在主节点上通过 ssh-keygen 生成 SSH 私钥,然后将这个私钥放到所有工作 节点的 .ssh/authorized_keys 文件中。如果你之前没有设置过这种配置,你可以使用如下 命令:# 在主节点上:运行ssh-keygen并接受默认选项$ ssh-keygen -t dsaEnter file in which to save the key (/home/you/.ssh/id_dsa): [回车] Enter passphrase (empty for no passphrase): [空]Enter same passphrase again: [空]# 在工作节点上:# 把主节点的~/.ssh/id_dsa.pub文件复制到工作节点上,然后使用: $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys$ chmod 644 ~/.ssh/authorized_keys(3) 编辑主节点的 conf/slaves 文件并填上所有工作节点的主机名。(4) 在主节点上运行 sbin/start-all.sh(要在主节点上运行而不是在工作节点上)以启动集群。 如果全部启动成功,你不会得到需要密码的提示符,而且可以在 http://masternode:8080 看到集群管理器的网页用户界面,上面显示着所有的工作节点。(5) 要停止集群,在主节点上运行 bin/stop-all.sh。
- 检查管理器是否正常
spark-shell --master spark://masternode:7077
- 提交程序
spark-submit --master spark://masternode:7077 yourapp管理界面http://masternode:8080正常情况下(1)应用连接上了(即出现在了 Running Applications 中);(2) 列出的所使用的核心和内存均大于 0。
- 说明
执行器进程申请的内存(–executor-memory值)超过了集群所能提供的内存总量,独立集群管理器始终无法为应用分配执行器节点
独立集群管理器支持两种部署模式(–deploy-mode),client(默认,驱动器程序就是你提交任务的机器)和 cluster(驱动器程序运行在集群的某个工作节点)如果你有一个集群(20台物理节点,每个节点4cores),当你提交一个任务(8cores,每个core1G),默认情况下,Spark将会在8台物理节点上召唤起8个core,每个core1G,当然我们也可以通过配置spark.deploy.spreadOut=false来要求申请尽可能少的物理节点,比如2台物理节点、2*4cores
4.2 YARN
http://spark.apache.org/docs/1.6.1/running-on-yarn.html
- 配置并提交任务
(1) 设置环境变量 HADOOP_CONF_DIR。这个目录 包含 yarn-site.xml 和其他配置文件;如果你把 Hadoop 装到 HADOOP_HOME 中,那么这 个目录通常位于 HADOOP_HOME/conf 中,否则可能位于系统目录 /etc/hadoop/conf 中(2) 然后用如下方式提交你的应用: export HADOOP_CONF_DIR="..." spark-submit --master yarn yourapp
4.3 Mesos
http://spark.apache.org/docs/1.6.1/running-on-mesos.html
- 执行器之间的资源共享,分为细粒度模式(默认,执行器cores的数量会随着任务的执行而变化),和粗粒度模式(spark.mesos.coarse=true, 比较适合streaming这样的高实效性任务,减少core调度之间的延迟)
4.4 EC2
http://spark.apache.org/docs/1.6.1/ec2-scripts.html
- 比较适合搭配S3
五、任务管理界面
- Jobs \ Stages 方便查看各个任务的执行时间
- Storage 表示已缓存的RDD信息
- Environment 可以查看我们设置的配置信息
- Executors 各个节点的执行和配置情况
六、程序运行调优
6.1 优化分区数、并行度
在数据混洗的时候传合理的参指定并行度
对已有的数据进行从新分区 repartition、减少分区数coalesce
# 以可以匹配数千个文件的通配字符串作为输入>>> input = sc.textFile("s3n://log-files/2014/*.log")>>> input.getNumPartitions()35154# 排除掉大部分数据的筛选方法>>> lines = input.filter(lambda line: line.startswith("2014-10-17")) >>> lines.getNumPartitions()35154# 在缓存lines之前先对其进行合并操作>>> lines = lines.coalesce(4).cache()>>> lines.getNumPartitions()4# 可以在合并之后的RDD上进行后续分析>>> lines.count()
6.2 设置kyro的系列化方式
org.apache.spark.serializer.KryoSerializer会优于默认的java序列化的库
- 普通的序列化
val conf = new SparkConf()conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
- 有注册过的序列化
val conf = new SparkConf()conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")conf.registerKryoClasses(Array(classOf[MyClass], classOf[MyOtherClass]))
- 有强制要求必须注册的序列化
val conf = new SparkConf()conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")// 严格要求注册类conf.set("spark.kryo.registrationRequired", "true")conf.registerKryoClasses(Array(classOf[MyClass], classOf[MyOtherClass]))
6.3 修改内存使用策略
1、重新分配RDD存储、数据混洗聚合存储、用户存储占比
2、改进缓存策略,比方说MEMORY_ONLY 改为 MEMORY_AND_DISK,当数据缓存空间不够的时候就不会删除旧数据导致重新加载计算,而是直接从磁盘load数据;再比方说MEMORY_ONLY 改为 MEMORY_AND_DISK_SER 或者 MEMORY_ONLY_SER,虽然增加了序列化的时间,但是可以大量的减少GC的时间
6.4 硬件优化
1、双倍的硬件资源(CPU、Core)往往能带来应用时间减半的效果
2、更大的本地磁盘可以帮助提高Spark的应用性能
- Running Spark
- spark running errors
- spark running script setting
- Running Spark on YARN
- Running Spark on YARN
- Running Spark on Mesos[ 安装及运行 ]
- spark官方文档之——Running Spark on YARN YARN上运行SPARK
- spark SQL Running the Thrift JDBC/ODBC server
- spark SQL Running the Thrift JDBC/ODBC server
- Task not serializable exception while running apache spark job
- Recipes for Running Spark Streaming Applications in Production
- 集群上如何跑pyspark程序--Running Spark Python Applications
- spark-shell --master yarn-client running beyond virtual memory limits
- spark on yarn:Container is running beyond physical memory limits
- spark任务已经执行结束,但还显示RUNNING状态
- running
- 【甘道夫】Spark1.3.0 Running Spark on YARN 官方文档精华摘要
- Running Spark GraphX algorithms on Library of Congress subject heading SKOS
- 考试总结13
- java对象转换为json格式并传送数据到前端
- java高并发、高性能
- 阿里云 windows server 2012 R2 环境下redis的安装及外网访问的配置
- 添加购物车小案例
- Running Spark
- Maven常用命令
- 浏览器返回事件监听
- CentOS6安装postfix并设置sasl
- 2015最新P2P行业监管细则解读
- HDU
- 没有扩容机器,抗住了70多倍的流量增长
- 转置3乘3
- WebPack详细入门教程(三)之loader加载器