一,下载Spark
使用 Spark 的第一步是下载和解压缩。我们先从下载预编译版本的 Spark 开始。访问 http://spark.apache.org/downloads.html ,进行spark安装包的下载。本文使用版本为:spark-2.4.3-bin-hadoop2.7.tgz
二,安装Spark
cd ~
tar -xf spark-2.4.3-bin-hadoop2.7.tgz
cd spark-2.4.3-bin-hadoop2.7
ls
在 tar 命令所在的那一行中,x 标记指定 tar 命令执行解压缩操作,f 标记则指定压缩包的文件名。ls 命令列出了 Spark 目录中的内容。我们先来粗略地看一看 Spark 目录中的一些比较重要的文件及目录的名字和作用。
• README.md
包含用来入门 Spark 的简单的使用说明。
• bin
包含可以用来和 Spark 进行各种方式的交互的一系列可执行文件,比如本章稍后会讲到的 Spark shell。
• core、streaming、python……
• 包含Spark项目主要组件的源代码。
• examples
包含一些可以查看和运行的 Spark 程序,对学习 Spark 的 API 非常有帮助。
三,SparkShell介绍
Spark 带有交互式的 shell,可以作即时数据分析。如果你使用过类似 R、Python、Scala 所提供的 shell,或操作系统的 shell(例如 Bash 或者 Windows 中的命令提示符),你也会对Spark shell 感到很熟悉。然而和其他 shell 工具不一样的是,在其他 shell 工具中你只能使用单机的硬盘和内存来操作数据,而 Spark shell 可用来与分布式存储在许多机器的内存或者硬盘上的数据进行交互,并且处理过程的分发由 Spark 自动控制完成。
bin/spark-shell
当启动一个Spark shell时,Spark shell已经预先创建好一个SparkContext对象,其变量名为“sc”。如果你再新建一个SparkContext对象,那么它将不会运行下去。我们可以使用–master标记来指定以何种方式连接集群,也可以使用–jars标记添加JAR包到classpath中,多个JAR包之间以逗号分隔;还可以使用–packages标记添加Maven依赖到shell会话中,多个依赖间用逗号隔开。另外通过–repositories标记添加外部的repository。下面语句在本地模式下,使用四核运行spark-shell:
./bin/spark-shell --master local[4]
四,快速入门Demo
本教程将进行wordCount的demo快速入门,首先需要创建maven工程并引入scala语言的支持。
scala版本的wordcount
package com.t9vg
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args:Array[String]):Unit={
val conf = new SparkConf().setMaster("local").setAppName("WordCount")
val sc = new SparkContext(conf)
val text = sc.textFile("quickStart/src/main/resources/1.txt")
val words = text.flatMap(line =>line.split(","))//?
val pairs = words.map(word =>(word,1))//?
val result = pairs.reduceByKey(_+_)
val sorted = result.sortByKey(false);
sorted.foreach(x => println(x));
}
}
Java版本的wordCount
package com.t9vg.rdd;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;
import java.util.Arrays;
public class WordCount {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setMaster("local").setAppName("WorldCount");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> textFile = sc.textFile("quickStart/src/main/resources/1.txt");
JavaPairRDD<String, Integer> counts = textFile
.flatMap(s -> Arrays.asList(s.split(",")).iterator())
.mapToPair(word -> new Tuple2<>(word, 1))
.reduceByKey((a, b) -> a + b);
counts.foreach(x-> System.out.println(x.toString()));
sc.close();
}
}