Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Spark 巨量資料處理基礎教學
Report
NUTC, imac
Follow
NUTC, imac
May. 13, 2016
•
0 likes
21 likes
×
Be the first to like this
Show More
•
11,371 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
Apache Flink internals
Kostas Tzoumas
台科逆向簡報
耀德 蔡
Vivado hlsのシミュレーションとhlsストリーム
marsee101
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
Dimitris Psounis
How to use Parquet as a basis for ETL and analytics
Julien Le Dem
Spring Boot 소개
beom kyun choi
Hive join optimizations
Szehon Ho
Συνάρτηση "1-1"
peri2005
1
of
45
Top clipped slide
Spark 巨量資料處理基礎教學
May. 13, 2016
•
0 likes
21 likes
×
Be the first to like this
Show More
•
11,371 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
主要介紹 Spark 的概念與基本 RDD API 範例
NUTC, imac
Follow
NUTC, imac
Advertisement
Advertisement
Advertisement
Recommended
給初學者的Spark教學
Chen-en Lu
18.2K views
•
46 slides
Everyday I'm Shuffling - Tips for Writing Better Spark Programs, Strata San J...
Databricks
98.4K views
•
44 slides
Cpu cache arch
Shinichiro Niiyama
6.8K views
•
43 slides
Hive and Apache Tez: Benchmarked at Yahoo! Scale
DataWorks Summit
17.3K views
•
33 slides
Halide for Memory
Koumei Tomida
1.5K views
•
50 slides
Javaバイトコード入門
Kota Mizushima
10K views
•
61 slides
More Related Content
Slideshows for you
(20)
Apache Flink internals
Kostas Tzoumas
•
12.4K views
台科逆向簡報
耀德 蔡
•
5.4K views
Vivado hlsのシミュレーションとhlsストリーム
marsee101
•
5.5K views
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 6
Dimitris Psounis
•
3.8K views
How to use Parquet as a basis for ETL and analytics
Julien Le Dem
•
11.8K views
Spring Boot 소개
beom kyun choi
•
33.6K views
Hive join optimizations
Szehon Ho
•
2.1K views
Συνάρτηση "1-1"
peri2005
•
36.6K views
Degrading Performance? You Might be Suffering From the Small Files Syndrome
Databricks
•
417 views
Using Raspberry Pi GPU for DNN
notogawa
•
18.9K views
Process Management
Roy Lee
•
2.8K views
Vivado hls勉強会2(レジスタの挿入とpipelineディレクティブ)
marsee101
•
6.4K views
Stack pivot
sounakano
•
401 views
Spark Autotuning Talk - Strata New York
Holden Karau
•
1.1K views
Dive into PySpark
Mateusz Buśkiewicz
•
1.3K views
Discovering functional treasure in idiomatic Groovy
Naresha K
•
1.6K views
Practical Groovy DSL
Guillaume Laforge
•
10.3K views
Apache Calcite overview
Julian Hyde
•
19.4K views
ROP 輕鬆談
hackstuff
•
25.8K views
Demystifying DataFrame and Dataset with Kazuaki Ishizaki
Databricks
•
2.8K views
Similar to Spark 巨量資料處理基礎教學
(20)
Spark调研串讲
jie cao
•
704 views
Hadoop Map Reduce 程式設計
Wei-Yu Chen
•
40.3K views
Hi Haskell
Jifeng Deng
•
1.4K views
Spark introduction - In Chinese
colorant
•
1.3K views
Node.js开发体验
QLeelulu
•
1.9K views
Scala
popeast
•
999 views
Hadoop学习总结
ordinary2012
•
1K views
JavaScript 快速複習 2017Q1
Sheng-Han Su
•
2.7K views
Arduino程式快速入門
吳錫修 (ShyiShiou Wu)
•
7.2K views
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Justin Lin
•
11K views
Sun java
softwaredesigner
•
390 views
异步编程与浏览器执行模型
keelii
•
616 views
配置Oracle 10g 双向流复制
maclean liu
•
1.7K views
Introduction of Spark by Wang Haihua
Wang Haihua
•
82 views
山頂洞人日記 - 回歸到最純樸的開發
koji lin
•
841 views
D2_node在淘宝的应用实践_pdf版
Jackson Tian
•
3K views
《Java程序设计》期末考试试题 (六)
jane2006
•
1.7K views
PHPUnit + Xdebug 单元测试技术
hoopchina
•
2.6K views
Spark streaming经验介绍
Wenchun Xu
•
283 views
Node.js在淘宝的应用实践
taobao.com
•
2.6K views
Advertisement
Recently uploaded
(20)
①【玛格丽特女王大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
☀️《佩斯毕业证仿真》
jjkjkijk
•
3 views
留信网认证可查【加州州立大学圣贝纳迪诺分校文凭证书毕业证购买】
32lkhng
•
2 views
本科/硕士《德国多特蒙德工业大学毕业证成绩单》
nxj1dsa
•
3 views
①【拉筹伯大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 views
CMMC合規需求調查問卷.pptx
jacklee422407
•
3 views
国外学历【萨塞克斯大学研究生文凭毕业证留学生首选】
1w53dacxz
•
2 views
☀️【伦敦国王学院毕业证成绩单留学生首选】
25mjhd12
•
2 views
留学美国必看:长岛大学毕业证、学位证办理流程
oqcymp
•
3 views
①【加州大学圣地亚哥分校毕业证文凭学位证书|工艺完美复刻】
34asdcx
•
2 views
本科/硕士《德国维尔茨堡大学毕业证成绩单》
nxj1dsa
•
2 views
☀️【斯图加特大学毕业证成绩单留学生首选】
bjd42as
•
2 views
☀️【北英属哥伦比亚大学毕业证成绩单留学生首选】
bjd42as
•
2 views
☀️【北卡罗来纳大学教堂山分校毕业证成绩单留学生首选】
2125nuh
•
3 views
Kevin Lognone Agenda at the European Innovation Week 2023 歐盟創新週
Kevin Lognoné
•
2 views
本科/硕士《加拿大蒙特利尔大学毕业证成绩单》
1523dsa
•
2 views
☀️【新英格兰大学毕业证成绩单留学生首选】
bjd42as
•
2 views
☀️【密西西比州立大学毕业证成绩单留学生首选】
2125nuh
•
2 views
留信网认证可查【格鲁斯特大学文凭证书毕业证购买】
12da12
•
2 views
☀️【基尔大学毕业证成绩单留学生首选】
25mjhd12
•
2 views
Spark 巨量資料處理基礎教學
專業代理上課⼈人員 :煞氣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)
Advertisement