1. 安装Spark
2. 在Spark shell中运行代码
Spark Shell本身就是一个Driver,Driver包mian()和分布式数据集。
启动Spark Shell 命令:
./bin/spark-shell --master <master-url>
Spark的运行模式取决于传递给SparkContext的Master URL的值,可以有如下选择:
1. local 使用一个Worker线程来本地化运行Spark,非并行。默认模式。
2. local[*] 使用逻辑CPU个数数量的线程来本地化运行Spark。
3. local[K] 使用K个Worker线程来本地化运行Spark(理想情况下K应该根据运行机器的CPU核数设定)。
4. spark://HOST:PORT 连接到指定的Spark standalone master,默认端口7077。
5. yarn-client 以客户端模式连接Yarn集群,集群位置在HADOOP_CONF_DIR环境变量中。
6. yarn-cluster 以集群模式连接Yarn集群。
7. mesos://HOST:PORT 连接到指定的Mesos集群,默认端口5050。
在Spark中采用本地模式启动Spark Shell命令主要包括以下参数:
--master 表示要连接的master,如local[*]表示使用本地模式,其中*表示需要使用几个CPU Core(启动几个线程)模拟Spark集群;
--jars 用于把相关的jar包添加到CLASSPATH中,多个jar包可使用“,”连接。
比如要采用本地模式,在4个CPU核心上运行spark-shell
cd /usr/local/spark
./bin/spark-shell --master local[4] --jars code.jar
# 获取完整的选项列表
./bin/spark-shell --help
退出交互环境 :quit
3. 编写Spark独立应用程序
3.1 不同语言应用程序的编译方式
1. Scala编写的应用程序需要使用sbt或Maven进行编译打包;
2. Java编写的应用程序使用Maven编译打包;
3. Python编写的应用程序通过spark-submit直接提交;
3.2 安装sbt
sbt是一款Spark用来对Scala编写的程序进行打包的工具,Spark没有自带sbt,需下载安装。
3.3 scala应用程序
创建代码目录
/usr/local/spark/mycode/src/mian/scala
test.scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]): Unit = {
val file = "file:///usr/local/spark/11.log"
val conf = new SparkConf()
.setMaster("local[*]")
.setAppName("Simple Application")
val sc = new SparkContext(conf)
val data = sc.textFile(file, 2).cache()
val num_a = data.filter(_.contains("a")).count()
val num_b = data.filter(_.contains("b")).count()
println("Line with a:%s, b:%s".format(num_a, num_b))
}
}
3.4 使用sbt打包
第一次编译时,需在./sparkapp文件中新建文件simple.sbt(名字可以随便起,与工程无关,有一个以后就可以一直用了),声明该独立应用程序的信息以及与Spark的依赖关系。
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core"%"2.1.0"
第一次运行可能很慢,需下载大量依赖,耐心等待。
运行前先执行检查
打包jar包
/usr/local/sbt/sbt package
3.5 通过spark-submit 运行
./bin/spark-submit
--class <mian-class> // 应用程序入口点
--master <master-url>
--deploy-mode <deploy-mode>
... # other options //其他参数
<application-jar>
[application-arguments] // 传递给主类的主方法的参数
运行
/usr/local/spark/bin/spark-submit --class "SimpleAPP" ~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
简化输出结果:
/usr/local/spark/bin/spark-submit
--class "SimpleAPP"
~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar 2>&1
| grep "Lines with a:"
4. WordCount
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext_
import org.apache.spark.SparkConf
object SimpleApp {
def main(args: Array[String]): Unit = {
val file = "file:///usr/local/spark/11.log"
val conf = new SparkConf()
.setAppName("Simple Application")
.setMaster("local[2]")
val sc = new SparkContext(conf)
val data = sc.textFile(file)
val result = data.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey((a, b) => a+b)
result.foreach(println)
}
}
5. 使用Intellij IDEA编写Spark应用程序
1. 安装idea
2. 在idea中安装Scala插件,并配置JDK、Scala SDK
3. 创建Maven工程文件
4. 编写代码
5. 编译打包程序
参考: http://dblab.xmu.edu.cn/blog/1327/
6. Spark集群环境搭建
6.1 集群概况
使用3台机器(节点),1台作为Master节点,另外两台作为Slave节点(Woker节点),主机名分别为Slave01、Slave02。
6.2 搭建Hadoop集群环境
Spark+HDFS运行架构
参考: http://dblab.xmu.edu.cn/blog/1177-2/
6.3 安装Spark
6.3.1 节点配置
在Master节点上,下载Spark安装包
1. 配置slaves文件;
2. 配置spark-env.sh文件;
3. 将Master主机上的/usr/local/spark文件夹复制到各个节点上;
6.3.2 启动集群
1. 首先启动Hadoop集群;
2. 启动Master节点;
3. 启动所有Slave节点。
在Master主机浏览器上访问 http://master:8080,查看Spark独立集群管理器的集群信息。
6.3.3 关闭Spark集群
1. 关闭Master节点;
2. 关闭Worker节点;
3. 关闭Hadoop集群。
7. 在集群上运行Spark应用程序
7.1 采用独立集群管理器
7.1.1 在集群中运行应用程序jar包
sprak自带样例,计算pai值
/usr/local/spark/bin/spark-submit --class org.apache.spark.examples.SparkPi
--master spark://master:7077 examples/jars/spark-examples_2.11-2.0.2.jar 100 2>&1
| grep "PI is roughly"
7.1.2 在集群中运行spark-shell
用spark-shell连接到独立集群管理器
bin/spark-shell --master spark://master:7077
在独立集群管理Web界面查看应用的运行情况 http://master:8080
7.2 采用Haoop YARN管理器
7.2.1 在集群中运行应用程序jar包
bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn-cluster examples/jars/spark-examples_2.11-2.0.2.jar
在浏览器中打开运行追踪URL,点击Logs,再点击stdout,查看结果。
7.2.2 在集群中运行spark-shell
bin/spark-shell --master yarn
查看运行结果:http://master:8080/cluster