Spark开发入门与实践(一)
(一)Spark简介
Spark于2009年诞生于加州大学伯克利分校AMPLab。目前,已经成为Apache软件基金会旗下的顶级开源项目。
相对于MapReduce上的批量计算、迭代型计算以及基于Hive的SQL查询,Spark可以带来上百倍的性能提升。目前Spark的生态系统日趋完善,Spark SQL的发布、Hive on Spark项目的启动以及大量大数据公司对Spark全栈的支持,让Spark的数据分析范式更加丰富。
(二)Windows环境开发
1、安装JDK1.7+
(1)JDK下载
(2)配置环境变量
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_111
path=%JAVA_HOME%\bin;
(3)JDK环境检测
2、安装Scala
(1)Scala下载
http://www.scala-lang.org/download/
安装:scala-2.12.4.msi 到C:\scala
(2)配置环境变量
SCALA_HOME=C:\scala
在path中添加:
path=%SCALA_HOME%\bin;
(3)Scala测试环境
3、安装Windows Hadoop环境:
(1)下载文件
下载地址:https://github.com/steveloughran/winutils
在C盘新建目录:C:\hadoop-2.8.1\bin
解压文件到目录:
(2)配置环境变量
HADOOP_HOME=C:\hadoop-2.8.1
path=%HADOOP_HOME%\bin;
4、安装Windows Spark环境
(1)下载地址:
http://mirrors.shuosc.org/apache/spark/spark-2.2.1/spark-2.2.1-bin-hadoop2.7.tgz
(2)解压文件
解压文件到C:\spark-2.2.1-bin-hadoop2.7
(3)配置环境变量
SPARK_HOME=C:\spark-2.2.1-bin-hadoop2.7
path=%SPARK_HOME%\bin;
(4)检测环境变量
在CMD下执行:
C:>spark-shell
(三)安装Eclipse
1、下载Eclipse for scala
2、安装Eclipse
解压运行即可:
3、Eclipse配置
(1)安装Maven脚手架插件
原生的Maven插件在Eclipse中,不能应用到scala项目。因此需要额外下载一个针对scala的eclipse maven插件。
添写:
Catalog File=http://repo1.maven.org/maven2/archetype-catalog.xml
Description:scala maven
(2) Maven设置
设置Maven配置文件,用于指向已设定的本地仓库:
4、创建Maven项目
选择配置Scala的脚手架:
添写Group ID与ArtifactID:
5、添加Maven依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<scala.version>2.11.2</scala.version>
<scala.version.tools>2.11</scala.version.tools>
<spark.version>2.7.1</spark.version>
</properties>
<dependencies>
<!-- scala语言 -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalacheck</groupId>
<artifactId>scalacheck_${scala.version.tools}</artifactId>
<version>1.11.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_${scala.version.tools}</artifactId>
<version>2.2.0</version>
<scope>test</scope>
</dependency>
<!-- spark核心包 -->
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>${spark.version}</version>
</dependency>
<!-- streaming包 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<!-- sql包 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.1</version>
</dependency>
<!-- hive包 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.2.1</version>
</dependency>
<!-- mllib包 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>
5、编写代码
(1)新建Object
(2)代码编写:
package com.xtwy
//导入scala包
import org.apache.spark.{SparkConf, SparkContext}
/**
* 对数组中的每个元素乘以3 ,再过滤出来数组中大于10 的元素,然后对数组求和。
*/
object SparkScalaTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("mySpark")
//setMaster("local") 本机的spark就用local,远端的就写ip
//如果是打成jar包运行则需要去掉 setMaster("local")因为在参数中会指定。
conf.setMaster("local")
val sc = new SparkContext(conf)
//_为占位符
val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6)).map(_ * 3)
val mappedRDD = rdd.filter(_ > 10).collect()
//输出大于10的元素
for (arg <- mappedRDD)
print(arg + " ")
println()
//对集合求和
println("求和结果"+rdd.reduce(_ + _))
}
}
(3)测试运行