Spark
一、核心概念
每个
spark
应用都由一个驱动器程序(driver program
)来发起集群上的各种并行操作driver program
包含了应用的main
函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关操作driver program
通过一个SparkContext
对象来访问spark
driver program
一般要管理多个执行器(executor
) 节点
SparkContext
:该对象代表了对计算集群的一个连接- 在
pyspark shell
中,当shell
启动时,已经自动创建了一个SparkContext
对象,它叫做sc
。 - 通常可以用它来创建
RDD
- 在
二、安装和使用
安装步骤:
- 从
http://spark.apache.org/downloads.html
下载Pre-built Apache Hadoop xx and later
的版本 - 解压即可
- 从
在
pycharm
中使用pyspark
:File->Settings->Project->Project Structure
,选择右侧的Add Content Root
。添加
spark
目录下的python
目录注意,如果
pycharm
使用了python3
,则需要在脚本中添加语句:import os
os.environ["PYSPARK_PYTHON"]="python3"
三、 pyspark shell
spark
带有交互式的shell
,可以用于即时数据分析spark shell
可以与分布式存储在许多机器的内存或者硬盘上的数据进行交互,处理过程由spark
自动控制pyspark shell
是spark shell
的python
版本
使用
pyspark shell
:进入spark
的安装目录,然后执行bin/pyspark
。ubuntu16.04
中默认使用python2.7
如果需要使用
python3
,则使用export PYSPARK_PYTHON=python3
来导出环境变量- 或者在代码中使用
os.environ["PYSPARK_PYTHON"]="python3"
- 或者在代码中使用
- 退出
pyspark shell
:CTRL+D
修改
pyspark
日志:在conf
目录下创建一个log4j.proerties
的文件。- 可以直接使用模板
log4j.properties.template
,将log4j.rootCategory=INFO,console
修改为log4j.rootCategory=WARN,console
- 可以直接使用模板
四、独立应用
独立应用与
pyspark shell
的主要区别在于:你需要自行初始化SparkContext
,除此之外二者使用的API
完全相同。在
python
中,你需要把独立应用写成python
脚本,然后使用Spark
自带的bin/spark-submit
脚本来运行:bin/spark-submit my_script.py
spark-submit
会帮助我们引入python
程序的spark
依赖在独立应用中,通常使用下面方法初始化
SparkContext
:from pyspark import SparkConf, SparkContext
conf = SparkConf().setMaster('local').setAppName('My App')
sc = SparkContext(conf = conf)
首先创建一个
SparkConf
对象来配置应用,然后基于该SparkConf
来创建一个SparkContext
对象。.setMaster()
给出了集群的URL
,告诉spark
如何连接到集群上。这里'local'
表示让spark
运行在单机单线程上。.setAppName()
给出了应用的名字。当连接到一个集群上时,这个值可以帮助你在集群管理器的用户界面上找到你的应用。
关闭
spark
可以调用SparkContext
的.stop()
方法,或者直接退出应用(如调用System.exit(0)
或者sys.exit()
)如果需要使用
python3
,则使用export PYSPARK_PYTHON=python3
来导出环境变量。- 或者在代码中使用
os.environ["PYSPARK_PYTHON"]="python3"
- 或者在代码中使用