SlideShare a Scribd company logo
1 of 45
Download to read offline
專業代理上課⼈人員 :煞氣a凱仁


乾 偶腰回夾了拉
什麼是Spark ?
2
Apache Spark是⼀一個開源叢集運算框架,最初是由加州⼤大學柏克萊分校AMPLab所開發。相對於
Hadoop的MapReduce會在執⾏行完⼯工作後將中介資料存放到磁碟中,Spark使⽤用了記憶體內運算技
術,能在資料尚未寫⼊入硬碟時即在記憶體內分析運算。
巨量資料處理架構
• 重複⼯工作:許多專有系統在解決同樣問題,如分散式作業以及容錯。
舉例,⼀一個分散式的 SQL 引擎或⼀一個機器學習系統都需要實現平⾏行聚
合。這些問題在每個專有系統中會重複地被解決。

• 組合問題:在不同系統之間進⾏行組合計算是費⼒力⼜又不討好的事情。對
於特定的⼤大數據應⽤用程式⽽而且,中間資料集是⾮非常⼤大的,⽽而且移動的
本也⾮非常⾼高,⺫⽬目前環境中採⽤用副本機制,將資料複製到穩定儲存系統
(HDFS),以便在不同引擎進⾏行分享。但這樣往往⽐比運算花費代價要
⼤大許多。
3
巨量資料處理架構
• 適⽤用範圍的限制:如果⼀一個應⽤用不適合⼀一個專有的計算系統,那麼使
⽤用者只能換⼀一個系統,或重新定義⼀一個新的計算系統。
• 資源設定:在不同計算引擎之間進⾏行資源的動態共⽤用是⽐比較困難的。
因為⼤大多數計算引擎都會假設它們在程式執⾏行結束之前擁有相同的機
器節點的資源。
• 管理問題:對於多個專有系統,需要花費更多時間與精⼒力來管理與部
署。我們終端使⽤用者,要學習多種API與系統模型。
4
Hadoop 問題點
5
• 我們都知道 Google 的 MapReduce,他是⼀一個簡單通⽤用與⾃自動容錯的
批次處理計算模型。http://static.googleusercontent.com/media/
research.google.com/zh-TW//archive/mapreduce-osdi04.pdf
• 由於 Hadoop 很多⼦子專案都繼承 MR 模型,對於其他類型計算,諸如
互動式與串流式計算,並不適合被拿來使⽤用。導致⼤大量不同於 MR 的
專有資料處理模型出現,Ex:Storm、Impala與GraphLab。
• 然⽽而隨著新模型的不斷出現,似乎對於巨量資料處理⽽而⾔言,不同類型
的作業應該需要⼀一系列不同的處理架構才可以極佳地完成。但是這些
專有系統也有⼀一些不⾜足之處。
Spark 巨量資料處理架構
6
• Spark 採⽤用⼀一個 RDD 概念(⼀一種新的抽象的彈性資料集),在某種程
度上 Spark 是對 MapReduce 模型的⼀一種擴充。
• 主要是把 MR 不擅⻑⾧長的計算⼯工作(反覆運算、互動式與串流式)進⾏行改
善,並提出⼀一個統⼀一的引擎。
• 因為 MR 缺乏⼀一種特性,就是在平⾏行計算的各個階段劑型有效的資料共
⽤用,這種共⽤用就是 RDD 的本質。利⽤用這種本質來達到這些運算模式。
• 在叢集處理的容錯⽅方式,不像Hadoop與 Dryad將計算建置成⼀一個無環圖
的⼯工作集。
RDD 表達能⼒力
7
• 反覆運算演算法:這是⺫⽬目前專有系統實現⽐比較普遍的應⽤用
場景,⽤用於圖型處理與機器學習。RDD 能夠極佳的實現這
些模型,包含Pregel、HaLoop、GraphLab等模型。
• 關連式查詢:對 MR 來說⾮非常重要的需求就是SQL查詢,
包含⻑⾧長期執⾏行、數⼩小時的批次處理作業與互動式查詢。在
MR 上有其內在缺點,如其容錯的模型⽽而導致速度很慢。利
⽤用RDD實現許多通⽤用的資料庫引擎特性,使效能提升。
RDD 表達能⼒力
8
• MapReduce 批次處理:RDD提供的介⾯面是 MR 的超集合,所以 RDD
可以有效地執⾏行與利⽤用 MR 實現應⽤用程式,另外 RDD 還適合更加抽象
的以 DAG 為基礎的應⽤用程式,如 DryadLINQ。
• 串流式處理:⺫⽬目前串流式系統只提供有限容錯處理,需要消耗系統⾮非
常⼤大的複製代價與⾮非常⻑⾧長的容錯時間。然⽽而 RDD 實現⼀一個新的模型—
離散資料流程(D-Stream),D-Stream 將串流計算當作⼀一系列的短⼩小
的批次處理操作,⽽而⾮非常駐有狀態的操作,將兩個離散串流之間的狀
態存在RDD中。並允許 RDD 的繼承關係圖(Lineage)進⾏行平⾏行性的
恢復,⽽而不需要進⾏行資料複製。
Spark Ecosystem
9
處理的基本情況
10
我們可以將巨量資料處理分為以下三種情況:
• 複雜的批次資料處理(batch data processing):時間⻑⾧長,跨度為
10min - N hr。
• 以歷史資料為基礎的互動查詢(interactive query):時間通常為 10
sec - N min。
• 以即時資料流為基礎的資料處理(streaming data processing):時間
通常為 N ms - N sec。
Spark ⼦子專案對應
11
• Spark Core:以 RDD 提供了豐富的基礎操作介⾯面,利⽤用 DAG 進⾏行統⼀一
⼯工作規劃,使 Spark 能夠靈活地處理類似 MR 的批次作業。
• Spark SQL:相容 Hive 介⾯面 HQL,提供⽐比 Hive 更好查詢速度(10 - 100
x)的分散式 SQL 引擎。
• Spark Streaming:將串流式計算分解成⼀一系列短⼩小的批次處理作業,利
⽤用 Spark 輕量級與低延遲時間的排程架構,來⽀支援串流處理。⺫⽬目前已⽀支援
資料源套件,Kafka、Flume、ELK、Twitter 與 TCP sockets等。
Spark ⼦子專案對應
12
• GraphX:已 Spark 為基礎的圖形計算架構,相容 Pregel 與 GraphLab 介⾯面,增強圖
型建置與圖的轉換功能。
• MLlib:因為 Spark Core ⾮非常適合於 反覆式運算,MLlib就是作為Spark的機器學習
演算法函式庫。已⽀支援分類、分群、關聯與推薦演算法。如以下:
• 匯總統計、相關性、分層抽樣、假設檢定、隨機資料⽣生成
• 分類與回歸:⽀支援向量機、回歸、線性回歸、決策樹、樸素⾙貝葉斯
• 協同過濾:ALS
• 分群:k-平均演算法(k-mean)
• 維度縮減:奇異值分解(SVD),主成分分析(PCA)
• 特徵提取和轉換:TF-IDF、Word2Vec、StandardScaler
• 最佳化:隨機梯度下降法(SGD)、L-BFGS
Spark Standalone Mode
13
Spark On Mesos
14
是很多公司採⽤用的模式,官⽅方推薦這種模式(當然,原因之
⼀一是⾎血緣關係)。正是由於Spark開發之初就考慮到⽀支持
Mesos,因此,⺫⽬目前⽽而⾔言,Spark運⾏行在Mesos上會⽐比運⾏行在
YARN上更加靈活,更加⾃自然。⺫⽬目前在Spark On Mesos環境
中,⽤用⼾戶可選擇兩種調度模式之⼀一運⾏行⾃自⼰己的應⽤用程序。
• 粗粒度模式(Coarse-grained Mode)
• 細粒度模式(Fine-grained Mode)
Spark On Mesos
15
Spark On YARN
16
這是⼀一種最有前景的部署模式。但限於YARN⾃自⾝身的發展,⺫⽬目前僅⽀支持粗粒
度模式(Coarse-grained Mode)。這是由於YARN上的Container資源是不
可以動態伸縮的,⼀一旦Container啟動之後,可使⽤用的資源不能再發⽣生變
化。
⽤用Spark做什麼?
17
對⼯工程師⽽而⾔言,Spark提供了⼀一個簡單的⽅方式在集群之間並⾏行化這
些應⽤用,隱藏了分佈式系統、網絡通信和容錯處理的複雜性。系
統使得⼯工程師在實現任務的同時,有充⾜足的權限監控、檢查和調
整應⽤用。 API的模塊特性使得重⽤用已有⼯工作和本地測試變得簡
單。
Spark⽤用⼾戶使⽤用Spark作為其數據處理應⽤用,因為他提供了豐富的
功能,易於學習和使⽤用,⽽而且成熟可靠。
⽤用Spark有哪些好處?
18
• Java、Scala、Python 和 R APIs。
• 可擴展⾄至超過 8000 個結點。
• 能夠在記憶體內緩存資料集以進⾏行互動式資料分析。
• Scala 或 Python 中的互動式命令列介⾯面可降低橫向擴展資料探
索的反應時間。
• Spark Streaming 對即時資料串流的處理具有可擴充性、⾼高吞吐
量、可容錯性等特點。
• Spark SQL ⽀支援結構化和和關聯式查詢處理(SQL)。
• MLlib 機器學習演算法和 Graphx 圖形處理演算法的⾼高階函式
庫。
19
基本操作
安裝Spark
20
$ wget http://files.imaclouds.com/scripts/hadoop-spark-installer.sh
OR
https://hub.docker.com/r/kairen/yarn-spark/
下載 Spark Library
21
http://files.imaclouds.com/packages/hadoop-spark/
spark-assembly-1.5.2-hadoop2.6.0.jar
並 Import 到 Project 裡
執⾏行指令
22
$ spark-submit --class <package> --master local[2] <jar path>
<input path> <output path>
在 HDFS 新增資料
23
$ vim test.txt

