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)測試運行