Spark(二)Spark安装入门
目录:
2、Spark安装入门
2.1、Spark安装部署
2.1.1、Spark下载:
下载地址:http://spark.apache.org/downloads.html
为了方便也可以进入到家目录下使用命令下载:
[[email protected] ~]$ wget https://d3kbcqa49mib13.cloudfront.net/spark-2.2.0-bin-hadoop2.6.tgz
2.1.2、安装前准备:
文件解压与改名:
[[email protected] ~]$ tar –zxvf spark-2.2.0-bin-hadoop2.6.tgz –C ./spark-2.2.0
2.1.3、配置环境变量:
vi /etc/profile
2.1.4、配置Spark环境:
打开spark-2.2.0文件夹:
[[email protected] spark-2.2.0]$ cd spark-2.2.0
此处需要配置的文件为两个:
spark-env.sh和slaves
首先我们把缓存的文件spark-env.sh.template改为spark识别的文件spark-env.sh
[[email protected] spark-2.2.0]$ cp conf/spark-env.sh.template conf /spark-env.sh
1、修改spark-env.sh文件:
[[email protected] spark-2.2.0]$ vi conf/spark-env.sh
在末尾加上:
变量说明:
—JAVA_HOME:Java安装目录
—SCALA_HOME:Scale安装目录
—SPARK_MASTER_IP:spark集群的Master节点的ip地址
—SPARK_WORKER_MEMORY:每个worker节点能够最大分配给exectors的内存大小
2、修改slaves文件:
[[email protected] spark-2.2.0]$ vi conf/slaves.template
由于是单机版,可直接在末尾加上localhost
2.1.5、启动Spark集群
1、启动Hadoop的HDFS文件系统:
start-dfs.sh
启动之后使用jps命令可以查看到rdb1已经启动了namenode,说明Hadoop的HDFS文件系统已经启动了。
2、启动Spark:
因为hadoop/sbin以及spark/sbin均配置到了系统的环境中,它们同一个文件夹下存在同样的start-all.sh文件。最好是打开spark-2.2.0,在文件夹下面打开该文件。
./sbin/start-all.sh
成功打开后使用jps在rdb1单节点上可以查看新开启的Master和Worker进程。
成功打开Spark集群之后可以进入Spark的WebUI界面,可以通过:SparkMaster_IP:8080访问,
可见有一个正在运行的Worker节点。
3、打开Spark-shell
使用spark-shell便可打开Spark的shell。
成功打开后,我们也可以通过SparkMaster_IP:4040访问WebUI查看当前执行的任务。
2.2、Spark中的Scale的shell
Spark带有交互式的shell,可以作即时数据分析。Spark shell和其他的shell工具不一样的是,在其他shell工具中你只能使用单机的硬盘和内存来操作数据,而Spark shell可用来与分布式存储在许多机器的内存或者硬盘上的数据进行交互,并且处理过程的分发由Spark自动控制完成。
由于 Spark 能够在工作节点上把数据读取到内存中,所以许多分布式计算都可以在几秒钟之内完成,哪怕是那种在十几个节点上处理 TB 级别的数据的计算。这就使得一般需要在shell 中完成的那些交互式的即时探索性分析变得非常适合 Spark。Spark 提供 Python 以及Scala 的增强版 shell,支持与集群的连接。
打开Scale版本的shell:bin/spark-shell。
在 Spark 中,我们通过对分布式数据集的操作来表达我们的计算意图,这些计算会自动地在集群上并行进行。这样的数据集被称为弹性分布式数据集(resilient distributed dataset),简称 RDD。RDD 是 Spark 对分布式数据和计算的基本抽象
首先使用shell从本地文件中创建一个RDD来做一些简单的即时统计。
//Scale行数统计
2.3、Spark核心概念简介
从上层来看,每个Spark应用都由一个驱动器程序(driver program)来发起集群上的并行操作。驱动器程序包含应用的main函数,并且定义了集群上的分布式数据集,还对这些数据集应用了相关操作。在前面的例子里,实际的驱动器程序就是Spark shell本身,你只需要输入想要运行的操作就可以了。
驱动器程序同一个SparkContext对象来访问Spark。这个对象代表对计算集群的连接。shell启动时已经自动创建了一个SparkContext对象,是一个叫做sc的变量。
查看变量sc:
一旦有了SparkContext,就可以用它来创建RDD。调用sc.textFile()来创建一个代表文件中各行文本的RDD。我们可以在这些行上进行各种操作,比如count()。
要执行这些操作,驱动器程序一般要管理多个执行器(executor)节点。比如,我们要在集群上运行count()操作,要么不同的节点会统计文件的不同部分的行数。由于我们刚才是在本地模式下运行Spark shell,因此所有的工作会在单节点上执行,但你可以将这个shell连接到集群上来进行并行的数据分析。
spark如何在集群上运行:
最后,我们有很多用来传递函数的API,可以将对应操作运行在集群上。比如,可以扩展我们的README示例,筛选出文件中包含某个特定单词的行。以“Python”这个单词为例,Scale版本例子如下:
Spark API最神奇的地方就在于像filter这样基于函数的操作也会在集群上并行执行。也就是说,Spark会自动将函数(比如line.contains(“Python”))发到各个执行器节点上。这样就可以在单一的驱动器程序中编程,并且代码自动运行在多个节点上。
2.4、独立应用
这与shell中使用的区别在于需要自行初始化SparkContext。
连接Spark过程在各语言中并不一样。在Java和Scale中,只需要给你的应用添加一个对于spark-core的maven依赖。
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-mllib_2.10 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
2.4.1、初始化SparkContext
一旦完成了应用与Spark的连接,接下来就需要在你的程序中导入Spark包并且创建SparkContext。你可以通过先创建一个SparkConf对象来配置你的应用。然后基于这个SparkConf创建一个SparkContext对象。
在Java中初始化Spark:
SparkConf conf = new SparkConf().setMaster(“local”).setAppName(“My App”);
JavaSparkContext sc = new JavaSparkContext(conf);
创建SparkContext只需要传递两个参数:
集群URL:告诉Spark如何连接到集群上。
应用名:当连接到集群时,这个值可以帮助我们在集群管理器的用户界面中找到我们的应用。
在初始化SparkContext之后,可以使用我们前面展示的所有方法(比如利用文本文件)来创建RDD并操作它们。
最后,关闭Spark可以调用SparkContext的stop()方法,或者直接退出应用(比如System.exit(0))。
2.4.2、构建独立应用
Java版本单词数统计应用: