Transcript
Page 1: Hadoop ecosystem - hadoop 生態系

Headfirst 之Hadoop的生態系

陳威宇

Page 2: Hadoop ecosystem - hadoop 生態系

今天的象排餐,供應的部位…

2figure Source : http://aryannava.com/2014/02/19/apache-hadoop-ecosystem/hadoopecosystem/

Page 3: Hadoop ecosystem - hadoop 生態系

等等,為何我們需要 這些 東東

• 接下來會遇到六個Case,一起想一想要怎麼解決

3

Hadoop EcoSystem

Page 4: Hadoop ecosystem - hadoop 生態系

手工打造程式來做

用flume

問題

• 場景:

– 有上百個服務,運作在許多不同的機器中,每個服務都產生超多的 log ,且需要被分析,我知道最後可以放到hadoop中,可是….

• 問題:

– 我要如何送這些源源不絕的資料到hadoop?

• 解法:

4figure Source : http://image.slidesharecdn.com/flume-120314204418-phpapp01/95/apache-flume-4-728.jpg?cb=1338404245

Page 5: Hadoop ecosystem - hadoop 生態系

Apache Flume: Log 收集器

• 即時日誌收集系統

• 將分佈在不同節點、機器上的日誌收集到hdfs 中

• 不用寫程式: 僅定義config檔即可

5

Source• netcat• exec• syslog• spooldir• seq• http• avro

Sink• logger• hdfs• file_roll• hbase• solr• avro

channel• memory• jdbc• File

figure Source : https://flume.apache.org/FlumeUserGuide.html

Page 6: Hadoop ecosystem - hadoop 生態系

用 shell 硬把程式兜出來,放棄用 hadoop 了 使用 PIG 發憤圖強,廢寢忘食的研究…

問題 :

• 場景:

– 老闆要我統計組織內所有員工的平均工時。於是我取得了全台灣的打卡紀錄檔(打卡鐘的log檔),還跟人事部門拿到了員工 id 對應表。這些資料量又多且大,我想到要餵進去 Hadoop 的HDFS, .. 然後

• 問題:

– 為了寫MapReduce,開始學 Java, 物件導向, hadoopAPI, … @@

• 解法:

6

Page 7: Hadoop ecosystem - hadoop 生態系

有Pig後Map-Reduce簡單了!?

• Apache Pig用來處理大規模資料的高級查詢語言

• 適合操作大型半結構化數據集

• 比使用Java,C++等語言編寫大規模資料處理程式的難度要小16倍,實現同樣的效果的代碼量也小20倍。

• Pig元件– Pig Shell (Grunt)

– Pig Language (Latin)

– Libraries (Piggy Bank)

– UDF:使用者定義功能

7figure Source : http://www.slideshare.net/ydn/hadoop-yahoo-internet-scale-data-processing

Page 8: Hadoop ecosystem - hadoop 生態系

豬也會的程式設計

8

功能 指令

讀取 LOAD

儲存 STORE

資料處理

REGEX_EXTRACT, FILTER, FOREACH, GROUP, JOIN, UNION, SPLIT, …

彙總運算

AVG, COUNT, MAX, MIN, SIZE, …

數學運算

ABS, RANDOM, ROUND, …

字串處理

INDEXOF, SUBSTRING, REGEX EXTRACT, …

Debug DUMP, DESCRIBE, EXPLAIN, ILLUSTRATE

HDFS cat, ls, cp, mkdir, …

$ pig –x grunt> A = LOAD ‘file1’ AS (x, y, z);grunt> B = FILTER A by y > 10000;grunt> STORE B INTO ‘output’;

Page 9: Hadoop ecosystem - hadoop 生態系

整型前的mapreduce code

9

nm dp Id Id dt hr

劉 北 A1 A1 7/7 13

李 中 B1 A1 7/8 12

王 中 B2 A1 7/9 4

Java Code

Map-Reduce

A1 劉 北 7/8 13

A1 劉 北 7/9 12

A1 劉 北 Jul 12.5

Page 10: Hadoop ecosystem - hadoop 生態系

用pig 整形後

10

北 A1 劉 12.5

LOAD

LOAD

FILTER

JOIN

GROUP

FOREACH

STORE

(nm, dp, id)

(nm, dp, id)(id, dt, hr)

(nm, dp, id, id, dt, hr)

(group, {(nm, dp, id, id, dt, hr)})

(group, …., AVG(hr))

(dp,group, nm, hr)

Logical PlanPig LatinA = LOAD 'file1.txt' using PigStorage(',') AS (nm, dp, id) ;B = LOAD ‘file2.txt' using PigStorage(',') AS (id, dt, hr) ;C = FILTER B by hr > 8;D = JOIN C BY id, A BY id;E = GROUP D BY A::id;F = FOREACH E GENERATE $1.dp,group,$1.nm, AVG($1.hr);STORE F INTO '/tmp/pig_output/';

nm dp Id Id dt hr

劉 北 A1 A1 7/7 13

李 中 B1 A1 7/8 12

王 中 B2 A1 7/9 4

Tips : 關鍵字大小寫有差;先用小量資料於pig –x local 模式驗證;每行先配合dump or illustrate看是否正確

Page 11: Hadoop ecosystem - hadoop 生態系

問題 :

• 場景:

– 組織內有統一格式的出勤紀錄資料表,分散在全台各縣市的各個部門的資料庫中。老闆要我蒐集全台的資料統計所有員工的平均工時。DB內的table 都轉成csv 檔,並且餵進去 Hadoop 的HDFS了, ..

• 問題:

– 雖然我知道PIG可以降低MapReduce的門檻,但我還是習慣 SQL 語法來實作,如果有一台超大又免費的DB就好了…

• 解法:

11

編列經費買台高效伺服器再裝個大容量的 sql server 使用 Hive

Page 12: Hadoop ecosystem - hadoop 生態系

Hadoop 也有 RDB 可以用 : Hive

• Hive = Hadoop的RDB– 將結構化的資料檔案映射為資料庫表

– 提供SQL查詢功能( 轉譯SQL語法成MapReduce程式)

• 適合:– 有SQL 基礎的使用者且基本 SQL 能運算的事

• 特色:– 可擴展、可自訂函數、容錯

• 限制:– 執行時間較久

– 資料結構固定

– 無法修改

12

Page 13: Hadoop ecosystem - hadoop 生態系

Hive 架構提供了..

• 介面

– CLI

– WebUI

– API • JDBC and ODBC

• Thrift Server (hiveserver)

– 使遠端Client可用 API 執行 HiveQL

• Metastore

– DB, table, partition…

13figure Source : http://blog.cloudera.com/blog/2013/07/how-hiveserver2-brings-security-and-concurrency-to-apache-hive

Page 14: Hadoop ecosystem - hadoop 生態系

現在換 蜂 也會的程式設計

14

$ hivehive> create table A(x int, y int, z int)hive> load data local inpath ‘file1 ’ into table A;hive> select * from A where y>10000

hive> insert table B select * from A where y>10000

figure Source : http://hortonworks.com/blog/stinger-phase-2-the-journey-to-100x-faster-hive/

Page 15: Hadoop ecosystem - hadoop 生態系

用 Hive 整形後

15

北 A1 劉 12.5

HiveQL> create table A (nm String, dp String, id String)> create table B (id String, dt Date, hr int)> create table final (dp String, id String , nm String, avg float)> load data inpath ‘file1’ into table A;> load data inpath ‘file2’ into table B;> Insert table final select a.id, collect_set(a.dp), collect_set(a.nm), avg(b.hr) from a,b where b.hr > 8 and b.id = a.id group by a.id;

nm dp Id id dt hr

劉 北 A1 A1 7/7 13

李 中 B1 A1 7/8 12

王 中 B2 A1 7/9 4

Tips : create table & load data 建議用 tool 匯入資料較不會錯

Page 16: Hadoop ecosystem - hadoop 生態系

Hive和SQL 比較

Hive RDMS

查詢語法 HQL SQL

儲存體 HDFSRaw Device or Local FS

運算方法 MapReduce Excutor

延遲 非常高 低

處理數據規模 大 小

修改資料 NO YES

索引Index, Bigmapindex…

複雜健全的索引機制

16Source : http://sishuok.com/forum/blogPost/list/6220.html

Page 17: Hadoop ecosystem - hadoop 生態系

Pig vs Hive

17

Hive Pig

SQL-LIKE 語法 PigLatin

Yes/明確型 Schemas/Types

Yes /隱含型

Yes Partitions No

Thrift Server No

Yes Web Interface

No

Yes(limited) JDBC/ODBC No

No Hdsf 操作 Yes

Hive更適合於數據倉庫的任務,用於靜態的結構及需要經常分析的工作

Pig賦予開發人員在Big Data中,具備更多的靈活性,並允許開發簡潔腳本

Source : http://f.dataguru.cn/thread-33553-1-1.html

Page 18: Hadoop ecosystem - hadoop 生態系

豬與蜜蜂兼得 : HCatalog

• 提供:

– Mapreduce, pig, hive 的讀寫"metastore”介面

– Command line 介面

18figure Source : http://wiki.gurubee.net/pages/viewpage.action?pageId=26739793

Page 19: Hadoop ecosystem - hadoop 生態系

問題 :

• 場景:

– 承前,長官反映一個月做一次統計太久,頻率要改成一天一次以即時反應

• 問題:

– 每天都要將這麼多個資料表,各自轉成csv 再匯入hdfs ,然後 load 到 hive 接著運算…,天都黑了

• 解法:

19

組織內有統一格式的出勤紀錄資料表,分散在全台各縣市的各個部門的資料庫中。老闆要我蒐集全台的資料統計所有員工的平均工時。DB內的table 都轉成csv 檔,並且餵進去 Hadoop 的HDFS了,

找工讀生 ……….. 使用 sqoop ………

Page 20: Hadoop ecosystem - hadoop 生態系

Sqoop : RDB 與 Hadoop 的橋樑

• Apache Sqoop = SQL to Hadoop

• 從..拿資料

– RDBMS

– Data warehources

– NoSQL

• 寫資料到..

– Hive

– Hbase

• 與 oozie 整合

– 可排程

20figure Source : http://bigdataanalyticsnews.com/data-transfer-mysql-cassandra-using-sqoop/

Page 21: Hadoop ecosystem - hadoop 生態系

Sqoop 使用方法

21figure Source : http://hive.3du.me/slide.html

Page 22: Hadoop ecosystem - hadoop 生態系

用 Hive + Sqoop 的微創整形手術

22

北 A1 劉 12.5

HiveQL> create …………> load data inpath ‘file1’ into table A;> load data inpath ‘file2’ into table B;> Insert table final select a.id, collect_set(a.dp), collect_set(a.nm), avg(b.hr) from a,b where b.hr> 8 and b.id = a.id group by a.id;

nm dp Id id dt hr

劉 北 A1 A1 7/7 13

李 中 B1 A1 7/8 12

李 中 B2 A1 7/9 4

HiveQL> create …………

> Insert table final select a.id, collect_set(a.dp), collect_set(a.nm), avg(b.hr) from a,b where b.hr > 8 and b.id = a.id group by a.id;

Page 23: Hadoop ecosystem - hadoop 生態系

問題 :

• 場景:

– 自從知道 hive 的好用之後,所有以前 RDB 存不下、不能存的東西,我通通都建成 hive 的DB, table 來存放,搭配 sqoop 資料是還滿順的, 不過…

• 問題:

– 即使沒有要做複雜運算,只是要取出某一行資料,總是要等hive 處理很久很久

• 解法:

23

邊唱韋禮安的歌邊慢慢等 使用 Impala 使用 HBase

Page 24: Hadoop ecosystem - hadoop 生態系

關於impala 的兩三事

• 目的:解決批次化處理的時間延宕和存取資料速度不方便

• Near-realtime 的 SQL 查詢工具

• 速度約比hive 快 6~ 60 倍

24figure Source : http://blog.cloudera.com/blog/2013/05/cloudera-impala-1-0-its-here-its-real-its-already-the-standard-for-sql-on-hadoop/

Page 25: Hadoop ecosystem - hadoop 生態系

NOSQL 資料庫 Hbase

• Hbase是參考谷歌BigTable建模的NoSQL

• 特性:

– 類似表格的資料結構 (Multi-Dimensional Map)

– 分散式

– 高可用性、高效能

– 很容易擴充容量及效能

• Why HBase:

– Random read/write hadoop 內的資料

25

Page 26: Hadoop ecosystem - hadoop 生態系

Hbase “不是不是不是” 關聯式資料

• HBase並不是關聯式資料庫系統(RDBMS)– 表格(Table)只有一個主要索引 (primary index) 即 row key.

– 不提供 SQL 語法 (如 join )

• 提供Java函式庫, 與 REST與Thrift等介面

• 利用 getRow(), Scan() 存取資料– getRow()可以取得一筆row range的資料,同時也可以指定

版本(timestamp)

– Scan()可以取得整個表格的資料或是一組row range (設定start key, end key)

• insert, update, delete 都是在塞資料– Hbase 中的 insert 功能即 put ()

– 在同一cell 內重複put() => update;

– Delete() = 在該 cell 上貼上刪除的標籤

• Row Key design 是 hbase 設計重點中的重點26

Page 27: Hadoop ecosystem - hadoop 生態系

HBase 資料長相

• “Rowkey”, “column family”, “column qualifier”, “timestamp”, “cell”