a,123,456,789,11344,2142,123
b,1234,124,1234,123,123
c,123,4123,5435,1231,5345
d,123,456,789,113,2142,143
e,123,446,789,14,2142,113
f,123,446,789,14,2142,1113,323
$ hadoop fs -mkdir /spark/homework

$ hadoop fs -put test.txt /spark/homework
Spark 操作概念
24
Spark 共有以下幾個概念:
•Resilient Distributed Datasets
•Creation operation
•Transformation operation
•control operation
•action operation
SparkConf & JavaSparkContext
25
// 建⽴立 Configuration 且定義 Job 名稱
SparkConf conf = new SparkConf();
conf.setAppName(“JavaWordCount”);
conf.setMaster("yarn-cluster")
// 建⽴立 JavaSparkContext 來接收資料來源
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> file = sc.textFile(inputPath);
map
26
Input : String
Output : 任⼀一定義	
JavaRDD<String> map =file.map(new Function<String,
String>() {
	 public String call(String arg0) throws Exception {
	 	 return arg0;
	 }
});
{1,2,3} => {1,2,3}
map 練習
27
找出測試資料所有英⽂文字⺟母,並存⾄至/spark/
homework/map。結果如下:
a
b
c
d
e
f
flatmap
28
Input : String
Output : Iterable<v> // v 型態任⼀一定義
JavaRDD<String> map =file
	 .flatMap(new FlatMapFunction<String, String>() {
	 	 public Iterable<String> call(String arg0)
	 	 	 throws Exception {
	 	 	 	 return Arrays.asList(arg0.split(","));
	 	 	 }
});
{1,2,3} => {1 2 3}
flatmap 練習
29
找出測試資料所有以”,”切割的資料,並存⾄至/spark/homework/flatMap。
結果如下:
a
123
456
789
11344
2142
123
b
1234
….
filter
30
Input : String
Output : Boolean
JavaRDD<String> filter =map.filter(new Function<String, Boolean>() {
	 public Boolean call(String arg0) throws Exception {
	 	 if(arg0.contains("2")){
	 	 	 return true;
	 	 }
	 	 return false;
	 }
});
{1,2,3} => {2}
filter 練習
31
找出測試資料所有以123與456的資料,並存⾄至/
spark/homework/filter。結果如下:
123
456
123
1234
1234
….
mapToPair
32
Input : String
Output : Tuple2<K, V>	 // K、V型態任⼀一定義
JavaPairRDD<String, Integer> pairRDD =file
	 .mapToPair(new PairFunction<String, String, Integer>() {
	 	 public Tuple2<String, Integer> call(String arg0)
	 	 	 throws Exception {
	 	 	 	 return new Tuple2<String, Integer>(arg0, 1);
	 	 	 }
});
{1,2,3} => {(1,1),(2,1),(3,1)}
mapToPair 練習
33
將測試資料轉換成(str, 1),並存⾄至/spark/homework/
mapPair。結果如下:
(a,1)
(123,1)
(456,1)
(789,1)
(11344,1)
(2142,1)
(123,1)
….
flatMapToPair
34
Input : String
Output : Iterable<Tuple2<K, V>> 	 	 // K、V型態任⼀一定義
JavaPairRDD<String, Integer> pairRDD =file
	 .flatMapToPair(new PairFlatMapFunction<String, String, Integer>() {
	 	 public Iterable<Tuple2<String, Integer>> call(String arg0)
	 	 	 throws Exception {
	 	 	 	 ArrayList<Tuple2<String,Integer>> arrayList
	 	 	 	 	 =new
ArrayList<Tuple2<String,Integer>>();
	 	 	 	 arrayList.add(new Tuple2<String, Integer>(arg0, 123));
	 	 	 	 return arrayList ;
	 	 	 }
	 });
{1,2,3} => {(1,123),(2,123),(3,123)}
flatMapToPair 練習
35
將測試資料轉換成(字⺟母, 所有後⾯面數字的sum),並存
⾄至/spark/homework/filter_output。結果如下:
(a,14977)
(b,2838)
(c,16257)
(d,3766)
(e,3627)
(f,4950)
….
groupBy
36
Input : String
Output : V		 // V 型態任⼀一定義
JavaPairRDD<String, Iterable<String>> groupBy =file
	 .groupBy(new Function<String, String>() {
	 	 public String call(String arg0) throws Exception {
	 	 	 return (arg0.contains("2")?"A":"B");
	 	 }
	 });
{1,2,3} => {(A,{2}) , (B,{1,3})}
groupBy 練習
37
找出測試資料中⼤大於500的資料,若無法辨識分
到”None”,並存⾄至/spark/homework/groupBy。結果如
下:
(None,[a, b, c, d, e, f])
(⼩小於 500,[123, 456, 123, 124, 123, 123, 123, 123,
456, 113, 143, 123, 446, 14, 113, 123, 446, 14, 323])
(⼤大於 500,[789, 11344, 2142, 1234, 1234, 4123, 5435,
1231, 5345, 789, 2142, 789, 2142, 789, 2142, 1113])
….
reduce
38
Input : String
Output : String	 	
String string = flatmap.reduce(new Function2<String, String,
String>() {
	 public String call(String arg0, String arg1) throws Exception {
	 	 return arg0+arg1+"~~";
	 }
});
{1,2,3} => {1~~2~~3}
reduce 練習
39
找出測試資料所有英⽂文字⺟母,並⽤用reduce將之
append成⼀一個字串,並存⾄至/spark/homework/
reduce。結果如下:
abcdef
reduceByKey
40
Input : String
Output : Integer 	
JavaPairRDD<String, Integer> reduceByKey =flatmap
	 .reduceByKey(new Function2<Integer, Integer, Integer>() {
	 	 public Integer call(Integer arg0, Integer arg1)
	 	 	 throws Exception {
	 	 	 	 return arg0+arg1;
	 	 }
	 });
{(1,1),(1,2),(3,3)} => {(1,3),(3,3)}
reduceByKey 練習
41
找出以”,”切割的所有wordcount,並存⾄至/spark/
homework/reduceByKey。結果如下:
(d,1)
(1113,1)
(1231,1)
(e,1)
(14,2)
(113,2)
….
mapValues
42
Input : String
Output : Integer 	
reduceByKey.mapValues(new Function<Integer,
Integer>() {
	 public Integer call(Integer arg0) throws Exception {
	 	 return arg0*100;
	 }
});
{(1,1),(2,2),(3,3)} => {(1,100),(2,200),(3,300)}
sortByKey & distinct
43
//以 Key 為主進⾏行⼤大到⼩小排序,反之true⼩小到⼤大
JavaPairRDD<String, Integer> sort =
reduceByKey.sortByKey(false);
//去除重覆
JavaPairRDD<String, Integer> sort = reduceByKey.distinct();
{1,2,3} => {(1,123),(2,123),(3,123)}
打鐵趁熱(⼀一)
44
找出Datasets中,銷售前⼆二⼗十名的商品。結果為以
下:
01,0006584093
02,0000143511
03,0007082051
04,0005772981
05,0014252066
….
打鐵趁熱(⼆二)
45
• 使⽤用者編號1~10中對商品編號1~10 的評價有 3 以上的有哪些?依
照 rating 進⾏行排序 (⼤大到⼩小)
•結果格式如下
• User 1 評價 Item 1 為 5
• u.data.csv (http://files.imaclouds.com/dataset/u.data.csv)

More Related Content

What's hot

Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
 
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
Takahiro Inoue
 

What's hot (10)

Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
Django 製 CMS Wagtail で Blog を作ってみる
Django 製 CMS Wagtail で Blog を作ってみるDjango 製 CMS Wagtail で Blog を作ってみる
Django 製 CMS Wagtail で Blog を作ってみる
 
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
 
如何寫好程式
如何寫好程式如何寫好程式
如何寫好程式
 
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
Map Reduce 〜入門編:仕組みの理解とアルゴリズムデザイン〜
 
WPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめないWPF .NET Core でも XAML デザイナをあきらめない
WPF .NET Core でも XAML デザイナをあきらめない
 

Similar to Spark 巨量資料處理基礎教學

Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
QLeelulu
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结
ordinary2012
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
maclean liu
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
Jackson Tian
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
jane2006
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
taobao.com
 

Similar to Spark 巨量資料處理基礎教學 (20)

Spark调研串讲
Spark调研串讲Spark调研串讲
Spark调研串讲
 
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
 
Hi Haskell
Hi HaskellHi Haskell
Hi Haskell
 
Spark introduction - In Chinese
Spark introduction - In ChineseSpark introduction - In Chinese
Spark introduction - In Chinese
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
Scala
ScalaScala
Scala
 
Hadoop学习总结
Hadoop学习总结Hadoop学习总结
Hadoop学习总结
 
JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1JavaScript 快速複習 2017Q1
JavaScript 快速複習 2017Q1
 
Arduino程式快速入門
Arduino程式快速入門Arduino程式快速入門
Arduino程式快速入門
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
Sun java
Sun javaSun java
Sun java
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
Introduction of Spark by Wang Haihua
Introduction of Spark by Wang HaihuaIntroduction of Spark by Wang Haihua
Introduction of Spark by Wang Haihua
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
Spark streaming经验介绍
Spark streaming经验介绍Spark streaming经验介绍
Spark streaming经验介绍
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 

Spark 巨量資料處理基礎教學