一、环境
Hadoop 2.6.4,启动主从服务器。
Spark 2.2 , 启动主从服务器
Spark 可以运行 Scala、Python、R、Java 语言写的脚本,所以需要安装上各自的开发语言和库文件。注意需要有 Zlib,可以使用 yum和 brew 安装
本人的主服务器是 Mac OS, 从服务器是 Cent OS 6.x
二、配置
对于运行的环境,在启动的时候,worker 需要向 master 进行注册,注册的时候会显示使用的 CPU 核数和内存数量。
39 17/08/09 10:10:26 INFO master.Master: Registering worker 192.168.10.1:59217 with 1 cores, 512.0 MB RAM
40 17/08/09 10:10:26 INFO master.Master: Registering worker 192.168.10.10:51230 with 1 cores, 512.0 MB RAM
41 17/08/09 10:10:26 INFO master.Master: Registering worker 192.168.10.11:47168 with 1 cores, 512.0 MB RAM
42 17/08/09 10:10:26 INFO master.Master: Registering worker 192.168.10.12:41451 with 1 cores, 512.0 MB RAM
所以,从上面可以看出来,注册使用的内存是512M,这个很重要,对于运行环境很重要,否则配置不当,会频频出错,特别是会提示资源不足的问题。
17/08/09 09:36:34 WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources
资源配置内容,在 conf/spark-env.sh 和 conf/spark-default.sh 这两个文件中。
在这里需要给出大家的内存配置问题:
9 export SPARK_WORKER_MEMORY=512M
10 export SPARK_EXECUTOR_INSTANCES=4
13 export MASTER=spark://mymac:7077
14 export SPARK_EXECUTOR_MEMORY=512M
15 export SPARK_DRIVER_MEMORY=512M
可以看到,我们把内存限制在512M,因为缺省的内存是1g,如果使用1g 内存运行肯定是不够的,worker 的资源会不够。
在 spark-default.sh 中可以定义一些缺省值,这样在使用命令行的时候,很多参数都没必要列出来。
比如:
spark.master spark://mymac:7077
spark.driver.memory 512m
三、运行实例
Spark附带了几个示例程序。Scala、Java、Python和R示例都在exampl/src/main目录中。
运行一个Java或Scala示例程序,目录在Spark的 HOME目录中。使用模式就是bin/run-params。(这将方便调用用于启动应用程序的更一般的spark-submit脚本)。例如:
./bin/run-example SparkPi 10
您还可以通过修改后的Scala shell来运行Spark。这是学习框架的一种很好的方式。
./bin/spark-shell --master local[2]
--master选项指定一个分布式集群的主URL,或者local 表示用一个线程本地运行,或者local[N]在本地运行N个线程。您应该从使用loca]测试开始。对于一个完整的选项列表,可以使用--help选项来运行Spark shell。
Spark还提供了一个Python API。要在Python解释器中交互式地运行Spark,请使用bin/pyspark:
./bin/pyspark --master local[2]
示例应用程序也提供了 python的。例如,
./bin/spark-submit examples/src/main/python/pi.py 10
也有 R 语言的哦
./bin/sparkR --master local[2]
R 语言的例子有:
./bin/spark-submit examples/src/main/r/dataframe.R
对于普通的 scala 的 shell,我们直接运行:
bin\spark-shell 即可,不用使用复杂的参数,比如:
spark-shell --master spark://mymac:7077 --executor-memory 512M --driver-memory 512M
这是太麻烦,直接 spark-shell 即可。
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.2.0
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_77)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
四、运行原理
事实,整个 Spark 的运行是由应用程序、job、stage、taskset 和 task 组成。应用程序是由一个 driver program 和多个 job 构成。job 由多个 stage 组成。stage 对应一个 task set。taskset对应一组关联的相互之间没有 shuffle依赖关系的 task 组成。task 就是最小单位。
下图是运行的原理图
集群管理器 Cluster Manager 进行全局管理。
Driver Program驱动程序,是 spark 的核心组件。构建 SparkContext(Spark 应用的入口,它负责和整个集群的交互,它负责和整个集群的交互,创建需要的变量,还包含集群的配置信息等)。将用户提交的 job 转换为 DAG图。根据策略将 DAG图划分为多个 stage,根据区分从而生成一系列 tasks。根据 tasks 要求向资源管理器申请资源。提交任务并检测任务的状态。
Executor,是执行 task 的单元,一个 worker Node 可以有多个 Executor。