–master
这个参数表示当前Spark Shell要连接到哪个master,如果是local[*],就是使用本地模式启动spark-shell,其中中括号内的型号表示需要使用几个CPU核心(core),也就是启动几个线程模拟spark集群。
–jars
这个参数用于把相关的JAR包添加到CLASSPATH中,如果有多个jar包,可以使用逗号分隔符连接它们。
比如,要采用本地模式,在4个CPU核心上运行spark-shell
$ cd /usr/local/spark
$ ./bin/spark-shell --master local[4]
或者,可以在CLASSPATH中添加code.
Spark是Apache Hadoop生态系统中的一个快速、通用且可扩展的大数据处理框架,它支持使用Scala、Java、Python和R等多种编程语言编写分布式计算应用。在本文中,我们将深入探讨Scala中Spark的基础知识,特别是关于Spark命令参数和独立应用程序的创建。
我们来看一个关键的命令行参数`--master`。此参数用于指定Spark应用程序应该连接到哪个Master节点。如果设置为`local[*]`,那么Spark将在本地模式下运行,这里的`*`代表你想使用的CPU核心数量。例如,如果你有4个CPU核心,你可以运行`./bin/spark-shell --master local[4]`来启动Spark Shell,并使用这4个核心模拟Spark集群。
另一个重要参数是`--jars`,它允许你指定需要添加到类路径(CLASSPATH)中的JAR包。如果你有多个JAR包,可以用逗号分隔它们。例如,除了使用本地模式和4个核心,你还可以添加`code.jar`,命令如下:
```bash
./bin/spark-shell --master local[4] --jars code.jar
```
Spark支持多种部署模式,包括:
1. **Local模式**:在本地单机上运行,适合开发和测试。
2. **Standalone模式**:使用Spark自身的集群管理器,适用于小型或中型集群。
3. **YARN模式**:集成Hadoop的资源管理器YARN,适合大型集群。
4. **Mesos模式**:可以在Mesos集群上运行,提供跨平台的资源调度。
编写Spark独立应用程序通常涉及使用构建工具,如Scala的`sbt`或Java的Maven。对于Scala程序,你需要使用`sbt`来编译和打包。以下是一个典型的项目结构:
```
/usr/local/spark/mycode/
|-- src
| `-- main
| `-- scala
| `-- SimpleApp.scala
`-- simple.sbt
```
在`SimpleApp.scala`中编写你的Spark应用程序,然后使用`sbt package`命令打包,生成的JAR包通常位于`~/.ivy2/cache`或项目指定的`target`目录下。
提交Spark应用程序到集群或本地运行,使用`spark-submit`命令,例如:
```bash
./bin/spark-submit \
--class "SimpleApp" \
--master local[2] \
--deploy-mode client \
~/sparkapp/target/scala-2.11/simple-project_2.11-1.0.jar
```
在上述示例中,`--class`指定了程序入口点,`--master`定义了运行环境,`--deploy-mode`设定了部署模式(client或cluster),而`application-arguments`是传递给主类的方法参数。
这里给出一个简单的WordCount例子:
```scala
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object WordCount {
def main(args: Array[String]) {
val inputFile = "file:///usr/local/spark/mycode/wordcount/word.txt"
val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
val sc = new SparkContext(conf)
val textFile = sc.textFile(inputFile)
val wordCount = textFile.flatMap(line => line.split(" ").map(word => (word, 1)))
.reduceByKey(_ + _)
wordCount.foreach(println)
}
}
```
这个程序读取文本文件,统计每个单词出现的次数,并打印结果。
理解并熟练使用Spark命令参数以及编写独立应用程序是成为Spark开发者的基础,这将帮助你更高效地处理大规模数据。掌握这些知识后,你可以进一步探索Spark的高级特性,如DataFrame/Dataset API、Spark SQL、Spark Streaming等,从而提升大数据处理的能力。