• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Hadoop, HBase and Zookeeper at Tamtay
 

Hadoop, HBase and Zookeeper at Tamtay

on

  • 4,129 views

A long presentation in Vietnamese about how to apply HBase and Hadoop at Tamtay social network.

A long presentation in Vietnamese about how to apply HBase and Hadoop at Tamtay social network.

Statistics

Views

Total Views
4,129
Views on SlideShare
3,764
Embed Views
365

Actions

Likes
4
Downloads
0
Comments
0

3 Embeds 365

http://www.sonbn.com 357
http://www.docshut.com 5
http://localhost:3909 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Tínhtoánphântán: tínhtoán song songtrênnhiềumáy.Reliable: độ tin cậycủahệthống.Scalable: khảnăngmởrộnghệthốngkhikhốilượngcôngviệctănglên, chịutảicaohơn. Vídụxemáylàkhông scalable, tàuhỏalà scalable.
  • HDFS tạoranhiềubảnsaocủatừngkhốidữliệuvàphântánđicácmáycài Hadoop tronghệthống
  • ACID: bốn thuộc tính quan trọng của một hệ quản trị cơ sở dữ liệu khi xử lý bất kỳ giao dịch nào

Hadoop, HBase and Zookeeper at Tamtay Hadoop, HBase and Zookeeper at Tamtay Presentation Transcript

  • &
    son.bui@tamtay.vn
    May, 2011
  • Hadoop làgì
    Là 1 dựán Open Source!
    Phụcvụchoviệctínhtoánphântán.
    Đảmbảotính reliable & scalable.
    Tínhtoánphântán?
    Reliable?
    Scalable?
  • Ai dùng Hadoop
    Facebook
    Ning
    Last.fm
    Linkedin
    Twitter
    Yahoo
    Google
    … Tamtay
  • Thànhphầncủa Hadoop
    Thànhphần:
    Hadoop Distributed File System (HDFS)
    Hadoop MapReduce
    Cácdựánliênquan
    Avro
    Cassandra
    Chukwa
    HBase database
    Hive data warehouse
    Mahout
    Pig
    ZooKeeper coordination service
  • Thànhphầncủa Hadoop
    Thànhphần:
    Hadoop Distributed File System (HDFS)
    Hadoop MapReduce
    Cácdựánliênquan
    Avro
    Cassandra
    Chukwa
    HBase database
    Hive data warehouse
    Mahout
    Pig
    ZooKeepercoordination service
  • HDFS
    Hệthốnglưutrữ file phântántrênnền Hadoop
    Phântán: tin cậy & nhanh?
    Tươngtác:
    Shell
    Java API
  • Kiếntrúc HDFS
    Master – Slaves
    Master: Namenode
    Slaves: Datanodes
  • HDFS Admin
  • Thànhphầncủa Hadoop
    Thànhphần:
    Hadoop Distributed File System (HDFS)
    Hadoop MapReduce
    Cácdựánliênquan
    Avro
    Cassandra
    Chukwa
    HBase database
    Hive data warehouse
    Mahout
    Pig
    ZooKeepercoordination service
  • Tínhtoántuầntựvs song song
    Tuầntự: việcsauphụthuộcviệctrước
    Sinh con
    Tìm partner
    xxx
    Cóbầu
    Sinh con
    Tínhsố Fibonacci
    F(n) = F(n-1) + F(n-2)
  • Tínhtoántuầntựvs song song
    Song song: thựchiệnđồngthời, khôngphụthuộcvàonhau.
    Tàunhanh
    Có n toa
    Lên & xuốngtàu: cóthể song songở n toa. Toa x khôngphụthuộcvàotoa y, z …
    Tínhsố Pi = 3.141…
    Ac = pi * r2 => pi = Ac / r2
    As = 4r2 => r2 = As / 4
    pi = 4 * Ac / As
  • Map Reduce Algorithm
    Cónhiềuphươngpháp song songhóa
    Map-Reduce là 1 phươngpháp.
    Có 1 lớpcácgiảithuậtcóthể song songhóabằng Map-Reduce (khôngphảitấtcả!)
    Rấtđơngiản: chỉbaogồm 2 hàm
    Map(input_key, input_value) => {output_key, output_value}
    Reduce(input_key, input_values[]) => output
  • Map Reduce Algorithm
  • Hadoop Map Reduce
    programming model and software framework dànhchocácứngdụngxửlý song songkhốilượngcựclớndữliệulưutrữtrênhệthốngphântán.
    (input) <k1, v1> => map=> <k2, v2>
    => combine=>
    <k2, v2s> => reduce=> <k3, v3> (output)
    Data Structure & Algorithm
    Cấutrúcdữliệu: phântán
    Thuậttoán: cóthể song songhóa
  • Google Word Count
    Cho n vănbản – nội dung trang web
    Đếmtầnsốxuấthiệncủatừngtừcótrong n vănbản.
    Vídụ
    Input
    Vb1 = Hello World Bye World
    Vb2 = Hello Hadoop Goodbye Hadoop
    Output
    Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2
  • Google Word Count
    MAP
    map(vb1, “Hello World Bye World”)
    <Hello, 1>
    <World, 1>
    <Bye, 1>
    <World, 1>
    map(vb2, “Hello Hadoop Goodbye Hadoop”)
    <Hello, 1>
    <Hadoop, 1>
    <Goodbye, 1>
    <Hadoop, 1>
  • Google Word Count
    COMBINE
    <Bye, [1]>
    <Goodbye, [1]>
    <Hadoop, [1, 1]>
    <Hello, [1, 1]>
    <World, [1, 1]>
  • Google Word Count
    REDUCE
    reduce(word, values){
    count = 0;
    foreach(value in values)
    count++;
    return <word, count>;
    }
    reduce(“Hello”,[1, 1]) => <Hello, 2>
  • Thànhphầncủa Hadoop
    Thànhphần:
    Hadoop Distributed File System (HDFS)
    Hadoop MapReduce
    Cácdựánliênquan
    Avro
    Cassandra
    Chukwa
    HBase database
    Hive data warehouse
    Mahout
    Pig
    ZooKeepercoordination service
  • NoSQL
    Là 1 lớpcácHệquảntrịcơsởdữliệu (DBMS) cókhácbiệtcơbảnvớiHệquảntrịcơsởdữliệuquanhệ (RDBMS)
    Khôngcó schema cốđịnh
    Khôngcó JOIN
    Khôngcóquanhệ
    Scale horizontally: pháttriểntheochiềungang
  • NoSQL
    ACID
    Atomic: hoặctấtcảhoặckhônggìcả
    Consistency: tạoratrạngtháimớihợplệhoặctrởlạinguyêntrạng.
    Isolation: sựtáchbiệtgiữa 2 giaodịch
    Durability: bềnvững – lỗikhôngmấtdữliệu
    CAP Theorem (Brewer's theorem) chocáchệphântán: khôngmộthệphântánnàođảmbảođượccả 3 điềukiệnsau
    Consistency
    Availability
    Partition tolerance
  • NoSQL
    Key-Value store
    Document databases
    Column oriented databases
    BigTable
    Hbase (CA, not P)
    Cassandra: Key-Value & Column oriented (AP, not C)
  • HBase Architecture
  • HBase Architecture
    Zookeeper: lưutrữ metadata & region info v.v…
    Master: điềuphối
    Region Server: Lưutrữdữliệu
    Mỗi table baogồmnhiều regions. Mỗi region nằmtrên 1 Region Server.
    Mỗi region baogồm 1 dãyliêntiếpcácrowkey.
    Mỗikhikíchthướccủa 1 region tăngquá 1 giátrịcụthể, nótựđộng split làm 2 region
  • HBase table
    RDBMS table
  • HBase table
    Row (rowkey): gồmnhiều family
    Handle hàngtỉdòng.
    Family: tậphợpcác column.
    Column: cộtnằmtrong 1 family
    Sốlượng column trong 1 family: khácnhautùytừngdòng, từ 0 đếnhàngtriệu
    Mỗi column cónhiều version (theothờigian) (hàngnghìn versions)
    Mộtphầntửtrongcơsởdữliệu:
    rowkey_family_column_timestamp
    Tấtcảrowkey & dữliệulưutrữdướidạngmảng byte (byte[]).
    Sắpxếptheothứtựtừđiển (1, 10, 2, 3…)
  • Student - Course
    Student
    1 Student ~ họcnhiều Course
    Course
    1 Course ~ cónhiều Student
  • Student - Course
    RDBMS
  • Student - Course
    HBase Schema
  • Hbase at Tamtay
  • Friend module
    Testimonial: NULL
    Time
    SELECT * FROM Users INNER JOIN Friends WHERE …
  • Friend Module
    Khôngcần timestamp, bảnthânmỗi column đãcó timestamp
    Chỉlưu testimonial nếucó
    Khôngphải join bảng
    Tìmbạnchung (mutual friend): Map-Reduce
  • Feed
    Log
    User_feed: 130.000.000 dòng
  • Feed
    Log:
    ReversedTimeStamp= MaxLong – Timestamp
    Sắpxếp log giảmdầntheothờigian
    Data family: mỗiloại log có 1 cấutrúcdữliệukhácnhau. Số column trong Data family làkhácnhau ở mỗidòng.
  • Feed
    User_feed
    Sốdòng = số user
    Một column, nhiều versions.
    Mỗidata family cóthamsố TTL
    Timestamp < Now() – TTL => xóa
    Khôngphântrang!
  • Feed
    Sinh feed: Map-Reduce (again!!!)
    Map(logID, logData){
    uid = logData->getUid();
    friends = getFriend(uid);
    foreach (friend in friends)
    output(friend, logID);
    }
    Reduce(uid, logIDs){
    foreach(logID in logIDs){
    timestamp = extract_timestamp(logID);
    insert_to_user_feed(uid, logID, timestamp);
    }
    }
  • Nhượcđiểm
    Truyvấn 1 dòngdữliệuchậmhơn so với MySQL
    Xửlýcáccâulệnhsắpxếp (nếukhôngphảitheokhóa)
    Filter & tìmkiếmtheogiátrị?
    Design table: ít flexible, phảibiếttrướccácyêucầukhithiếtkế.
    Vídụ: “Bạnthân”
  • Ưuđiểm
    Dễdàngmởrộng, scale up
    Khảnăngđọc / ghi song songtốt:
    10 threads cùngđọc 10000 dòngdữliệungẫunhiêntừ 1 bảng 1 triệuphầntử
    3 servers
    Nhanhhơn > 2 lần so với MySQL
    Handle khốilượnglớndữliệu.
    Dữliệuđượcsaochépđinhiềumáy.
    Dùng Map-Reduce xửlýcáclệnhthốngkê
  • Vấnđề
    Xửlývấnđề Split region?
    Quánhiều region – khôngtốt
    1 region: càngkhôngtốt!
    Đọc – ghiliêntiếp ở 1 region
    Coding.
  • Thànhphầncủa Hadoop
    Thànhphần:
    Hadoop Distributed File System (HDFS)
    Hadoop MapReduce
    Cácdựánliênquan
    Avro
    Cassandra
    Chukwa
    HBase database
    Hive data warehouse
    Mahout
    Pig
    ZooKeepercoordination service
  • Zookeeper
    Tínhtoánphântánnhư 1 sởthú
    Trừviệc 2 cáimáytính k thểđẻracáithứ 3!
    Thêmthiếtbịvàohệthống
    Phụchồihệthốngsaulỗi
    Thayđổicấuhình
    Cânbằngtải
    v.v…
    Zookeeper: A high-performance coordination service for distributed applications.
  • Coordination service
    Partial failure: lỗiđặctrưngcủatínhtoánphântán:
    Máy A gửi tin đếnmáy B
    Khôngthấyphảnhồi
    Liệugói tin đãđến B?
    B đãxửlý hay chưa?
    Dữliệutrảvềtừ B bịlỗi?
    Coordination service: khônggiúploạibỏ Partial failure, dùngđểxửlýkhigặp Partial failure
  • Zookeeper Architecture
    Lưutrữdữliệutrong Memory
    Snapshot trên ổ cứng
    Quytắc 2k+1
  • Zookeeper Architecture
    Cóthểxemlàhệthống file cótính availability cao.
    Cấutrúccâygiốngcâythưmục(znode)
    Mỗiznodevừalà file (chứadữliệu) vừalàthưmục (códanhsáchznode con)
    ephemeral znode
    Node chỉtồntạikhi thread tạoranócònkếtnốiđến Zookeeper.
    persistent znode
    Tồntạiđếnkhicólệnhxóa.
  • Ứngdụng
    Danhsách server:
    1 ứngdụngphântánchạytrên 1 cụm server
    Các server cóvaitrònhưnhau.
    Cầnlưutrữdanhsáchđịachỉcác server
    Khôngthểlưutrữdanhsáchnàytrên 1 server.
    Lúcnàothì 1 server “chết” đểloạirakhỏidanhsách?
  • Ứngdụng
    Zookeeper:
    Tạo node “/server_list” - persistent
    Trênmỗi server, chạy 1 thread kếtnốiđến zookeeper
    Tạo node “/server_list/tên_server” - ephemeral
    Giữkếtnốitừ thread đến zookeeper
    Liệtkê: lấydanhsáchznode con của “/server_list”
    1 server mấtkếtnối => ephemeral node tươngứngbịxóa
  • Version
    Mỗiznodecólưuthông tin version.
    Mỗikhicóthayđổivớiznode (sửa, xóa, tạomới) version thayđổi
    Tính Atomic: nếu version lúcđọcvàghikhôngkhớp => exception.
  • Ứngdụng
    Atomic sequence: znode“/counter” chứagiátrịsốnguyên
    Không atomic:
    A = đọcgiátrịcủa “/counter”
    A++
    Ghi A vào “/counter”
    => 2 process đọccùng 1 giátrị A!
    Atomic:
    do {
    <A, version> = đọcgiátrị & version của “/counter”;
    A++;
    ok = Ghi A vào “/counter” vớithamsố version
    /* nếu version trùngvới version hiệntạicủa “/counter” return true, nếu version khác version hiệntại, return false */
    } while (not ok)
  • Watches
    Watches chophép client nhậnthôngbáotừ zookeeper nếu 1 znodenàođóthayđổitrạngthái.
    Interface Watcher
    public void process(WatchedEvent event)
    Hàm process sẽđượcgọikhiznodeđượctheodõithayđổitrạngthái
    Theo dõi 1 znode
    Cáchàmtươngtácvới zookeeper đềucóthamsốlà 1 class implements Watcher
    Vídụ:
    A = new Watcher();
    Zookeeper.getData(<tên node>, A);
    Mỗikhi <tên node> thayđổithìA.processsẽđượcthựcthi
  • Ứngdụng
    Tựđộngcậpnhậtcấuhình
    Vớimỗihệphântánnóiriênghoặc 1 cụm server nóichungthìviệcđồngbộcấuhìnhlàquantrọng.
    100 máy: thayđổicả ở 100!
    Chảlẽlạilàmbằngtay?
    Zookeeper?
    Hjx, máynàođãthay, máynàochưanhỉ?
  • Ứngdụng
    Configuration service
    Thayđổithông tin cấuhình ở 1 máy, cácmáykhácsẽtựthayđổi
    Giảsửcấuhìnhchỉgồmdạng <key,value>
    znode “/key” chứa value tươngứng.
    Cậpnhậtcấuhình:
    Đơngiản.
  • Ứngdụng
    Theo dõi & cậpnhậtcấuhình:
    Class A implements Watcher{
    void process(Event e){
    if (e.nodeDataChange){
    value = zookeeper.read(“/key”, this)
    //Tiếptụctheodõiznode“/key”;
    cậpnhật local configdựavào value
    }
    }
    }
  • Ứngdụng
    main(){
    a = new A();
    dump = zookeeper.exist(“/”, a);
    sleep(forever); //đingủ, đợiđếnlúcznode “/” cóthayđổisẽđượcgọidậytừhàm process của a
    }
    Watch sẽđượckíchhoạtcảkhiznode con củaznodeđóthayđổi
    Chạy main() trênmỗimáycầncậpnhậtconfig.
  • Future study
    Hive
    Dataware house: là database nhưngđượcthiếtkếphụcvụphântích & báocáo
    SửdụngHiveQL
    Mụcđích:
    Đểphântích & tổnghợpdữliệuđượclưutrữmộtcáchcócấutrúctrêncác file củahệthống HDFS
    Sửdụng Map-Reduce
    Hive sẽ convert HiveQL sang Map-Reduce code => dễhiểu, tiếtkiệmthờigian & côngsứclậptrình
    Xửlý log!!!