spark的三种部署方式:loca、standalone、yarn;分别通过例子介绍这几种模式在区别,例子最好是通过IO流的流向的方式讲解。
时间: 2024-02-12 14:03:45 浏览: 89
1. local模式:在本地运行一个Spark应用程序。在这种模式下,Spark应用程序只能使用本地计算机的资源,无法与其他计算机协同工作。local模式通常用于开发和调试Spark应用程序。
例如,假设我们有一个文本文件,需要对其中的单词进行计数。在local模式下,我们可以使用以下代码:
```scala
import org.apache.spark._
import org.apache.spark.SparkContext._
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("WordCount").setMaster("local")
val sc = new SparkContext(conf)
val textFile = sc.textFile("input.txt")
val wordCount = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
wordCount.saveAsTextFile("output.txt")
}
}
```
在这个例子中,我们使用`setMaster("local")`来指定Spark应用程序在local模式下运行,只使用本地计算机的资源。
2. standalone模式:在一个独立的Spark集群中运行一个Spark应用程序。在这种模式下,Spark应用程序可以使用整个集群的资源。Spark应用程序可以连接到Spark集群的Master节点,从Master节点获取资源,然后在Worker节点上运行任务。
例如,假设我们有一个文本文件,需要对其中的单词进行计数。在standalone模式下,我们可以使用以下代码:
```scala
import org.apache.spark._
import org.apache.spark.SparkContext._
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("WordCount").setMaster("spark://master:7077")
val sc = new SparkContext(conf)
val textFile = sc.textFile("hdfs://input.txt")
val wordCount = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
wordCount.saveAsTextFile("hdfs://output.txt")
}
}
```
在这个例子中,我们使用`setMaster("spark://master:7077")`来指定Spark应用程序在standalone模式下运行,连接到Spark集群的Master节点。我们还使用`hdfs://`来指定输入和输出文件的路径,表示这些文件存储在HDFS分布式文件系统中。
3. yarn模式:在一个YARN集群中运行一个Spark应用程序。在这种模式下,Spark应用程序可以使用整个YARN集群的资源。Spark应用程序可以连接到YARN集群的ResourceManager节点,从ResourceManager节点获取资源,然后在NodeManager节点上运行任务。
例如,假设我们有一个文本文件,需要对其中的单词进行计数。在YARN模式下,我们可以使用以下代码:
```scala
import org.apache.spark._
import org.apache.spark.SparkContext._
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("WordCount")
val sc = new SparkContext(conf)
val textFile = sc.textFile("hdfs://input.txt")
val wordCount = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
wordCount.saveAsTextFile("hdfs://output.txt")
}
}
```
在这个例子中,我们没有使用`setMaster()`来指定Spark应用程序在YARN模式下运行,而是将Spark应用程序打包成一个JAR文件,然后通过`spark-submit`命令提交作业到YARN集群。我们还使用`hdfs://`来指定输入和输出文件的路径,表示这些文件存储在HDFS分布式文件系统中。
阅读全文