【spark】7.集群上运行以及配置

spark运行架构

首先在分布式环境下,spark集群采用的主/从结构,即在一个集群中有一个节点负责中央协调,协调个分布式工作节点,这个节点被称为驱动器节点(Driver),与之对应的工作节点被称为驱动器节点(executor
在这里插入图片描述
spark应用通过一个叫做集群管理器的外部服务在集群中的机器上启动。spark自带的集群管理器被称为独立集群管理器。除此之外还可以运行在hadoop的yarn和apache mesos上。

驱动器节点(driver)

driver驱动器执行的是你的代码中的main()方法,它执行用户编写的用来创建sparkcontext、创建RDD、转化RDD等操作的代码。主要负责两个职责。

  • 把用户程序转化为任务
    从上层上来开,所有的spark程序从数据输入创建RDD,在使用转化操作派生出新的RDD,最后使用行动操作收集或存储结果RDD,spark程序都隐形的生成了一个由操作组成的逻辑上的有向无环图,当驱动器程序运行时,它会把这个逻辑图转化为实际的物理执行计划。
    spark会对这些逻辑执行计划进行一些优化,生成一系列步骤,每个步骤都是由多个任务组成,这些任务会被打包并发送到集群上。任务时spark中最小的工作单元。
  • 为执行器节点调度任务
    当执行器进程启动后,会向驱动器进程注册自己,因此,驱动器程序始终对所有执行器节点有完整的记录。每个执行器节点都代表一个能够处理任务和存储RDD的进程。
    驱动器程序会尝试按照数据所在位置将任务分配给执行器进程。当任务执行时,执行器进程会把缓存数据存储下来。驱动器程序也会追踪这些缓存数据,为以后的任务分配最基础,以减少数据之间的网络传输。

执行器节点(executor)

执行器节点属于工作进程,负责在spark作业中运行任务,任务之间相互独立。spark应用启动时,执行器节点就会被启动

  • 负责运行组成spark应用的任务,并将结果返回给驱动器进程。
  • 通过自身的块管理器为用户程序中要求缓存的RDD提供内存式存储。

使用spark-submit部署应用

bin/spark-submit my_script.py

上面是最简单的示例,除了提交的.py脚本以外,没有设置任何参数,这个py程序只会在本地运行。

常见的设置参数

标记描述
–master表示要连接的集群管理器,可选yarn,local[N],mesos://host:port
–deploy-mode可选client/cluster,表示选择在本地或者集群上启动驱动器程序,默认本地运行
–class运行Java或Scala程序是应用的主类
–name应用的显示名,会显示在spark的网页用户界面中
–jars需要上传并放在应用的CLASSPATH中的JAR包的列表。如果应用依赖于少量第三方的jar包,可以放在这个参数中
–files需要放到应用工作目录中的文件的列表,这个参数一般用于放需要分发到各节点的数据文件
–py-files需要添加到PYTHONPATH中的文件的列表
–executor-memory执行器进程使用的内存量,以字节为单位
–driver-memory驱动器进程使用的内存量
bin/spark-submit --master yarn --executor-memory 10g my_script.py

在yarn上运行spark

需要设置指向你的Hadoop配置目录的环境变量

export HADOOP_CONF_DIR = '...'
spark-submit --master yarn yourapp

sparkconf配置

conf = SparkConf() \
    .setAppName("myapp") \
    .setMaster("yarn") \
    .set('spark.yarn.queue', "root.adhoc") \
    .setExecutorEnv('PYTHONPATH', 'pyspark.zip:py4j-0.10.4-src.zip') \
    .set('PYSPARK_PYTHON', '/usr/loacal/anaconda2/bin/python2.7')
conf.set("spark.executor.memory", "5g")
conf.set("spark.driver.memory","10g")
conf.set("spark.executor.cores","2")
conf.set("spark.dynamicAllocation.maxExecutors","5")
conf.set("spark.driver.maxResultSize","0")
conf.set("spark.dynamicAllocation.enabled","true")
conf.set("spark.shuffle.service.enabled", "true")
conf.set("spark.shuffle.service.port", "7338")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
spark = SparkSession(sc)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值