27figure Source : http://www.slideshare.net/hanborq/h-base-introduction

Page 28: Hadoop ecosystem - hadoop 生態系

問題 :

• 問題:

– 我的東西需要很多的統計分析方法、machine learning, data mining 等,用 hive, pig 都不適用…

• 解法:

– Machine learning => Machout

– 統計分析 => Rhadoop

28

Page 29: Hadoop ecosystem - hadoop 生態系

Mahout = 象夫

• Mahout = 可伸縮的機器學習演算法

• 用MapReduce實現了部分data mining算法

• 演算法分類如 : (各自提供多種經典演算法的實作 )

– 推薦引擎(Mahout中專指協同過濾式的推薦)

– 降維(Dimension Reduction

– 向量相似度(Vector Similarity)

– 分類演算法

– 群集演算法

– 模式探勘(Pattern Mining)

29

Regression

Recommenders

ClusteringClassificationFreq. PatternMining

Vector Similarity

Non-MRAlgorithms

Examples

Dimension Reduction

Evolution

figure Source : http://www.slideshare.net/chaoyu0513/hit20130928-apache-mahout

Page 30: Hadoop ecosystem - hadoop 生態系

處理大資料的R使用者有福了 : R hadoop

• R 是在統計領域上,鼎鼎大名的語言

• 主要用於統計分析、繪圖、資料探勘、矩陣計算

• R綜合典藏網 CRAN

– 像Perl 依樣的自由函式庫

• Revolution Rhadoop

– rmr2, rhdfs, rhbase …

30figure Source : http://www.r-project.org/

Page 31: Hadoop ecosystem - hadoop 生態系

問題 :

• 場景:

– 自從我學了 hadoop 的十八般武藝之後,已經設計了很多用不同 ecosystem 做的 application 了,不過老闆要我把 src txt-> { flume => MR => hive 或 pig => sqoop } -> dst DB,整段串起來在每天凌晨執行,活要見人result 死要見屍 error message…

• 做法:

31

用shell script 將整段兜起來 ……….. 使用 oozie ………

Page 32: Hadoop ecosystem - hadoop 生態系

Hadoop 工作流程管理員 : oozie

• 把多個 job 組合到起來,從而完成更大型的任務

• 包含– 控制流程 ( start, end, kill, fork, join )

– 動作 ( mapreduce/java/pig/hive )

• 不用寫 code ,用 xml 定義流程

32figure Source : http://www.slideshare.net/martyhall/hadoop-tutorial-oozie

Page 33: Hadoop ecosystem - hadoop 生態系

http://oozie_server:11000/

33

Page 34: Hadoop ecosystem - hadoop 生態系

回顧

• ETL

– Apache Flume

– Apache Sqoop

• DB

– Apache Hbase

– Apache Hive

– Apache Impala

• Calculate

– Apache Pig

– Apache Mahout

– R Hadoop

• WorkFlow

– Apache OOZIE

34

Page 35: Hadoop ecosystem - hadoop 生態系

Advice

• 在巨量資料領域中Hadoop是目前最多人使用的框架,在這之上,你可以更聰明的使用它

• 資料不夠大時,難以發揮Hadoop大資料分析的效益

• 大數據人才:懂資工、統計還不夠,還要會說故事

– 一個能擔當資料科學的完整團隊,最好包括四種角色:懂資訊科學的程式設計師、懂統計學的資料分析師、懂圖像呈現,善於包裝傳達的圖像設計師與擁有產業知識的專案推動者。(2014 年 4 月號 《遠見雜誌》 第 334 期)

• 小心別掉進陷阱裡,大數據專案失敗的八個理由

– (Yahoo)

35

Page 36: Hadoop ecosystem - hadoop 生態系

backup

Page 37: Hadoop ecosystem - hadoop 生態系

Pig example result

37

A = LOAD '/user/waue/pig_input/file1.txt' using PigStorage(',') AS (nm, dp, id) ;B = LOAD '/user/waue/pig_input/file2.txt' using PigStorage(',') AS (id, dt, hr) ;C = FILTER B by hr > 8;D = JOIN C BY id, A BY id;E = GROUP D BY A::id;F = FOREACH E GENERATE $1.dp,group,$1.nm, AVG($1.hr);STORE F INTO '/tmp/pig_output/';

Page 38: Hadoop ecosystem - hadoop 生態系

Hive example result

38

INSERT OVERWRITE TABLE finalselect a.id, collect_set(a.dp), collect_set(a.nm), avg(b.hr) from a,b where b.hr > 8 and b.id = a.id group by a.id;


Recommended