SlideShare a Scribd company logo
1 of 19
Download to read offline
Hadoop, The Definitive
 Guide (2nd edition)
読書会資料(第3章 /HDFS )

          担当: @tyamadajp
P41-42:HDFS と適用領域
       Hadoop System
                                 データの分散保管と
         MapReduce Engine        コード配布+計算要求
ブロック保有
ノードの照会          Code     Code
                                 FS API
                +Data    +Data
                                 HDFS
        Name   Data     Data              local fs, S3
                                          なども使用可
        Node   Node     Node

●
    API を介する、交換可能なストレージ要素の1つ
●   特徴1:ノード故障への耐性
●   特徴2:大データ (~TB/node) への連続アクセス
●
    特徴3: write-once, read-many に特化
多数ファイル、低レイテンシ利用、マルチライタは不得意
P43-45:HDFS の構成と構造 (1)
             Name Node             ブロック1つ
                                   あたり 64+[MB]
                              #0
                         DN    1
                         #1    2       もう最近は
                                       128[MB] に
    client
                              #0
                         DN    1
「 N バイトのファイル
                         #2    2
  A の 0-64MB 部分を
 書き込みたい」
「なら ID:XXX で DN#1             #0
  ->2->3 に書くように」         DN    1
                         #3    2


●   ファイルは 64+[MB] ブロック単位で分散保持
●   サイズはシーク処理が 1% に収まる程度に決める
P43-45:HDFS の構成と構造 (2)
             Name Node                       64[KB] ずつ、
                                             ブロックが
                 ACK                A[0,*]   埋まるまで転送
                         DN
                         #1
    client
                              ACK
                                    A[0,*]
「 #1->2->3 の流れで          DN
  A[0,0](64KB 分 ) を      #2                  ブロック毎に
  ID:XXX で書きたい」                              違う DN 群が
「書き込み完了。 ACK 」                ACK
                                    A[0,*]   NN に選ばれる。
 ・・・                     DN                  左図は A[1] に
「 A[0,N] を書きたい」                     A[1,*]
「書き込み完了。 ACK 」
                         #3                  ついても DN#3 が
                                             選ばれた場合。

●
    ブロック毎に別の DN 群が書き込み先となる
●
    書き込みプロセスから NN は完全に分離される
P43-45:HDFS の構成と構造 (3)
                Name Node
                                 A[0,*]
                            DN
DN#1 has A[0]
                            #1
DN#2 has A[0]
                                 A[0,*]
DN#3 has A[0]               DN
DN#3 has A[1]               #2

                                 A[0,*]
                            DN   A[1,*]
                            #3

 ●
     DN は NN に書込完了後に block report を送信
 ●
     NN は File A <-> BlockID の対応表と上を合成
P45:NameNode の役割・課題
役割
●
  File<->[Block], Block<->[DN] の対応管理
● DN からの Block report および heartbeat の受付


● Client からの FS op/RPC のエントリポイント


  #負荷は軽い( 10Knode/68PB でも 1 台の試算)

データ管理・運用に課題
● 対応表が消える=全データ消滅だが SPoF 稼動


●
  ジャーナリング方式でデータ管理されている
  ◚ しかし、マージは再起動の時(=遅い)
P45:NameNode の冗長(?)化
                                    NN /w
                                CheckPoint Role

 Name Node               ※metadata+journal を吸い出して
                          マージし、書き戻す。 NN の
    metadata               journal が空に戻って再起動が
       table              高速化する
     journal
    blockmap
               ※ ジャーナルの             NN /w
                複製先として登録
                                 Backup Role
Backup Role の登場で復旧可能には                merged
なったが、 blockmap 再作成=全 DN              metadata
問合せが必要で failover はできない。                table
クラスタ構成で稼動できるように                       journal
改良予定( HDFS 論文 , 2010 より)        ※ こちらをマスタとして
 NTT-D で Kemari 使って冗長構成組んでるとか    再起動すれば復旧可能
P45-47: 基本操作方法
●   基本は「 hadoop fs -<op> 」で操作。
    詳しくは本を。あと hadoop fs だけでヘルプが
●
    扱える「ファイル」は「 scheme:... 」の URI で
    指定してローカル・リモートの各所を指定
    ◚ 今回の HDFS だと hdfs://host/path で

