SlideShare a Scribd company logo
Apache Hadoop Project
2011/12/16
大綱• 什麼是Hadoop?
• 誰在用Hadoop?
• Apache Hadoop : HDFS
– 系統假設
– 系統架構
– 執行流程
– 容錯機制:備份
– 容錯機制:Safemode
• Apache Hadoop : MapReduce
– MapReduce 框架
– Wordcount 範例
– 容錯機制: Speculative Execution
• 推薦的硬體設備
Hadoop ?
Hadoop是一個開發平台
讓我們可以簡單的撰寫和執行程式
處理大量的資料
Hadoop
什麼是Hadoop?
• Hadoop的特性
– 透過分散式運算提升大資料處理的效能.
– 具備可靠且可擴充的性質.
– 不須使用高等容錯的伺服器也能讓整個系統的
壽命提升.
– open-source軟體.
….
X
I still work!
什麼是Hadoop?(Cont.)
2005
為了平行化Lucene, Doug Cutting
根據Google的論文實作了Hadoop
Hi!我是
道格2003
2004
Google發表了Google File System
和Google MapReduce兩篇論文
時間軸
Hadoop成為Apache的計畫
並且發布了第一個版本
2006,4
2006,3道格加入了Yahoo,幫助Yahoo
建置Hadoop系統
209sec v.s. 297sec
Yahoo的Hadoop系統在大資料排
序的比賽創造了新的紀錄 2008
2009
道格加入了Cloudera,開發更進階的
Hadoop系統並提供Hadoop企業方案
什麼是Hadoop?(Cont.)
• Hadoop包含下列子計畫
– Hadoop Common(Hadoop Core)
– Hadoop Distributed File System(HDFS)
• 提供容錯機制的分散式檔案系統
– Hadoop MapReduce
• 提供容錯機制的分散式程式框架
HDFS
什麼是Hadoop?(Cont.)
• 其他與Hadoop相關的Apache計畫:
HBase
分散式的資料庫系統,適用隨機
且即時的存取龐大資料
Cassandra
起初為Facebook所開發,使用P2P概
念實作的分散式資料庫
誰在用Hadoop?
Ads
OptimizationMachine
Learning
(e.g. Spam
filters)
當您拜訪Yahoo,您將看到不少被Hadoop處理過的資料!
https://opencirrus.org/system/files/OpenCirrusHadoop2009.ppt
Search Index
誰在用Hadoop?
Linkedin使用Hadoop技術分析您可能認識那些人,幫助您建立與客戶的關係
http://www.slideshare.net/ydn/6-data-
applicationlinkedinhadoopsummmit2010
誰在用Hadoop?
從望遠鏡觀測得到的大量的圖片中找尋恆星的位置
http://www.cloudera.com/resource/hw10_tec
hniques_to_use_hadoop_with_scientific_data
誰在用Hadoop?
生物辨識的技術也可能面臨大資料分析的困境,
此技術可用於身分認證登入或者協助警方辦案
http://www.cloudera.com/resource/hadoop-world-2010-fuzzy-
table-distributed-fuzzy-matching-database-booz-allen-hamilton
誰在用Hadoop?
http://wiki.apache.org/hadoop/PoweredBy
We are Hadoop Fans!
• Apache Hadoop : HDFS
– 系統假設
– 系統架構
– 執行流程
– 容錯機制:備份
– 容錯機制:Safemode
Apache Hadoop : HDFS
• 系統假設
– 硬體總會出現錯誤
– 大型檔案(>100MB)
– 少量的隨機存取
– 簡單的同步機制
– 具備移植性
– 屬於批次運算
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client NameNode
File
Namespace
Local FS Local FS Local FS
….. …..DataNode DataNode DataNode
• HDFS系統架構
NameNode 扮演
HDFS管理者的角色,
負責告訴Client該去
哪個DataNode存取
檔案
DataNode 儲存
檔案並且處理
Client的要求
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client NameNode
File
Namespace
Local FS Local FS Local FS
….. …..DataNode DataNode DataNode
HeartBeat
Message
META-DATA
Message
DATA
Transfer
DATA
Request
• HDFS系統架構
Apache Hadoop : HDFS(Cont.)
• 若檔案想要儲存在HDFS上,檔案則會根據固
定大小切割成多個Block
Apache Hadoop is a software framework
to build large-scale, shared storage and
computing infrastructures. Hadoop
clusters are used for a variety of research
and development projects, and for a
growing number of production processes
at Yahoo!, EBay, Facebook, LinkedIn,
Twitter, and other companies in the
industry. It is a key component in several
business critical endeavors representing
a very significant investment and
technology component. Thus,
appropriate usage of the clusters and
Hadoop is critical in ensuring that we
reap the best possible return on this
investment.This blog post represents
compendium of best practices for
applications running on Apache Hadoop.
In fact, we introduce the notion of aGrid
Pattern which, similar to a Design
Pattern, represents a general reusable
solution for applications running on the
Grid.
Blk1
Blk2
Blk3
Apache Hadoop : HDFS(Cont.)
DataNode
DataNode
DataNode
DataNode
DataNode
DataNode
…
…
Blk1
Blk1
Blk1
…
NameNode
DataNode
DataNode
DataNode
DataNode
DataNode
…
…
Blk2
Blk2
… Blk2
Internet
• Rack Awareness
– Block備份個數至少為三份,必須有兩份備份放在同一個
機櫃的不同機器上,其餘備份分散儲存在其他的機櫃上.
Setting
Rack 1 Rack 2 Rack 3 Rack 4
IDC 1 IDC 2
Blk2
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client NameNode
File
Namespace
Local FS Local FS Local FS….. …..
DataNode 1 DataNode 8 DataNode 100
1,CREATE
(index.html,block1)
2,RESPONSE
(file-handle,[node8,node1,node100])
PRIMARY
REPLICA
SECONDARY
REPLICA
SECONDARY
REPLICA
• HDFS寫入新檔執行流程
3,TRANSFER
(‘<head></head><body><div>這是一個Hadoop的介紹網站</div></body>’)
4,REQUEST
(file-handle)5,FINISH
Client想把index.html的第一個
block寫入HDFS
NameNode回復Client, file handle
與負責寫入備份的DataNode
Client把資料傳給最近的
DataNode並依距離接續傳輸
Client把寫入請求先交給主要備
份,由主要備份交給次要備份
次要備份完成寫入後回傳Finish
給主要備份,主要備份也完成後
才交付Finish 給 Client
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client NameNode
File
Namespace
Local FS Local FS Local FS
….. …..DataNode 1 DataNode 8 DataNode 100
1,READ
(index.html,block1)
2,RESPONSE
(file-handle,node1)
• HDFS讀檔執行流程
4,TRANSFER
(‘<div>這是一個Hadoop的介紹網站</div>’)
3,REQUEST
(file-handle, bytes-range)
Client想從HDFS讀取index.html的
第一個block
NameNode回復有資料的
DataNode位址與file handle
Client把file handle以及想讀取的
範圍交給DataNode
DataNode把資料回傳給Client
Apache Hadoop : HDFS(Cont.)
• 啟動備份機制的情況:
– 建立檔案
– 重新備份
– 平衡負載
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client
NameNode
File
Namespace
Local FS Local FS Local FS
….. …..DataNode 1 DataNode 8 DataNode 100
• HDFS重新備份範例說明
假設DataNode8突然損壞
DataNode需要週期性的向
NameNode回報未遺失的Block ID
NameNode發現Block 1的備份不
足三份,要求DataNode 1把Block 1
寫入 DataNode 80
DataNode 1執行重新備份的動作
Blk1 Blk2 Blk1 Blk2
X
Request
Recovery
Blk1
Local FS
DataNode 80…..
Blk2
HeartBeat
Message
Blk1
Copy Blk1 into DataNode 80
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client
NameNode
File
Namespace
Local FS Local FS Local FS
….. …..DataNode 1 DataNode 8 DataNode 100
• HDFS平衡附載範例說明
經過長時間的運作,HDFS上的
DataNode的Block分布可能為不
平均
DataNode需要週期性的向
NameNode回報未遺失的Block ID
NameNode發現DataNode 80閒
置,為了平均DataNode負擔,要求
把DataNode 1的Block 1移至
DataNode 80
DataNode 1將Block1移至
DataNode 80的動作
Blk1 Blk2 Blk1 Blk2
Request
Balancing
Loads
Blk1
Local FS
DataNode 80…..
Blk2
HeartBeat
Message
Copy Blk1 into DataNode 100
[BlockID1,
BlockID2]
Blk1
[ ]
Apache Hadoop : HDFS(Cont.)
• Block備份是可能被NameNode認定為遺失的
– DataNode硬碟磁區損壞
– 網路中斷DataNode無法送Heartbeat訊息給NameNode
• 當突然有過多的Block備份遺失時則會啟動Safemode
• 與Safemode有關的兩個參數
– 若某個Block未遺失的備份個數低於Block安全門檻
則該Block為危險
– 若整個HDFS危險的Block個數高於HDFS安全門檻(%)
則HDFS為危險
※此兩個參數與每個Block備份的個數是不同的參數
Safemode
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client
NameNode
File
Namespace
Local FS Local FS Local FS
DataNode 1 DataNode 8 DataNode 100
• HDFS SafeMode說明
假設DataNode8和80突然損壞
DataNode需要週期性的向
NameNode回報未遺失的Block ID
Block安全門檻為2並且
HDFS安全門檻 為1/3
Blk1 Blk2 Blk2Blk1
Local FS
DataNode 80
Blk2
HeartBeat
Message
Blk3 Blk3 Blk3
X XLocal FS
DataNode 35
Blk1
[BlockID1]
NameNode發現有1/3的Block為
危險所以啟動SafeMode
Blk1 有3份 -> 安全
Blk2 有2份 -> 安危險
Blk3 有1份 ->危險
1/3的Block為危險
->HDFS危險
Safemode
Apache Hadoop : HDFS(Cont.)
Application
HDFS API
Client
NameNode
File
Namespace
Local FS Local FS Local FS
DataNode 1 DataNode 8 DataNode 100
• HDFS SafeMode說明
NameNode要求把備份數不足的
Block補足
DataNode需要週期性的向
NameNode回報未遺失的Block ID
NameNode發現所有Block都為安
全,但並未馬上解除SafeMode
Blk1 Blk2
Blk2Blk1
Local FS
DataNode 80
Blk2
HeartBeat
Message
Blk3 Blk3 Blk3
X XLocal FS
DataNode 35
Blk1
[BlockID1,
BlockID2,
BlockID3]
經過30秒後NameNode判定HDFS
仍為安全才解除SafeMode
Copy Blk1,Blk2,Blk3 into DataNode 35, 100
Blk3Blk2 Blk3
Blk1 有3份 -> 安全
Blk2 有3份 -> 安全
Blk3 有3份 -> 安全
沒有Block為危險
->HDFS安全
• Apache Hadoop : MapReduce
– MapReduce 框架
– Wordcount 範例
– 容錯機制:Speculative Execution
Apache Hadoop : MapReduce
• MapReduce框架用於處理大量的資料
• 程式設計師必須撰寫 map 以及 reduce程式.
• 為什麼要使用MapReduce?
多執行緒
程式設計 摩爾定律
已死?
Socket網路
程式設計 一切都須
重新開始
MPI
程式設計 程式難以維護
不太具備容錯能力
MapReduce
程式設計
只需擔心
不如多買幾台電腦
一起跑吧
有沒有寫好的
框架呢?
這彷彿是一條
不歸路
不然… 不然… …
不如我們試試看Hadoop吧
Apache Hadoop : MapReduce(Cont.)
• 所以當您使用MapReduce,您無須擔心
– 怎麼撰寫網路傳輸程式
– 怎麼撰寫程式處理同步或死結
– 怎麼撰寫程式處理容錯
Without Hadoop With Hadoop
Apache Hadoop : MapReduce
• map/reduce程式執行後成為map/reduce tasks
• 一個 job 包含map tasks 和 reduce tasks
• 一個job執行時, 其reduce tasks必須等待
map tasks都完成才可接著執行
map1
map2
map1
map2
reduce1
reduce2
reduce1map3
時間軸Job1的
Map階段
完成
Job2的
Map階段
完成
Job1的
Reduce階段
完成
Job2的
Reduce階段
完成
Hadoop
啟動
假設最大運行的
機器數量為4
Job1的task
Job2的task
server1
server2
server3
server4
Apache Hadoop : MapReduce(Cont.)
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
(e.g. HDFS)
Map Shuffle Reduce
此範例為WordCount, 用途為計算出文章中每個字彙出現的次數
Apache Hadoop : MapReduce(Cont.)
Car,1
Car,1
River,1
River,1
Beer,1
River,1
Car,1
Beer,1
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
(e.g. HDFS)
Map Shuffle Reduce
map(key k, value v):
foreach value v as world w
emit(w,1);
根據程式設計師撰寫的Map程式.
Map收到key為空且value為一行的文字,
對於此行文字內每個字彙為key, 數字1為value,
輸出暫存資料.
Apache Hadoop : MapReduce(Cont.)
Car,1
Car,1
River,1
River,1
Beer,1
River,1
Car,1
Beer,1
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
Beer,1
River,[1,1]
Car,[1,1]
River,1
Beer,1
Car,1
(e.g. HDFS)
Map Shuffle Reduce
每個Map輸出的資料會經過Hash分成多份資料,
若key相同的資料會把value列成一個串列.
如第一個Map有輸出兩筆<River,1>的資料
則Hash過會把兩筆value為1串接成串列[1, 1].
Apache Hadoop : MapReduce(Cont.)
Car,1
Car,1
River,1
River,1
Beer,1
River,1
Car,1
Beer,1
Beer,[1,1]
Car,[1,1,1]
River,
[1,1,1]
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
Beer,1
River,[1,1]
Car,[1,1]
River,1
Beer,1
Car,1
(e.g. HDFS)
Map Shuffle Reduce
此例Hash在每份產生最多2份資料區塊,
接下來將每份Hash後的資料
集中送給負責Reduce的機器
並對相同key的value在做串接的動作
Apache Hadoop : MapReduce(Cont.)
Car,1
Car,1
River,1
River,1
Beer,1
River,1
Car,1
Beer,1
Beer,[1,1]
Car,[1,1,1]
River,
[1,1,1]
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
Beer,1
River,[1,1]
Car,[1,1]
River,1
Beer,1
Car,1
Beer,2
Car,3
River,3
(e.g. HDFS)
reduce(key k, list<value> vs):
int count = 0;
foreach list<value> vs as value v
count+=v;
emit(k,count);
Map Shuffle Reduce
根據程式設計師撰寫的Reduce程式.
每個Reduce處理Shuffle集中完的資料區塊,
此處負責總和串列中的數字並以
字彙為key,總和的數字為value
輸出至結果檔案
Apache Hadoop : MapReduce(Cont.)
Car,1
Car,1
River,1
River,1
Beer,1
River,1
Car,1
Beer,1
Beer,[1,1]
Car,[1,1,1]
River,
[1,1,1]
River Beer
River
Car Car
River
Car Beer
input file
Beer,2
Car,3
River,3
output files
file 1
file 2
Beer,1
River,[1,1]
Car,[1,1]
River,1
Beer,1
Car,1
Beer,2
Car,3
River,3
(e.g. HDFS)
reduce(key k, list<value> vs):
int count = 0;
foreach list<value> vs as value v
count+=v;
emit(k,count);
map(key k, value v):
foreach value v as world w
emit(w,1);
Map Shuffle Reduce
Apache Hadoop : MapReduce(Cont.)
• MapReduce framework 為主從式架構,包含
– master稱為 JobTracker. master只有一個
– slave稱為 TaskTracker. slave可有多個
• JobTracker 主要負責
– 排班等待中的tasks
– 監控正在執行的 tasks.
– 重新執行失敗的 tasks.
• TaskTracker 則負責執行JobTracker交付的
map task或reduce task
Apache Hadoop : MapReduce(Cont.)
JobTracker
Slot
Slot
Slot
Slot
Slot
RPC
Call
MapReduce
Program
MapReduce
library
Client
(e.g. HDFS)
Input
file
split 1
split 2
split 3
output
files
TaskTrackers TaskTrackers
file 1
file 2
buffer
disk
buffer
buffer
disk
disk
buffer
buffer
Map Map ReduceReduce
JobQueue
Job
Map
MapReduce library先和檔案
系統取得檔案切割的位址
把MapReduce程式和相關資
料打包成Job送給JobTracker
進入JobQueue做排班
等到該Job執行時會將Task分
派給各個TaskTracker
Map根據相對應的檔案切割
位址取得輸入資料
Map執行時產生的資料將存
在 buffer
TaskTracker會監控buffer是否
以滿,當buffer滿了則寫入disk
負責Reduce的TaskTracker透
過RPC取得Map執行完的資料
Reduce執行時產生的資料則
寫入buffer做為緩衝
TaskTracker把buffer內的資料
寫入output file
Apache Hadoop : MapReduce(Cont.)
• 可能存在某些節點導致程式執行相當緩慢
• Speculative execution - Hadoop 將閒置的節
點執行重複的資料
960 sec 1283 sec
推薦的硬體設備
• Cloudera認為判斷哪些工作適用於Hadoop是很
重要的
• DataNode/TaskTracker
– 4 1TB hard disks in a JBOD configuration
– 2 quad core CPUs, running at least 2-2.5GHz
– 16-24GBs of RAM
– Gigabit Ethernet
• Namenodes 以及 Jobtrackers, 若能支援RAID或者
額外的power是較佳的
• Namenodes 也需要額外的記憶體紀錄檔案系統
的結構
HDFS與MapReduce架構研討
附錄 :如何設定Rack資訊
<property>
<name>topology.script.file.name</name>
<value>/home/hadoop/topology.py</value>
</property>
RACK_MAP = {
'208.94.2.10' : '/datacenter1/rack0',
'1.2.3.4' : '/datacenter1/rack0',
'1.2.3.5' : '/datacenter1/rack1',
'1.2.3.6' : '/datacenter1/rack1',
'10.2.3.4' : '/datacenter2/rack0',
'10.2.3.4' : '/datacenter2/rack0'
}
hadoop-site.xml
topology.py
Back

