【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
    评论
以下是Spark 3.x集群部署的步骤: 1. 下载Spark安装包: ```shell wget https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz ``` 2. 解压安装Spark: ```shell tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz -C /opt mv /opt/spark-3.1.2-bin-hadoop3.2/ /opt/spark ``` 3. 配置Spark集群: - 在每个节点上,编辑Spark配置文件`/opt/spark/conf/spark-env.sh`,设置以下环境变量: ```shell export SPARK_HOME=/opt/spark export JAVA_HOME=/path/to/java export HADOOP_HOME=/path/to/hadoop export SPARK_MASTER_HOST=<master-node-ip> export SPARK_MASTER_PORT=7077 export SPARK_WORKER_CORES=2 export SPARK_WORKER_MEMORY=2g ``` 其中,`<master-node-ip>`是Spark主节点的IP地址。 - 在Spark主节点上,编辑`/opt/spark/conf/slaves`文件,将所有工作节点的IP地址添加到文件中,每行一个IP地址。 4. 启动Spark集群: - 在Spark主节点上,启动Spark主节点: ```shell /opt/spark/sbin/start-master.sh ``` - 在每个工作节点上,启动Spark工作节点: ```shell /opt/spark/sbin/start-worker.sh spark://<master-node-ip>:7077 ``` 其中,`<master-node-ip>`是Spark主节点的IP地址。 5. 验证Spark集群部署: - 在浏览器中访问Spark主节点的Web界面:`http://<master-node-ip>:8080`,确认Spark主节点和工作节点都已成功启动。 - 在Spark主节点上,运行Spark Shell进行测试: ```shell /opt/spark/bin/spark-shell --master spark://<master-node-ip>:7077 ``` 确认Spark Shell能够连接到Spark集群并正常工作。 以上是Spark 3.x集群部署的步骤。请根据实际情况进行配置和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值