●   簡易的な UNIX-style user/group+rwx ACL あり
    マルチユーザ運用のためなのでオフにもできる




        細かくプレゼン資料にする程ではないので軽く飛ばします
P48:org.apache.hadoop.fs.FileSystem
    URI scheme に対応する FS API の実装クラスを
    登録すれば、任意のデータストアが組込可能
組込方法 – hoge:// scheme の場合
●   *.FileSystem の拡張クラスを実装する
●   core-site.xml に以下を追加する
  <property>
  <name>fs.hoge.impl</name>
  <value>test.HogeFileSystem</value>
  </property>
●   hogefs.jar を hadoop の参照 classpath に追加
●
    hadoop コマンドでは -libjars ... を追加
P48:Extending FileSystem
public class HogeFileSystem extends FileSystem {
  public void
  initialize(URI uri, Configuration conf) throws IOException {
     super.initialize(uri, conf);
     setConf(conf);                   ダミーで書く程度なら赤字の
  }                                      メソッドだけ書けば簡単
  public URI getUri() { … }
  public FSDataInputStream open(Path file, int bufferSize) …
  public FSDataOutputStream create(Path file, …
  public FSDataOutputStream append(Path file, …
  public boolean rename(Path src, Path dst) …
  public boolean delete(Path file) 自前の *OutputStream 書いて
                                    …
  public boolean delete(Path file, booolean recursive) …
                                    block report 送ったりさせる
  public boolean mkdirs(Path file, 必要もあるかも(未検証)
                                     …
  public FileStatus[] listStatus(Path file) ...
  public FileStatus[] getFileStatus(Path file) …
  public void setWorkingDirectory(Path newDir) { … }
  public Path getWorkingDirectory() { … }
P49-50:Available Interfaces
低レベルアクセス           Hadoop FS API を叩いている場合は
● Java API          HDFS 以外にも利用できなくもない
● Thrift RPC

 (形態: Client ↔ Thrift Server ↔ Java API )
●
  libhdfs/C
 (形態: Client ↔ C ↔ JNI ↔ Java API )
高レベルアクセス
●
  FUSE
 (形態: Fuse-DSF ↔ libhdfs ↔ ... )
● WebDAV (開発中)

 (形態: WebDAV Server ↔ Java API )
●
  HTTP/XML
 (形態: XML-generating Web server ↔ Java API )
● FTP (開発中)
P51-62:Using Java API

   ひたすらコードが続くので、この部分は本文参照。
   要点は
   ●   URLStreamHandlerFactory を登録し URL.* API を
       使う方法があるが、廃止。毎回 abs URL が必要、
       異 scheme 間の操作で問題があるなどした
   ●   カレント URI を FileContext で定め、そこを起点に
       操作する方法が新方式
   ●   直接 FS API を利用する方法は維持されている
   ●   FS*Stream の Seekable, PositionedReable,
       Progressable インタフェースを活用すると、
       効率のよい読み出しや進行通知ができる。
   ●   また、 globStatus API では PathFilter を使い
       glob 指定での一部ファイルの stat 相当が可能
   ●   FS API は概ね POSIX 風
P63:Java API とノード構成の関係
        掲載図以上にわかりやすい表現がないのでほぼ同じ図…

client node
 JVM
                                  ②get block location
       ①open
                                         Name
  HDFS ③readDFS (metadata) API
                                         Node
  client    FSData*Stream API
        ⑥close
                                         近い方から読むが
                                         故障時には自動切替

スライド 4 枚目に前述だが、           ④read           ⑤read
メタデータ系とデータ系 API で
参照先ノードが完全に分かれる。        Data       Data     Data
                       Node       Node     Node
図にはないが、各 API の下側に
HDFS の実装クラスが入り、実
ノードアクセスを担当する。
P64: ノードトポロジと「距離」概念
ノード間距離 d を
元に NN は DN を
管理・制御する                          d=6
               R                       R
      DC: A        d=4
                         DC: B

          #0        #5       #0            #5
d=0       #1        #6       #1            #6
          #2        #7       #2            #7
          #3        #8       #3            #8
d=2
          #4        #9       #4            #9


  デフォルトでは全ノードが等距離な構成と見なすので、適切に
  NN に制御させるには設備 / 遅延 / 帯域を見て距離 d を調整する。
  上の d は「ホップ数 +1 」風になっているだけで、実際の設備
  次第では必ずしも適切とはいえない。
P65-67: トポロジに基づく書込処理
               R            まず性能のため
                            最大のローカリティが
                            得られるノードに書く

                            次に冗長化のため、別
 client   DN       DN       ラックのノードに複製


                            最後に冗長度の更なる
                            確保のため、ラック内
                   DN       別ノードに再複製


複製が dfs.replication.min 個に達した時点で書込完了 ACK は飛ぶ。
その後 dfs.replication 個まで内部で複製を増やす動作になる。
複製エラー時は、正常ノード側の BlockID の付け替えを行い NN に
通知する。すると複製数不足が検知され追加複製トリガが引かれる
P68-69: バッファリングと同期
          client                             out.flush()
             A              stat             A → block full までは
                                                   メタデータのみ反映
              writing                        B → 未反映
                                             C → 反映( A と同様)
     書込完了               書込中
                                             out.hflush()
         block#0            block#1          A → 全て反映
                                             B → 未反映
  read                        open           C → 全て反映
                              (new reader)
                                             out.hsync()
client             client                    A → 全て反映
  B                  C                       B → 全て反映
                                             C → 全て反映
 ブロックの状態は
 A/B/C からどう見える?                              ※ なお、 sync ( =~hflush )は
 ヒント: NOT POSIX                                deprecated API となった
P70:distcp - MapReduce と並列転送
やりたいこと: cp             src#0 src#1 src#2     dst#0 dst#1 dst#2

         getloc(src)
  NN                   MapReduce Engine

create+
getloc(dst)
              cp   src#0
                    dst#0      cp   src#1
                                     dst#1        cp   src#2
                                                        dst#2



              dst#0            dst#1              dst#2



                              Data Nodes
    ※ ただし DFS 系の間でのみ。コピー元も分散保持していないと
      IO ボトルネックで並列処理しても性能が全く出ない(はず)
P70:distcp - 使用上の注意
●   デフォルトは1マップで最低 256[MB] をコピー
●   デフォルトは1ノードに最大 20 マップ(処理)
●
    使用ノード数を絞るなら -m <# of maps>
    → マップあたりのコピー量を増やす結果に
    → ただし、最初のコピーは複製ルールにより
      マップ処理ノードと同じノードに置かれる。
      これ起因のアンバランス配置に注意!
●
    異バージョン HDFS 間のコピーは不可(非互換)
    → hftp:// で指定して回避できる
    → コピー先クラスタ (NN) で実行する必要がある
P71-73:HAR – Hadoop ARchive 形式
●   メタデータの管理(保管)効率向上が目的
    → データは元々実サイズ分しか使わない
●   パックして NameNode 上は「1ファイル」扱い
    → *.har の位置までのみ NN が管理する
●
    ファイルの増減・変更の際は全体再作成になる
注意
    これは NameNode での効率の話であって、 MapReduce 処理
    段階では、各々の処理( split )に HAR 内の複数ファイルを
    まとめて食わせられるわけではない。
    つまり細かい Map タスクが多量に発生するオーバーヘッドは
    回避できない。別の対策に CombineFileInputFormat クラスを
    用いて、入力データを集約する方法があるので要参照。

More Related Content

What's hot

コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてTomofumi Hayashi
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。(^-^) togakushi
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Panda Yamaki
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseMikio Hirabayashi
 
Quick Introduction to GlusterFS
Quick Introduction to GlusterFSQuick Introduction to GlusterFS
Quick Introduction to GlusterFSEtsuji Nakai
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
gumiStudy#7 The MessagePack Project
gumiStudy#7 The MessagePack ProjectgumiStudy#7 The MessagePack Project
gumiStudy#7 The MessagePack ProjectSadayuki Furuhashi
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてNobuyuki Sasaki
 
徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ株式会社サードウェア
 
Drbd9資料 osc発表
Drbd9資料 osc発表Drbd9資料 osc発表
Drbd9資料 osc発表hkuroki
 

What's hot (19)

コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。tcpdumpとtcpreplayとtcprewriteと他。
tcpdumpとtcpreplayとtcprewriteと他。
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Code jp2015 cpuの話
Code jp2015 cpuの話Code jp2015 cpuの話
Code jp2015 cpuの話
 
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
 
Linux Namespace
Linux NamespaceLinux Namespace
Linux Namespace
 
CPUの同時実行機能
CPUの同時実行機能CPUの同時実行機能
CPUの同時実行機能
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
 
Quick Introduction to GlusterFS
Quick Introduction to GlusterFSQuick Introduction to GlusterFS
Quick Introduction to GlusterFS
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
gumiStudy#7 The MessagePack Project
gumiStudy#7 The MessagePack ProjectgumiStudy#7 The MessagePack Project
gumiStudy#7 The MessagePack Project
 
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについてCentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
CentOS 8で標準搭載! 「389-ds」で構築する 認証サーバーについて
 
Scapy presentation
Scapy presentationScapy presentation
Scapy presentation
 
徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ
 
Drbd9資料 osc発表
Drbd9資料 osc発表Drbd9資料 osc発表
Drbd9資料 osc発表
 
DRBD9とdrbdmanageの紹介
DRBD9とdrbdmanageの紹介DRBD9とdrbdmanageの紹介
DRBD9とdrbdmanageの紹介
 
DNSのRFCの歩き方
DNSのRFCの歩き方DNSのRFCの歩き方
DNSのRFCの歩き方
 
DRBD9とdrbdmanageの概要紹介
DRBD9とdrbdmanageの概要紹介DRBD9とdrbdmanageの概要紹介
DRBD9とdrbdmanageの概要紹介
 

Similar to Hadoop book-2nd-ch3-update

CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing jaPacSecJP
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
DRBD 8.3の開発終了に伴う今後の対応について
DRBD 8.3の開発終了に伴う今後の対応についてDRBD 8.3の開発終了に伴う今後の対応について
DRBD 8.3の開発終了に伴う今後の対応について株式会社サードウェア
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編hdais
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentookubo39
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストールYasuhiro Arai
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Wataru Fukatsu
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜Taro Matsuzawa
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントCloudera Japan
 
Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Japan
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようNobuyuki Sasaki
 

Similar to Hadoop book-2nd-ch3-update (20)

CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing ja
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
DRBD 8.3の開発終了に伴う今後の対応について
DRBD 8.3の開発終了に伴う今後の対応についてDRBD 8.3の開発終了に伴う今後の対応について
DRBD 8.3の開発終了に伴う今後の対応について
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
Unix
UnixUnix
Unix
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
Bossan dentoo
Bossan dentooBossan dentoo
Bossan dentoo
 
HDFS Deep Dive
HDFS Deep DiveHDFS Deep Dive
HDFS Deep Dive
 
Rust-DPDK
Rust-DPDKRust-DPDK
Rust-DPDK
 
Apache cloudstack4.0インストール
Apache cloudstack4.0インストールApache cloudstack4.0インストール
Apache cloudstack4.0インストール
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
 
ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜ゆるふわLinux-HA 〜PostgreSQL編〜
ゆるふわLinux-HA 〜PostgreSQL編〜
 
Hadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイントHadoopのシステム設計・運用のポイント
Hadoopのシステム設計・運用のポイント
 
Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料Cloudera Manager4.0とNameNode-HAセミナー資料
Cloudera Manager4.0とNameNode-HAセミナー資料
 
これからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみようこれからLDAPを始めるなら 「389-ds」を使ってみよう
これからLDAPを始めるなら 「389-ds」を使ってみよう
 

More from Taisuke Yamada

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴Taisuke Yamada
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesTaisuke Yamada
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -Taisuke Yamada
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Taisuke Yamada
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourTaisuke Yamada
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Taisuke Yamada
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in PythonTaisuke Yamada
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!Taisuke Yamada
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with PythonTaisuke Yamada
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationTaisuke Yamada
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP ProjectTaisuke Yamada
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdTaisuke Yamada
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutTaisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)Taisuke Yamada
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)Taisuke Yamada
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebianTaisuke Yamada
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianTaisuke Yamada
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXTaisuke Yamada
 
Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Taisuke Yamada
 

More from Taisuke Yamada (20)

ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴ウェブパフォーマンス計測の落とし穴
ウェブパフォーマンス計測の落とし穴
 
DIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 MinutesDIY Akamai Globe in 50 Minutes
DIY Akamai Globe in 50 Minutes
 
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
ウェブサイト最適化101 - 正しく測ろうあなたのサイト -
 
Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)Quick QUIC Technical Update (2017)
Quick QUIC Technical Update (2017)
 
IoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an HourIoT Deep Dive - Be an IoT Developer for an Hour
IoT Deep Dive - Be an IoT Developer for an Hour
 
Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線Pythonではじめるソフトウェア無線
Pythonではじめるソフトウェア無線
 
Getting Started with SDR in Python
Getting Started with SDR in PythonGetting Started with SDR in Python
Getting Started with SDR in Python
 
VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!VSCode Remoteでも画像コピペがしたいです!
VSCode Remoteでも画像コピペがしたいです!
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
Hacking Ruby with Python
Hacking Ruby with PythonHacking Ruby with Python
Hacking Ruby with Python
 
Invitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code ExplorationInvitation to Kernel Parameter and Code Exploration
Invitation to Kernel Parameter and Code Exploration
 
Charity Items from Debian JP Project
Charity Items from Debian JP ProjectCharity Items from Debian JP Project
Charity Items from Debian JP Project
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
Introduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and DracutIntroduction to Initramfs - Initramfs-tools and Dracut
Introduction to Initramfs - Initramfs-tools and Dracut
 
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
The CAcert Project - An Invitation to CAcert ATE in OSC/Tokyo 2011 (EN)
 
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
The CAcert Project - An Invitation to CAcert ATE at OSC/Tokyo 2011 (JP)
 
201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian201012 cacert-at-tokyodebian
201012 cacert-at-tokyodebian
 
Nilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebianNilfs usage-report-and-comparison-at-tokyodebian
Nilfs usage-report-and-comparison-at-tokyodebian
 
Casual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUXCasual Web-browsing with gPXE and SYSLINUX
Casual Web-browsing with gPXE and SYSLINUX
 
Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -Embed Shogiboard - my first mediawiki extension -
Embed Shogiboard - my first mediawiki extension -
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (10)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Hadoop book-2nd-ch3-update

