离线轻量级大数据平台Spark之单机部署及Java开发
1、Spark平臺基本介紹
Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and PeopleLab) 開發,可用來構建大型的、低延遲的數據分析應用程序。
Spark 是在Scala 語言中實現的,它將 Scala 用作其應用程序框架。Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。
Spark 是一種與Hadoop 相似的開源集群計算環境,不同之處使是Spark 啟用了內存分布數據集,除了能夠提供交互式查詢外,它還可以優化迭代工作負載。盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoo 文件系統中并行運行。通過名為 Mesos 的第三方集群框架可以支持此行為。
1)Spark集群計算架構
Spark 是為集群計算中的特定類型的工作負載而設計,即那些在并行操作之間重用工作數據集(比如機器學習算法)的工作負載。為了優化這些類型的工作負載,Spark 引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲。
Spark 還引進了名為彈性分布式數據集 (RDD) 的抽象。RDD 是分布在一組節點中的只讀對象集合。這些集合是彈性的,如果數據集一部分丟失,則可以對它們進行重建。重建部分數據集的過程依賴于容錯機制,該機制可以維護“血統”(即充許基于數據衍生過程重建部分數據集的信息)。RDD 被表示為一個 Scala 對象,并且可以從文件中創建它;一個并行化的切片(遍布于節點之間);另一個 RDD 的轉換形式;并且最終會徹底改變現有 RDD 的持久性,比如請求緩存在內存中。
Spark 中的應用程序稱為驅動程序,這些驅動程序可實現在單一節點上執行的操作或在一組節點上并行執行的操作。與 Hadoop 類似,Spark 支持單節點集群或多節點集群。對于多節點操作,Spark 依賴于 Mesos 集群管理器。Mesos 為分布式應用程序的資源共享和隔離提供了一個有效平臺。該設置充許 Spark 與 Hadoop 共存于節點的一個共享池中。
2)Spark編程模式
ResilientDistributed Datasets (RDD,)??彈性分布式數據集。 RDD是只讀的、分區記錄的集合。驅動程序可以在數據集上執行兩種類型的操作:動作和轉換。動作會在數據集上執行一個計算,并向驅動程序返回一個值;而轉換會從現有數據集中創建一個新的數據集。動作的示例包括執行一個 Reduce 操作(使用函數)以及在數據集上進行迭代(在每個元素上運行一個函數,類似于Map 操作)。轉換示例包括 Map 操作和 Cache 操作(它請求新的數據集存儲在內存中)。
每個RDD有5個主要的屬性:
一組分片(partition),即數據集的基本組成單位
一個計算每個分片的函數
對parentRDD的依賴,這個依賴描述了RDD之間的lineage
對于key-value的RDD,一個Partitioner
一個列表,存儲存取每個partition的preferred位置。對于一個HDFS文件來說,存儲每個partition所在的塊的位置。
Scala 語言由EcolePolytechniqueFederale de Lausanne(瑞士洛桑市的兩所瑞士聯邦理工學院之一)開發。Scala 是一種多范式語言,它以一種流暢的、讓人感到舒服的方法支持與命令式、函數式和面向對象的語言相關的語言特性。從面向對象的角度來看,Scala 中的每個值都是一個對象。同樣,從函數觀點來看,每個函數都是一個值。Scala也是屬于靜態類型,它有一個既有表現力又很安全的類型系統。
此外,Scala是一種虛擬機 (VM) 語言,并且可以通過 Scala 編譯器生成的字節碼,直接運行在使用 Java Runtime Environment V2 的 Java? Virtual Machine (JVM) 上。該設置充許 Scala 運行在運行 JVM 的任何地方(要求一個額外的 Scala 運行時庫)。它還充許 Scala 利用大量現存的 Java 庫以及現有的 Java 代碼。
最后,Scala具有可擴展性。該語言(它實際上代表了可擴展語言)被定義為可直接集成到語言中的簡單擴展。
2、Spark單機模式部署
1)基本環境
centos6.2 64位
#java-version //1.8版本
2)安裝spark
官網https://spark.apache.org/downloads.html選擇最新的 Spark 版本和 Hadoop 版本(暫不用 Hadoop,所以任何版本都行),然后下載壓縮包。
解壓到spark-2.0.1-bin-hadoop2.7.tgz到/home/spark路徑下。
#cd /home
#tar -zxvfspark-2.0.1-bin-hadoop2.7.tgz
#mv spark-2.0.1-bin-hadoop2.7.tgzspark
#cd /spark
#bin/spark-shell
進入scale命令行。Spark 主要使用 Scala 來進行開發,要最大程度地發揮 Spark 的性能,最好掌握scale語言。Spark 還支持 Java 和Python 的接口,但 Java 的語法沒有 Scala 簡潔,Python 的性能沒有 Scala 的高。
3)spark-Shell
Scale> valtextFile = sc.textFile("README.md")
textFile:org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at<console>:24
RDD對象集合有轉換和行動兩類操作,轉化操作返回新的RDD,行動操作返回具體數據類型。
先看看兩個具體的行動操作:統計和取第一行
Scale> textFile.count()
Res1: Long =99
scala>textFile.first()
res2: String= # Apache Spark
在看看轉化操作:
Scale>vallinesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark:org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at <console>:26
Scale> textFile.filter(line=> line.contains("Spark")).count()
res3: Long =19
簡單操作可參考:https://spark.apache.org/docs/latest/quick-start.htmlb
3、Java開發Spark
為避免學習Scale語言,在Eclipse上用java開發。
1)Maven要升級到3.3.9版本。
卸載原來的版本:
#apt-getautoremove maven
安裝新版本:
cd~/Downloads
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
sudo mkdir-p /usr/local/apache-maven
sudo mvapache-maven-3.3.9-bin.tar.gz /usr/local/apache-maven
cd/usr/local/apache-maven
sudo tar-xzvf apache-maven-3.3.9-bin.tar.gz
配置環境變量/etc/profile
#vi/etc/profile
尾部加入:
??? export M2_HOME=/usr/local/apache-maven/apache-maven-3.3.9
exportM2=$M2_HOME/bin
exportMAVEN_OPTS="-Xms256m -Xmx512m"
exportPATH=$M2:$PATH
#source /etc/profile
#mvn --version
Apache Maven 3.3.9
2)編譯spark的jar包
官網下載源碼spark-2.0.1.tgz并解壓到spark-2.0.1。在ubuntu14用Maven編譯。
進入spark-2.0.1目錄執行mvn package編譯生成jar文件。
#build/mvn-DskipTests clean package
編譯后進入core/target目錄提取jar包spark-core_2.11-2.0.1.jar,開發時需要其他功能再引入spark相關jar包。暫不使用HDFS集群,所以不添加一個hadoop-client依賴。
下載已編譯spark-2.0.1-bin-hadoop2.7.tgz內jars目錄內也可以找到相關jar包。
3)工程實例
Java工程中引入spark-core_2.11-2.0.1.jar、scala-library-2.11.8.jar、spark-sql_2.11-2.0.1.jar、scala-reflect-2.11.8.jar,實現wordcount案例。代碼可參考examples里,eclipse里export輸出skwc.jar。
提交執行:
bin/spark-submit--class sk.rdd.JavaWordCount --master local /mnt/skwc.jar/home/spark/README.md
4、總結
初步了解Spark平臺,后續根據需要:
1)深入學習RDD操作和Spark SQL及所支持的各類數據輸入和輸出格式;
2)部署Spark分布式環境并調優性能,獨立資源管理器和Meso、Yarn管理器;
3)掌握Spark Streaming實時流式處理框架;
4)Hadoop集成,含hafs文件系統和Yarn集群管理器集成;
5)應用上需要重點掌握MLib機器學習庫。
總結
以上是生活随笔為你收集整理的离线轻量级大数据平台Spark之单机部署及Java开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法导论之单源最短路径
- 下一篇: Java实现算法导论中线性规划单纯形算法