Spark開發入門與實踐(一)

Spark開發入門與實踐(一)

(一)Spark簡介

  Spark於2009年誕生於加州大學伯克利分校AMPLab。目前,已經成爲Apache軟件基金會旗下的頂級開源項目。
  相對於MapReduce上的批量計算、迭代型計算以及基於Hive的SQL查詢,Spark可以帶來上百倍的性能提升。目前Spark的生態系統日趨完善,Spark SQL的發佈、Hive on Spark項目的啓動以及大量大數據公司對Spark全棧的支持,讓Spark的數據分析範式更加豐富。

(二)Windows環境開發

1、安裝JDK1.7+

(1)JDK下載

http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-windows-x64.exe

(2)配置環境變量

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_111
path=%JAVA_HOME%\bin;

(3)JDK環境檢測

image

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測試環境

image

3、安裝Windows Hadoop環境:

(1)下載文件

下載地址:https://github.com/steveloughran/winutils
在C盤新建目錄:C:\hadoop-2.8.1\bin
解壓文件到目錄:
image

(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
image

(三)安裝Eclipse

1、下載Eclipse for scala

下載地址:
http://downloads.typesafe.com/scalaide-pack/4.7.0-vfinal-oxygen-212-20170929/scala-SDK-4.7.0-vfinal-2.12-win32.win32.x86_64.zip

2、安裝Eclipse

解壓運行即可:
image

3、Eclipse配置

(1)安裝Maven腳手架插件

原生的Maven插件在Eclipse中,不能應用到scala項目。因此需要額外下載一個針對scala的eclipse maven插件。
image

image
添寫:
Catalog File=http://repo1.maven.org/maven2/archetype-catalog.xml
Description:scala maven

(2) Maven設置

image
設置Maven配置文件,用於指向已設定的本地倉庫:
iamge

4、創建Maven項目

image

image
選擇配置Scala的腳手架:
image
添寫Group ID與ArtifactID:
image

image

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

image

image

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

image
image

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章