安装

安装scala

解压,配置环境变量 
export SCALA_HOME=/usr/local/scala-2.10.6  
export PATH=$SCALA_HOME/bin:$PATH  
source /etc/profile

再分发到各个节点

安装spark

1.下载解压,修改conf下spark-env.sh

export JAVA_HOME=/usr/java/latest 
export SCALA_HOME=/usr/local/scala-2.10.6 
export HADOOP_HOME=/usr/local/hadoop-2.6.0 
export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.0/etc/hadoop 
export SPARK_MASTER_IP=node1 
export SPARK_WORKER_MEMORY=1g 
export SPARK_EXECUTOR_MEMORY=1g 
export SPARK_DRIVER_MEMORY=1g 
export SPARK_WORKER_CORES=1

2.修改Slave文件

加入

master
Slave1
Slave2

这是master也是一个worker


3.spark-defaults.conf

配置内容 (??)

spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers=”one two three”
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:9000/historyserverforSpark
spark.yarn.historyServer.address node1:18080
spark.history.fs.logDirectory hdfs://node1:9000/historyserverforSpark
注意需要说明的是:配置了spark历史记录信息情况必须要在hdfs文件系统中创建historyserverforSpark此目录,如果没有创建spark是无法启动记录历史信息的进程

hadoop dfs -mkdir /historyserverforSpark

修改环境变量

export SPARK_HOME=/usr/local/spark-1.6.0-bin-hadoop2.6  
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH  
source ~/.bashrc

分发到其他节点

scp -r /usr/local/spark/ hadoop@Slave1:/usr/local/spark/

启动服务

sbin目录下
./start-all.sh

进入shell

spark目录下:

bin/spark-shell \
--master spark://master:7077 \
--executor-memory 2g \
--total-executor-cores 2

参数说明:
–master spark://master:7077 指定Master的地址
–executor-memory 2g 指定每个worker可用内存为2G
–total-executor-cores 2 指定整个集群使用的cup核数为2个

1:直接Spark-shell

会启动一个SparkSubmit进程来模拟Spark运行环境,是一个单机版的。

2:Spark-shell –master Spark://hadoop1:7077,hadoop2:7077,hadoop3:7077 –total-executor-cores 5 –executor-memory 5G

指定任务提交的集群路径在哪里。这就需要提前启动一个真实的Standalone集群。
可以指定多个master的地址,用逗号隔开。
如果没有指定–total-executor-cores 5 –executor-memory 5G,那么就会使用集群中所有可用的资源,没一个worker中都会启动executor。

注意:

如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。

Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可

基础概念

  1. SparkContext:Spark 应用程序的入口,负责调度各个运算资源,协调各个Worker Node 上的Executor。
  2. Driver Program:运行Application的main()函数并且创建SparkContext。
  3. RDD:弹性分布式数据集。RDD是Spark的核心数据结构,可以通过一系列算子进行操作。当RDD遇到Action算子时,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job(Job的概念在后面讲述),提交到集群执行。一个App中可以包含多个Job。
  4. Worker Node:集群中任何可运行Application代码的节点,运行一或多个Executor进程。
  5. Executor:为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务。

以下基本概念是spark应用在执行过程中涉及的概念:
1. Task(任务):RDD中的一个分区对应一个Task,Task是单个分区上最小的处理流程单元。
2. TaskSet(任务集): 一组关联的,但相互之间没有Shuffle依赖关系的Task集合。
3. Stage(调度阶段):一个TaskSet所对应的调度阶段。每个Job会根据RDD的宽依赖关系被切分很多Stage,每个Stage中包含一个TaskSet。
4. Job(作业): 由Action算子触发生成的一个或多个Stage组成的计算作业。
5. Application:用户编写的Spark的应用程序,由一个或多个Job组成。提交到Spark之后,Spark为Application分配资源,将程序转换并执行。
6. DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler。
7. TaskScheduler:将Taskset提交给Worker node集群运行并返回结果。