Centos7下Spark安装
电脑系统:macOS 10.15.4
虚拟机软件:Parallels Desktop14
操作系统:CentOS 7
JDK版本:jdk1.8.0_162
Hadoop版本:hadoop-2.6.0-cdh5.9.3
Scala版本:scala-2.11.12
Spark版本:spark-2.4.6-bin-hadoop2.6
第一步:软件下载或编译
首先第一步先找到spark的下载地址:
http://spark.apache.org/downloads.html
解释:这里我选择的是spark的2.4.6的版本,原因是我的Hadoop安装的是2.6的版本,这里也可以自己的配置去选择。如果是选择2.4.6版本的话,则官网是给我们提供编译好的版本就不需要我们自己再编译。如上图所示,spark2.4.6均提供好Hadoop2.6和2.7的编译版本,但是低于2.6的版本就是需要我们自己下载源码再去编译。同时也要注意Scala的版本。
第二步:安装软件
(1)上传文件
将本机的安装包上传到虚拟机node1,上传方式:
scp 本机的文件绝对路径 caizhengjie@10.211.55.49:/opt/Hadoop
(2)解压文件
上传成功之后需要对文件赋予权限
chmod u+x spark-2.4.6-bin-hadoop2.6.tgz
解压文件:
tar -zxvf spark-2.4.6-bin-hadoop2.6.tgz
创建软链接:
ln -s spark-2.4.6-bin-hadoop2.6 spark
第三步:Spark的本地模式运行测试
进入spark目录下,这是开启spark
[caizhengjie@node1 spark]$ bin/spark-shell
这是一个spark的本地模式的运行测试
下面我们做一个词频统计:
在/opt/datas
目录下,新建一个stu.txt
文件,内容如下:
java python hadoop spring python hadoop java c c++ hbase spark scala scala python java linux unix java php mysql hive hue
scala> val rdd = spark.read.textFile("/opt/datas/stu.txt")
rdd: org.apache.spark.sql.Dataset[String] = [value: string]
统计行数
scala> rdd.count()
res2: Long = 6
以数组的方式返回文件中所有的单词
scala> val lines = rdd.flatMap(x => x.split(" ")).collect
lines: Array[String] = Array(java, python, hadoop, spring, python, hadoop, java, c, c++, hbase, spark, scala, scala, python, java, linux, unix, java, php, mysql, hive, hue)
给数组中的每个数据生成元祖对
scala> val lines = rdd.flatMap(x => x.split(" ")).map(x => (x,1)).collect
lines: Array[(String, Int)] = Array((java,1), (python,1), (hadoop,1), (spring,1), (python,1), (hadoop,1), (java,1), (c,1), (c++,1), (hbase,1), (spark,1), (scala,1), (scala,1), (python,1), (java,1), (linux,1), (unix,1), (java,1), (php,1), (mysql,1), (hive,1), (hue,1))
给数据分组统计
scala> val lines = rdd.flatMap(x => x.split(" ")).map(x => (x,1)).rdd.reduceByKey((a,b) => (a+b)).collect
lines: Array[(String, Int)] = Array((hbase,1), (scala,2), (spark,1), (hive,1), (hadoop,2), (php,1), (c++,1), (python,3), (mysql,1), (linux,1), (java,4), (hue,1), (spring,1), (c,1), (unix,1))
给数据分组统计并排序
scala> val lines = rdd.flatMap(x => x.split(" ")).map(x => (x,1)).rdd.reduceByKey((a,b) => (a+b)).map(x => (x._2,x._1)).sortByKe
lines: Array[(Int, String)] = Array((1,hbase), (1,spark), (1,hive), (1,php), (1,c++), (1,mysql), (1,linux), (1,hue), (1,spring), (1,c), (1,unix), (2,scala), (2,hadoop), (3,python), (4,java))
第四步:Spark服务WEB监控页面
在启动spark-shell的时候,我们会发现有web访问的网址,端口号默认是4040
但是去浏览器查看的时候,要输入http://IP:4040
到此为止,spark的单节点的安装与测试到这里就已经结束了!最大的注意点就是spark的版本问题。
第五步:Spark核心概念简介
现在你已经用shell运行了你的第一段Spark程序,是时候对Spark编程作更细致的了解了。
从上层来看,每个 Spark 应用都由一个 驱动器程序 (driver program)来发起集群上的各种 并行操作。驱动器程序包含应用的 main 函数,并且定义了集群上的分布式数据集,还对这 些分布式数据集应用了相关操作。在前面的例子里,实际的驱动器程序就是 Spark shell 本 身,你只需要输入想要运行的操作就可以了。
驱动器程序通过一个 SparkContext 对象来访问 Spark。 这个对象代表对计算集群的一个连接。 shell 启动时已经自动创建了一个 SparkContext 对象,是一个叫作 sc 的变量。一旦有了 SparkContext, 你就可以用它来创建 RDD。我们可以在这些行上进行各种操 作,比如 count() 。
要执行这些操作,驱动器程序一般要管理多个 执行器 (executor)节点。比如,如果我们在 集群上运行 count() 操作,那么不同的节点会统计文件的不同部分的行数。由于我们刚才是 在本地模式下运行 Spark shell, 因此所有的工作会在单个节点上执行,但你可以将这个 shell 连接到集群上来进行并行的数据分析。下图展示了 Spark 如何在一个集群上运行。