1. 程式人生 > >Apache Spark漸進式學習教程(三): Spark單節點安裝和快速入門Demo

Apache Spark漸進式學習教程(三): Spark單節點安裝和快速入門Demo

一,下載Spark

使用 Spark 的第一步是下載和解壓縮。我們先從下載預編譯版本的 Spark 開始。訪問 http://spark.apache.org/downloads.html ,進行spark安裝包的下載。本文使用版本為:spark-2.4.3-bin-hadoop2.7.tgz

二,安裝Spark

cd ~
tar -xf spark-2.4.3-bin-hadoop2.7.tgz
cd spark-2.4.3-bin-hadoop2.7
ls

在 tar 命令所在的那一行中,x 標記指定 tar 命令執行解壓縮操作,f 標記則指定壓縮包的檔名。ls 命令列出了 Spark 目錄中的內容。我們先來粗略地看一看 Spark 目錄中的一些比較重要的檔案及目錄的名字和作用。
• README.md
包含用來入門 Spark 的簡單的使用說明。
• bin
包含可以用來和 Spark 進行各種方式的互動的一系列可執行檔案,比如本章稍後會講到的 Spark shell。
• core、streaming、python……
• 包含Spark專案主要元件的原始碼。
• examples
包含一些可以檢視和執行的 Spark 程式,對學習 Spark 的 API 非常有幫助。

三,SparkShell介紹

Spark 帶有互動式的 shell,可以作即時資料分析。如果你使用過類似 R、Python、Scala 所提供的 shell,或作業系統的 shell(例如 Bash 或者 Windows 中的命令提示符),你也會對Spark shell 感到很熟悉。然而和其他 shell 工具不一樣的是,在其他 shell 工具中你只能使用單機的硬碟和記憶體來操作資料,而 Spark shell 可用來與分散式儲存在許多機器的記憶體或者硬碟上的資料進行互動,並且處理過程的分發由 Spark 自動控制完成。

bin/spark-shell

當啟動一個Spark shell時,Spark shell已經預先建立好一個SparkContext物件,其變數名為“sc”。如果你再新建一個SparkContext物件,那麼它將不會執行下去。我們可以使用–master標記來指定以何種方式連線叢集,也可以使用–jars標記新增JAR包到classpath中,多個JAR包之間以逗號分隔;還可以使用–packages標記新增Maven依賴到shell會話中,多個依賴間用逗號隔開。另外通過–repositories標記新增外部的repository。下面語句在本地模式下,使用四核執行spark-shell:

./bin/spark-shell --master local[4]

四,快速入門Demo

本教程將進行wordCount的demo快速入門,首先需要建立maven工程並引入scala語言的支援。

scala版本的wordcount

package com.t9vg

import org.apache.spark.{SparkConf, SparkContext}

object WordCount {

  def main(args:Array[String]):Unit={
    val conf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(conf)
    val text = sc.textFile("quickStart/src/main/resources/1.txt")
    val words = text.flatMap(line =>line.split(","))//?
    val pairs = words.map(word =>(word,1))//?
    val result = pairs.reduceByKey(_+_)
    val sorted = result.sortByKey(false);
    sorted.foreach(x => println(x));
  }
}

Java版本的wordCount

package com.t9vg.rdd;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import scala.Tuple2;

import java.util.Arrays;

public class WordCount {
    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setMaster("local").setAppName("WorldCount");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> textFile = sc.textFile("quickStart/src/main/resources/1.txt");
        JavaPairRDD<String, Integer> counts = textFile
                .flatMap(s -> Arrays.asList(s.split(",")).iterator())
                .mapToPair(word -> new Tuple2<>(word, 1))
                .reduceByKey((a, b) -> a + b);
        counts.foreach(x-> System.out.println(x.toString()));
        sc.close();
    }
}

專案原始碼地址:

https://github.com/JDZW2018/learningSpark.git

轉載請註明出處。

歡迎加入 巨匠IT-Java/Scala/大資料/SpringCloud 技術討論qq群:854150511