More Related Content

PDF
03_AWS IoTのDRを考える
PDF
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
PDF
Running Word2Vec with Chinese Wikipedia dump
PDF
SQL injection and SQLMap Introduction
PPTX
Hadoop HDFS NameNode HA
PDF
A Distributed System for Recognizing Home Automation Commands and Distress Ca...
PDF
Word2vec on the italian language: first experiments
PDF
Word embeddings as a service - PyData NYC 2015
03_AWS IoTのDRを考える
C34 ニッチだけど、社会インフラを支えるデータベース、HiRDB ~HiRDBを選ぶ人、選ばない人、その選択基準とは~ by Taichi Ishikawa
Running Word2Vec with Chinese Wikipedia dump
SQL injection and SQLMap Introduction
Hadoop HDFS NameNode HA
A Distributed System for Recognizing Home Automation Commands and Distress Ca...
Word2vec on the italian language: first experiments
Word embeddings as a service - PyData NYC 2015

Viewers also liked (20)

PDF
Build Message Bot With Neural Network
PDF
Extending Word2Vec for Performance and Semi-Supervised Learning-(Michael Mala...
PPTX
Hadoop HDFS Concepts
PPTX
A Simple Introduction to Word Embeddings
PDF
淺談HTTP發展趨勢與SPDY
PDF
Google Analytics as Database of Record
PDF
Emmelienkneppersefashionv1 3zondernotes-zondertommyh-110624113149-phpapp01 (2)
PDF
Guia de estudio metodologia de la investigacion se puede bajar universidad s...
PPT
جاى بذبيحة حمد
PPT
Political knowledge 2007
PDF
Daily Newsletter: 18th August, 2011
PPT
พิชิตชัยชาญ วรรณบุตร
PDF
Social Media Strategies for highly sucessful Virtual Events
PPTX
PLACA MADRE Y SUS COMPONENTES
PPT
InvestigacióN 6to AñO B
PDF
Intro to vc funding june 2015
PPT
Getting Started With Virtualization
PDF
Daily Newsletter: 19th January, 2011
PPTX
Universidad nacional ecológica israel mendoza completar
PDF
10 porques-igualdad
Build Message Bot With Neural Network
Extending Word2Vec for Performance and Semi-Supervised Learning-(Michael Mala...
Hadoop HDFS Concepts
A Simple Introduction to Word Embeddings
淺談HTTP發展趨勢與SPDY
Google Analytics as Database of Record
Emmelienkneppersefashionv1 3zondernotes-zondertommyh-110624113149-phpapp01 (2)
Guia de estudio metodologia de la investigacion se puede bajar universidad s...
جاى بذبيحة حمد
Political knowledge 2007
Daily Newsletter: 18th August, 2011
พิชิตชัยชาญ วรรณบุตร
Social Media Strategies for highly sucessful Virtual Events
PLACA MADRE Y SUS COMPONENTES
InvestigacióN 6to AñO B
Intro to vc funding june 2015
Getting Started With Virtualization
Daily Newsletter: 19th January, 2011
Universidad nacional ecológica israel mendoza completar
10 porques-igualdad
Ad

Similar to HDFS與MapReduce架構研討 (20)

PPTX
Hadoop 介紹 20141024
PPT
Hdfs introduction
PDF
DRBL-live-hadoop at TSLC
PDF
Heartbeat+my sql+drbd构建高可用mysql方案
PDF
Zh tw introduction_to_hadoop and hdfs
PDF
Track1dongsiying4
PDF
大规模数据处理
PDF
大规模数据处理
PDF
百度系统部分布式系统介绍 马如悦 Sacc2010
PPT
淘宝分布式数据处理实践
PPT
Hadoop Map Reduce 程式設計
PDF
How to plan a hadoop cluster for testing and production environment
PPT
Voldemort Intro Tangfl
DOCX
Oda安装 恢复步骤
PPTX
What could hadoop do for us
PDF
分布式索引构建
PDF
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
PDF
Hadoop Deployment Model @ OSDC.TW
PDF
Hadoop基线选定
PPTX
Sth About SSD
Hadoop 介紹 20141024
Hdfs introduction
DRBL-live-hadoop at TSLC
Heartbeat+my sql+drbd构建高可用mysql方案
Zh tw introduction_to_hadoop and hdfs
Track1dongsiying4
大规模数据处理
大规模数据处理
百度系统部分布式系统介绍 马如悦 Sacc2010
淘宝分布式数据处理实践
Hadoop Map Reduce 程式設計
How to plan a hadoop cluster for testing and production environment
Voldemort Intro Tangfl
Oda安装 恢复步骤
What could hadoop do for us
分布式索引构建
善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1
Hadoop Deployment Model @ OSDC.TW
Hadoop基线选定
Sth About SSD
Ad

HDFS與MapReduce架構研討

  • 2. 大綱• 什麼是Hadoop? • 誰在用Hadoop? • Apache Hadoop : HDFS – 系統假設 – 系統架構 – 執行流程 – 容錯機制:備份 – 容錯機制:Safemode • Apache Hadoop : MapReduce – MapReduce 框架 – Wordcount 範例 – 容錯機制: Speculative Execution • 推薦的硬體設備
  • 4. Hadoop 什麼是Hadoop? • Hadoop的特性 – 透過分散式運算提升大資料處理的效能. – 具備可靠且可擴充的性質. – 不須使用高等容錯的伺服器也能讓整個系統的 壽命提升. – open-source軟體. …. X I still work!
  • 5. 什麼是Hadoop?(Cont.) 2005 為了平行化Lucene, Doug Cutting 根據Google的論文實作了Hadoop Hi!我是 道格2003 2004 Google發表了Google File System 和Google MapReduce兩篇論文 時間軸 Hadoop成為Apache的計畫 並且發布了第一個版本 2006,4 2006,3道格加入了Yahoo,幫助Yahoo 建置Hadoop系統 209sec v.s. 297sec Yahoo的Hadoop系統在大資料排 序的比賽創造了新的紀錄 2008 2009 道格加入了Cloudera,開發更進階的 Hadoop系統並提供Hadoop企業方案
  • 6. 什麼是Hadoop?(Cont.) • Hadoop包含下列子計畫 – Hadoop Common(Hadoop Core) – Hadoop Distributed File System(HDFS) • 提供容錯機制的分散式檔案系統 – Hadoop MapReduce • 提供容錯機制的分散式程式框架 HDFS
  • 13. • Apache Hadoop : HDFS – 系統假設 – 系統架構 – 執行流程 – 容錯機制:備份 – 容錯機制:Safemode
  • 14. Apache Hadoop : HDFS • 系統假設 – 硬體總會出現錯誤 – 大型檔案(>100MB) – 少量的隨機存取 – 簡單的同步機制 – 具備移植性 – 屬於批次運算
  • 15. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS ….. …..DataNode DataNode DataNode • HDFS系統架構 NameNode 扮演 HDFS管理者的角色, 負責告訴Client該去 哪個DataNode存取 檔案 DataNode 儲存 檔案並且處理 Client的要求
  • 16. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS ….. …..DataNode DataNode DataNode HeartBeat Message META-DATA Message DATA Transfer DATA Request • HDFS系統架構
  • 17. Apache Hadoop : HDFS(Cont.) • 若檔案想要儲存在HDFS上,檔案則會根據固 定大小切割成多個Block Apache Hadoop is a software framework to build large-scale, shared storage and computing infrastructures. Hadoop clusters are used for a variety of research and development projects, and for a growing number of production processes at Yahoo!, EBay, Facebook, LinkedIn, Twitter, and other companies in the industry. It is a key component in several business critical endeavors representing a very significant investment and technology component. Thus, appropriate usage of the clusters and Hadoop is critical in ensuring that we reap the best possible return on this investment.This blog post represents compendium of best practices for applications running on Apache Hadoop. In fact, we introduce the notion of aGrid Pattern which, similar to a Design Pattern, represents a general reusable solution for applications running on the Grid. Blk1 Blk2 Blk3
  • 18. Apache Hadoop : HDFS(Cont.) DataNode DataNode DataNode DataNode DataNode DataNode … … Blk1 Blk1 Blk1 … NameNode DataNode DataNode DataNode DataNode DataNode … … Blk2 Blk2 … Blk2 Internet • Rack Awareness – Block備份個數至少為三份,必須有兩份備份放在同一個 機櫃的不同機器上,其餘備份分散儲存在其他的機櫃上. Setting Rack 1 Rack 2 Rack 3 Rack 4 IDC 1 IDC 2 Blk2
  • 19. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS….. ….. DataNode 1 DataNode 8 DataNode 100 1,CREATE (index.html,block1) 2,RESPONSE (file-handle,[node8,node1,node100]) PRIMARY REPLICA SECONDARY REPLICA SECONDARY REPLICA • HDFS寫入新檔執行流程 3,TRANSFER (‘<head></head><body><div>這是一個Hadoop的介紹網站</div></body>’) 4,REQUEST (file-handle)5,FINISH Client想把index.html的第一個 block寫入HDFS NameNode回復Client, file handle 與負責寫入備份的DataNode Client把資料傳給最近的 DataNode並依距離接續傳輸 Client把寫入請求先交給主要備 份,由主要備份交給次要備份 次要備份完成寫入後回傳Finish 給主要備份,主要備份也完成後 才交付Finish 給 Client
  • 20. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS ….. …..DataNode 1 DataNode 8 DataNode 100 1,READ (index.html,block1) 2,RESPONSE (file-handle,node1) • HDFS讀檔執行流程 4,TRANSFER (‘<div>這是一個Hadoop的介紹網站</div>’) 3,REQUEST (file-handle, bytes-range) Client想從HDFS讀取index.html的 第一個block NameNode回復有資料的 DataNode位址與file handle Client把file handle以及想讀取的 範圍交給DataNode DataNode把資料回傳給Client
  • 21. Apache Hadoop : HDFS(Cont.) • 啟動備份機制的情況: – 建立檔案 – 重新備份 – 平衡負載
  • 22. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS ….. …..DataNode 1 DataNode 8 DataNode 100 • HDFS重新備份範例說明 假設DataNode8突然損壞 DataNode需要週期性的向 NameNode回報未遺失的Block ID NameNode發現Block 1的備份不 足三份,要求DataNode 1把Block 1 寫入 DataNode 80 DataNode 1執行重新備份的動作 Blk1 Blk2 Blk1 Blk2 X Request Recovery Blk1 Local FS DataNode 80….. Blk2 HeartBeat Message Blk1 Copy Blk1 into DataNode 80
  • 23. Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS ….. …..DataNode 1 DataNode 8 DataNode 100 • HDFS平衡附載範例說明 經過長時間的運作,HDFS上的 DataNode的Block分布可能為不 平均 DataNode需要週期性的向 NameNode回報未遺失的Block ID NameNode發現DataNode 80閒 置,為了平均DataNode負擔,要求 把DataNode 1的Block 1移至 DataNode 80 DataNode 1將Block1移至 DataNode 80的動作 Blk1 Blk2 Blk1 Blk2 Request Balancing Loads Blk1 Local FS DataNode 80….. Blk2 HeartBeat Message Copy Blk1 into DataNode 100 [BlockID1, BlockID2] Blk1 [ ]
  • 24. Apache Hadoop : HDFS(Cont.) • Block備份是可能被NameNode認定為遺失的 – DataNode硬碟磁區損壞 – 網路中斷DataNode無法送Heartbeat訊息給NameNode • 當突然有過多的Block備份遺失時則會啟動Safemode • 與Safemode有關的兩個參數 – 若某個Block未遺失的備份個數低於Block安全門檻 則該Block為危險 – 若整個HDFS危險的Block個數高於HDFS安全門檻(%) 則HDFS為危險 ※此兩個參數與每個Block備份的個數是不同的參數
  • 25. Safemode Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS DataNode 1 DataNode 8 DataNode 100 • HDFS SafeMode說明 假設DataNode8和80突然損壞 DataNode需要週期性的向 NameNode回報未遺失的Block ID Block安全門檻為2並且 HDFS安全門檻 為1/3 Blk1 Blk2 Blk2Blk1 Local FS DataNode 80 Blk2 HeartBeat Message Blk3 Blk3 Blk3 X XLocal FS DataNode 35 Blk1 [BlockID1] NameNode發現有1/3的Block為 危險所以啟動SafeMode Blk1 有3份 -> 安全 Blk2 有2份 -> 安危險 Blk3 有1份 ->危險 1/3的Block為危險 ->HDFS危險
  • 26. Safemode Apache Hadoop : HDFS(Cont.) Application HDFS API Client NameNode File Namespace Local FS Local FS Local FS DataNode 1 DataNode 8 DataNode 100 • HDFS SafeMode說明 NameNode要求把備份數不足的 Block補足 DataNode需要週期性的向 NameNode回報未遺失的Block ID NameNode發現所有Block都為安 全,但並未馬上解除SafeMode Blk1 Blk2 Blk2Blk1 Local FS DataNode 80 Blk2 HeartBeat Message Blk3 Blk3 Blk3 X XLocal FS DataNode 35 Blk1 [BlockID1, BlockID2, BlockID3] 經過30秒後NameNode判定HDFS 仍為安全才解除SafeMode Copy Blk1,Blk2,Blk3 into DataNode 35, 100 Blk3Blk2 Blk3 Blk1 有3份 -> 安全 Blk2 有3份 -> 安全 Blk3 有3份 -> 安全 沒有Block為危險 ->HDFS安全
  • 27. • Apache Hadoop : MapReduce – MapReduce 框架 – Wordcount 範例 – 容錯機制:Speculative Execution
  • 28. Apache Hadoop : MapReduce • MapReduce框架用於處理大量的資料 • 程式設計師必須撰寫 map 以及 reduce程式. • 為什麼要使用MapReduce? 多執行緒 程式設計 摩爾定律 已死? Socket網路 程式設計 一切都須 重新開始 MPI 程式設計 程式難以維護 不太具備容錯能力 MapReduce 程式設計 只需擔心 不如多買幾台電腦 一起跑吧 有沒有寫好的 框架呢? 這彷彿是一條 不歸路 不然… 不然… … 不如我們試試看Hadoop吧
  • 29. Apache Hadoop : MapReduce(Cont.) • 所以當您使用MapReduce,您無須擔心 – 怎麼撰寫網路傳輸程式 – 怎麼撰寫程式處理同步或死結 – 怎麼撰寫程式處理容錯 Without Hadoop With Hadoop
  • 30. Apache Hadoop : MapReduce • map/reduce程式執行後成為map/reduce tasks • 一個 job 包含map tasks 和 reduce tasks • 一個job執行時, 其reduce tasks必須等待 map tasks都完成才可接著執行 map1 map2 map1 map2 reduce1 reduce2 reduce1map3 時間軸Job1的 Map階段 完成 Job2的 Map階段 完成 Job1的 Reduce階段 完成 Job2的 Reduce階段 完成 Hadoop 啟動 假設最大運行的 機器數量為4 Job1的task Job2的task server1 server2 server3 server4
  • 31. Apache Hadoop : MapReduce(Cont.) River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 (e.g. HDFS) Map Shuffle Reduce 此範例為WordCount, 用途為計算出文章中每個字彙出現的次數
  • 32. Apache Hadoop : MapReduce(Cont.) Car,1 Car,1 River,1 River,1 Beer,1 River,1 Car,1 Beer,1 River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 (e.g. HDFS) Map Shuffle Reduce map(key k, value v): foreach value v as world w emit(w,1); 根據程式設計師撰寫的Map程式. Map收到key為空且value為一行的文字, 對於此行文字內每個字彙為key, 數字1為value, 輸出暫存資料.
  • 33. Apache Hadoop : MapReduce(Cont.) Car,1 Car,1 River,1 River,1 Beer,1 River,1 Car,1 Beer,1 River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 Beer,1 River,[1,1] Car,[1,1] River,1 Beer,1 Car,1 (e.g. HDFS) Map Shuffle Reduce 每個Map輸出的資料會經過Hash分成多份資料, 若key相同的資料會把value列成一個串列. 如第一個Map有輸出兩筆<River,1>的資料 則Hash過會把兩筆value為1串接成串列[1, 1].
  • 34. Apache Hadoop : MapReduce(Cont.) Car,1 Car,1 River,1 River,1 Beer,1 River,1 Car,1 Beer,1 Beer,[1,1] Car,[1,1,1] River, [1,1,1] River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 Beer,1 River,[1,1] Car,[1,1] River,1 Beer,1 Car,1 (e.g. HDFS) Map Shuffle Reduce 此例Hash在每份產生最多2份資料區塊, 接下來將每份Hash後的資料 集中送給負責Reduce的機器 並對相同key的value在做串接的動作
  • 35. Apache Hadoop : MapReduce(Cont.) Car,1 Car,1 River,1 River,1 Beer,1 River,1 Car,1 Beer,1 Beer,[1,1] Car,[1,1,1] River, [1,1,1] River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 Beer,1 River,[1,1] Car,[1,1] River,1 Beer,1 Car,1 Beer,2 Car,3 River,3 (e.g. HDFS) reduce(key k, list<value> vs): int count = 0; foreach list<value> vs as value v count+=v; emit(k,count); Map Shuffle Reduce 根據程式設計師撰寫的Reduce程式. 每個Reduce處理Shuffle集中完的資料區塊, 此處負責總和串列中的數字並以 字彙為key,總和的數字為value 輸出至結果檔案
  • 36. Apache Hadoop : MapReduce(Cont.) Car,1 Car,1 River,1 River,1 Beer,1 River,1 Car,1 Beer,1 Beer,[1,1] Car,[1,1,1] River, [1,1,1] River Beer River Car Car River Car Beer input file Beer,2 Car,3 River,3 output files file 1 file 2 Beer,1 River,[1,1] Car,[1,1] River,1 Beer,1 Car,1 Beer,2 Car,3 River,3 (e.g. HDFS) reduce(key k, list<value> vs): int count = 0; foreach list<value> vs as value v count+=v; emit(k,count); map(key k, value v): foreach value v as world w emit(w,1); Map Shuffle Reduce
  • 37. Apache Hadoop : MapReduce(Cont.) • MapReduce framework 為主從式架構,包含 – master稱為 JobTracker. master只有一個 – slave稱為 TaskTracker. slave可有多個 • JobTracker 主要負責 – 排班等待中的tasks – 監控正在執行的 tasks. – 重新執行失敗的 tasks. • TaskTracker 則負責執行JobTracker交付的 map task或reduce task
  • 38. Apache Hadoop : MapReduce(Cont.) JobTracker Slot Slot Slot Slot Slot RPC Call MapReduce Program MapReduce library Client (e.g. HDFS) Input file split 1 split 2 split 3 output files TaskTrackers TaskTrackers file 1 file 2 buffer disk buffer buffer disk disk buffer buffer Map Map ReduceReduce JobQueue Job Map MapReduce library先和檔案 系統取得檔案切割的位址 把MapReduce程式和相關資 料打包成Job送給JobTracker 進入JobQueue做排班 等到該Job執行時會將Task分 派給各個TaskTracker Map根據相對應的檔案切割 位址取得輸入資料 Map執行時產生的資料將存 在 buffer TaskTracker會監控buffer是否 以滿,當buffer滿了則寫入disk 負責Reduce的TaskTracker透 過RPC取得Map執行完的資料 Reduce執行時產生的資料則 寫入buffer做為緩衝 TaskTracker把buffer內的資料 寫入output file
  • 39. Apache Hadoop : MapReduce(Cont.) • 可能存在某些節點導致程式執行相當緩慢 • Speculative execution - Hadoop 將閒置的節 點執行重複的資料 960 sec 1283 sec
  • 40. 推薦的硬體設備 • Cloudera認為判斷哪些工作適用於Hadoop是很 重要的 • DataNode/TaskTracker – 4 1TB hard disks in a JBOD configuration – 2 quad core CPUs, running at least 2-2.5GHz – 16-24GBs of RAM – Gigabit Ethernet • Namenodes 以及 Jobtrackers, 若能支援RAID或者 額外的power是較佳的 • Namenodes 也需要額外的記憶體紀錄檔案系統 的結構
  • 42. 附錄 :如何設定Rack資訊 <property> <name>topology.script.file.name</name> <value>/home/hadoop/topology.py</value> </property> RACK_MAP = { '208.94.2.10' : '/datacenter1/rack0', '1.2.3.4' : '/datacenter1/rack0', '1.2.3.5' : '/datacenter1/rack1', '1.2.3.6' : '/datacenter1/rack1', '10.2.3.4' : '/datacenter2/rack0', '10.2.3.4' : '/datacenter2/rack0' } hadoop-site.xml topology.py Back

Editor's Notes

  • #2: 先做出HDFS, MapReduce的簡報
  • #3: 把標題列清楚完整一點 [新]加入頁數
  • #4: 點出重要的字
  • #5: 點出重要的字
  • #6: [新]調整時間軸從下往上
  • #7: 不要講Hadoop Common太久 解釋清楚Hadoop Common, HDFS, MapReduce之間的關係. 介紹HBase , Pig, Cassandra的用途.
  • #8: 不要講Hadoop Common太久 解釋清楚Hadoop Common, HDFS, MapReduce之間的關係. 介紹HBase , Pig, Cassandra的用途. [新]Hbase調大 [新]加入fb和twitter的icon
  • #9: [新] 確認一下中文網站是否也是一樣 [新]把文字拉到前面加入標題 [新] reference的網頁可以改成用超連結 例如 => 資料來源 (Cloudera會議(超連結))
  • #12: [新]處會時可以提有人這麼做(創新提案有人說Hadoop比較適合文字描述)
  • #13: 把文字換成圖示 不要用PaaS,SaaS,IaaS表示 .
  • #14: System assuptions -> GFS architecture -> GFS flow -> Replica placement policy -> Safemode.
  • #15: 舉例Random access和Sequential acess的情況
  • #16: 用文字方塊描述NameNode, DataNode的功能. [新] 先說明NameNode在說明DataNode [新] 若是可以先有個概觀的名詞解釋
  • #17: 用文字方塊描述NameNode, DataNode的功能. [新]Bottleneck瓶頸的部分要寫出來
  • #19: 用圖片介紹3種備份的動作情況. 圖片中沒有NameNode. 怎麼知道Block放的DataNode放在同一個rack. [新]當只有一個機櫃 , 此處的描述就有問題. 其餘備份找不到其他機櫃 [新]Blk2顯示時把Blk1蓋掉,同時有三分和四份很奇怪
  • #20: [新]劃一個Block用動作表示從DataNode1傳輸至DataNode100 [新]Primary and Secondary Replica換成中文 [新] index.html會讓人覺得不只第一個block 藍色框的文字描述可以加上箭頭並且用箭頭讓最後一個步驟只到第一個步驟 [新]此類的藍色框都須加上編號
  • #21: 流程改成動畫,先Write再Read, 畫出Block與File的關係. [新]為什麼選DataNode1
  • #22: 用圖片介紹3種備份的動作情況. 圖片中沒有NameNode. 怎麼知道Block放的DataNode放在同一個rack.
  • #23: 流程改成動畫,先Write再Read, 畫出Block與File的關係. [新]Block移動做成動畫,不要用未遺失 [新]DataNode8有分Block損壞或者機器損毀 要分開講解 [新]包含道DataNode8恢復才算完整
  • #24: 流程改成動畫,先Write再Read, 畫出Block與File的關係.
  • #25: 是甚麼情況會產生資料損毀導致第一個階段少了blk3的備份. READONLY要包含Name Node紅色區塊看起來像只有Datanode [新]不要用HDFS為危險, 直接說HDFS進入Safemode. [新]先解釋Safemode的動作,NameNode拒絕寫的要求之類的 [新]”某個”改用”單一”
  • #26: 流程改成動畫,先Write再Read, 畫出Block與File的關係. [新] 不要用未遺失改用擁有?
  • #27: 流程改成動畫,先Write再Read, 畫出Block與File的關係. [新] 不要用未遺失改用擁有?
  • #30: 不要這一頁
  • #31: 不要這一頁