  • 1. Hadoop, The Definitive Guide (2nd edition) 読書会資料(第3章 /HDFS ) 担当: @tyamadajp
  • 2. P41-42:HDFS と適用領域 Hadoop System データの分散保管と MapReduce Engine コード配布+計算要求 ブロック保有 ノードの照会 Code Code FS API +Data +Data HDFS Name Data Data local fs, S3 なども使用可 Node Node Node ● API を介する、交換可能なストレージ要素の1つ ● 特徴1:ノード故障への耐性 ● 特徴2:大データ (~TB/node) への連続アクセス ● 特徴3: write-once, read-many に特化 多数ファイル、低レイテンシ利用、マルチライタは不得意
  • 3. P43-45:HDFS の構成と構造 (1) Name Node ブロック1つ あたり 64+[MB] #0 DN 1 #1 2 もう最近は 128[MB] に client #0 DN 1 「 N バイトのファイル #2 2   A の 0-64MB 部分を  書き込みたい」 「なら ID:XXX で DN#1 #0   ->2->3 に書くように」 DN 1 #3 2 ● ファイルは 64+[MB] ブロック単位で分散保持 ● サイズはシーク処理が 1% に収まる程度に決める
  • 4. P43-45:HDFS の構成と構造 (2) Name Node 64[KB] ずつ、 ブロックが ACK A[0,*] 埋まるまで転送 DN #1 client ACK A[0,*] 「 #1->2->3 の流れで DN   A[0,0](64KB 分 ) を #2 ブロック毎に   ID:XXX で書きたい」 違う DN 群が 「書き込み完了。 ACK 」 ACK A[0,*] NN に選ばれる。  ・・・ DN 左図は A[1] に 「 A[0,N] を書きたい」 A[1,*] 「書き込み完了。 ACK 」 #3 ついても DN#3 が 選ばれた場合。 ● ブロック毎に別の DN 群が書き込み先となる ● 書き込みプロセスから NN は完全に分離される
  • 5. P43-45:HDFS の構成と構造 (3) Name Node A[0,*] DN DN#1 has A[0] #1 DN#2 has A[0] A[0,*] DN#3 has A[0] DN DN#3 has A[1] #2 A[0,*] DN A[1,*] #3 ● DN は NN に書込完了後に block report を送信 ● NN は File A <-> BlockID の対応表と上を合成
  • 6. P45:NameNode の役割・課題 役割 ● File<->[Block], Block<->[DN] の対応管理 ● DN からの Block report および heartbeat の受付 ● Client からの FS op/RPC のエントリポイント #負荷は軽い( 10Knode/68PB でも 1 台の試算) データ管理・運用に課題 ● 対応表が消える=全データ消滅だが SPoF 稼動 ● ジャーナリング方式でデータ管理されている ◚ しかし、マージは再起動の時(=遅い)
  • 7. P45:NameNode の冗長(?)化 NN /w CheckPoint Role Name Node ※metadata+journal を吸い出して  マージし、書き戻す。 NN の metadata   journal が空に戻って再起動が table  高速化する journal blockmap ※ ジャーナルの NN /w  複製先として登録 Backup Role Backup Role の登場で復旧可能には merged なったが、 blockmap 再作成=全 DN metadata 問合せが必要で failover はできない。 table クラスタ構成で稼動できるように journal 改良予定( HDFS 論文 , 2010 より) ※ こちらをマスタとして NTT-D で Kemari 使って冗長構成組んでるとか  再起動すれば復旧可能
  • 8. P45-47: 基本操作方法 ● 基本は「 hadoop fs -<op> 」で操作。 詳しくは本を。あと hadoop fs だけでヘルプが ● 扱える「ファイル」は「 scheme:... 」の URI で 指定してローカル・リモートの各所を指定 ◚ 今回の HDFS だと hdfs://host/path で ● 簡易的な UNIX-style user/group+rwx ACL あり マルチユーザ運用のためなのでオフにもできる 細かくプレゼン資料にする程ではないので軽く飛ばします
  • 9. P48:org.apache.hadoop.fs.FileSystem URI scheme に対応する FS API の実装クラスを 登録すれば、任意のデータストアが組込可能 組込方法 – hoge:// scheme の場合 ● *.FileSystem の拡張クラスを実装する ● core-site.xml に以下を追加する   <property>   <name>fs.hoge.impl</name>   <value>test.HogeFileSystem</value>   </property> ● hogefs.jar を hadoop の参照 classpath に追加 ● hadoop コマンドでは -libjars ... を追加
  • 10. P48:Extending FileSystem public class HogeFileSystem extends FileSystem { public void initialize(URI uri, Configuration conf) throws IOException { super.initialize(uri, conf); setConf(conf); ダミーで書く程度なら赤字の } メソッドだけ書けば簡単 public URI getUri() { … } public FSDataInputStream open(Path file, int bufferSize) … public FSDataOutputStream create(Path file, … public FSDataOutputStream append(Path file, … public boolean rename(Path src, Path dst) … public boolean delete(Path file) 自前の *OutputStream 書いて … public boolean delete(Path file, booolean recursive) … block report 送ったりさせる public boolean mkdirs(Path file, 必要もあるかも(未検証) … public FileStatus[] listStatus(Path file) ... public FileStatus[] getFileStatus(Path file) … public void setWorkingDirectory(Path newDir) { … } public Path getWorkingDirectory() { … }
  • 11. P49-50:Available Interfaces 低レベルアクセス Hadoop FS API を叩いている場合は ● Java API HDFS 以外にも利用できなくもない ● Thrift RPC (形態: Client ↔ Thrift Server ↔ Java API ) ● libhdfs/C (形態: Client ↔ C ↔ JNI ↔ Java API ) 高レベルアクセス ● FUSE (形態: Fuse-DSF ↔ libhdfs ↔ ... ) ● WebDAV (開発中) (形態: WebDAV Server ↔ Java API ) ● HTTP/XML (形態: XML-generating Web server ↔ Java API ) ● FTP (開発中)
  • 12. P51-62:Using Java API ひたすらコードが続くので、この部分は本文参照。 要点は ● URLStreamHandlerFactory を登録し URL.* API を 使う方法があるが、廃止。毎回 abs URL が必要、 異 scheme 間の操作で問題があるなどした ● カレント URI を FileContext で定め、そこを起点に 操作する方法が新方式 ● 直接 FS API を利用する方法は維持されている ● FS*Stream の Seekable, PositionedReable, Progressable インタフェースを活用すると、 効率のよい読み出しや進行通知ができる。 ● また、 globStatus API では PathFilter を使い glob 指定での一部ファイルの stat 相当が可能 ● FS API は概ね POSIX 風
  • 13. P63:Java API とノード構成の関係 掲載図以上にわかりやすい表現がないのでほぼ同じ図… client node JVM ②get block location ①open Name HDFS ③readDFS (metadata) API Node client FSData*Stream API ⑥close 近い方から読むが 故障時には自動切替 スライド 4 枚目に前述だが、 ④read ⑤read メタデータ系とデータ系 API で 参照先ノードが完全に分かれる。 Data Data Data Node Node Node 図にはないが、各 API の下側に HDFS の実装クラスが入り、実 ノードアクセスを担当する。
  • 14. P64: ノードトポロジと「距離」概念 ノード間距離 d を 元に NN は DN を 管理・制御する d=6 R R DC: A d=4 DC: B #0 #5 #0 #5 d=0 #1 #6 #1 #6 #2 #7 #2 #7 #3 #8 #3 #8 d=2 #4 #9 #4 #9 デフォルトでは全ノードが等距離な構成と見なすので、適切に NN に制御させるには設備 / 遅延 / 帯域を見て距離 d を調整する。 上の d は「ホップ数 +1 」風になっているだけで、実際の設備 次第では必ずしも適切とはいえない。
  • 15. P65-67: トポロジに基づく書込処理 R まず性能のため 最大のローカリティが 得られるノードに書く 次に冗長化のため、別 client DN DN ラックのノードに複製 最後に冗長度の更なる 確保のため、ラック内 DN 別ノードに再複製 複製が dfs.replication.min 個に達した時点で書込完了 ACK は飛ぶ。 その後 dfs.replication 個まで内部で複製を増やす動作になる。 複製エラー時は、正常ノード側の BlockID の付け替えを行い NN に 通知する。すると複製数不足が検知され追加複製トリガが引かれる
  • 16. P68-69: バッファリングと同期 client out.flush() A stat A → block full までは メタデータのみ反映 writing B → 未反映 C → 反映( A と同様) 書込完了 書込中 out.hflush() block#0 block#1 A → 全て反映 B → 未反映 read open C → 全て反映 (new reader) out.hsync() client client A → 全て反映 B C B → 全て反映 C → 全て反映 ブロックの状態は A/B/C からどう見える? ※ なお、 sync ( =~hflush )は ヒント: NOT POSIX deprecated API となった
  • 17. P70:distcp - MapReduce と並列転送 やりたいこと: cp src#0 src#1 src#2 dst#0 dst#1 dst#2 getloc(src) NN MapReduce Engine create+ getloc(dst) cp src#0 dst#0 cp src#1 dst#1 cp src#2 dst#2 dst#0 dst#1 dst#2 Data Nodes ※ ただし DFS 系の間でのみ。コピー元も分散保持していないと   IO ボトルネックで並列処理しても性能が全く出ない(はず)
  • 18. P70:distcp - 使用上の注意 ● デフォルトは1マップで最低 256[MB] をコピー ● デフォルトは1ノードに最大 20 マップ(処理) ● 使用ノード数を絞るなら -m <# of maps> → マップあたりのコピー量を増やす結果に → ただし、最初のコピーは複製ルールにより マップ処理ノードと同じノードに置かれる。 これ起因のアンバランス配置に注意! ● 異バージョン HDFS 間のコピーは不可(非互換) → hftp:// で指定して回避できる → コピー先クラスタ (NN) で実行する必要がある
  • 19. P71-73:HAR – Hadoop ARchive 形式 ● メタデータの管理(保管)効率向上が目的 → データは元々実サイズ分しか使わない ● パックして NameNode 上は「1ファイル」扱い → *.har の位置までのみ NN が管理する ● ファイルの増減・変更の際は全体再作成になる 注意 これは NameNode での効率の話であって、 MapReduce 処理 段階では、各々の処理( split )に HAR 内の複数ファイルを まとめて食わせられるわけではない。 つまり細かい Map タスクが多量に発生するオーバーヘッドは 回避できない。別の対策に CombineFileInputFormat クラスを 用いて、入力データを集約する方法があるので要参照。