HBase 0.96 で導入される新しいコンパクション「Exploring Compaction」

Hadoopアドベントカレンダー2013、3日目を担当する @shiumachi です。
今回は HBase 0.96 の新機能を一つ紹介します。

要約


HBase 0.96 は賢くなったのでみんな使おう。

コンパクションのおさらい


HBase では、Log Structured-Merge tree (LSM-tree) というデータ構造を使っています。
LSM-tree を簡単に説明すると、入力されたデータをログとメモリ上のデータストア(Memstore、メモリストア) に書き込みます。
メモリストアがいっぱいになると、まとめてディスクにフラッシュし、新しいストアファイルを生成します。
このストアファイルがたまってきたときに、少しづつ一まとめにしてなるべくファイル数を少なくするようにします。これがコンパクションです。


コンパクションを実行することにより、ファイルは一つにまとまります。これにより、ディスク上の連続した領域にデータをまとめることができ、ディスクシークの回数を少なく保った上で予測可能にできます(最大でストアファイルの数と同回数だけ)


しかし、このコンパクション操作は非常に重い処理になります。
コンパクションを単純に説明すると、ディスク上のストアファイルを読込み、新しいストアファイルに書き出してマージしていくというものです。これだけで多大なディスクの負荷がかかることが分かるでしょう。
また、HBaseは普通HDFSを始めとした分散ファイルシステムをストレージとするため、ネットワーク転送も発生します。
かといってコンパクションを実行しなければ、ストアファイルが多くなり、一度のキーのルックアップに必要なディスクシークの回数が増え、やはり性能が劣化します。
現在のディスクIOと将来のディスクIOのトレードオフを考えることが、コンパクション戦略に必要となります。しかし、将来どれだけのディスクシークが発生するかは誰にもわかりません。そのため、ヒューリスティックな手法で現実解を求めていくことになります。

HBase 0.94 までのコンパクションアルゴリズム


コンパクションには2種類あります。メジャーコンパクションとマイナーコンパクションです。
メジャーコンパクションは、全ストアファイルを読み込んで一つのストアファイルに書き出していく(まとめる)処理です。このとき、以下の条件に当てはまるキーバリューのみを書き出します。

  • tombstone マーカーがついていない ( delete されたときに付与される、論理削除のマーカー)
  • TTL (生存時間) が残っている
  • バージョンが最大バージョン数を超えていない。例えばバージョン保持数が3のとき、4つ前のバージョンのセルはこのタイミングで物理削除される


もう一つはマイナーコンパクションです。今回の記事ではこちらの方に注目します。
マイナーコンパクションは、たくさんあるストアファイルのうち、あるアルゴリズムに基づいて抽出されたファイル群のみを一つにまとめます。このとき「なるべく小さいファイルを(ディスクIO低減のため)、なるべく多くの数(将来のディスクシーク数低減のため)コンパクションする」ことが重要となります。

まず、ストアファイルが一列に並んでいるとします。左のファイルの作成時刻が一番古く、右に行くにしたがって新しくなるとします。

  1. 1番左のストアファイルを選択する( F0 とする )。F0 のファイルサイズを S0 とする。
  2. F0 より右の全ストアファイルのサイズの和 S(1_N) を求める。
  3. もし S0 > S(1_N) * hbase.hstore.compaction.ratio (デフォルト 1.2) なら、選択ストアファイルを1つ右にずらし、同様の手順を実行する。
  4. もし S0 < S(1_N) * hbase.hstore.compaction.ratio (デフォルト 1.2) なら、F0 の一つ右のファイルから最大 hbase.hstore.compaction.max 個(デフォルト10) のストアファイルをコンパクション対象とする。
  5. もしコンパクション対象数が hbase.hstore.compaction.min 個 (デフォルト 3) より少なかったら何もせずに終了。
  6. コンパクション対象のファイル群をコンパクションして終了。


具体例が hbase bookのコンパクションのページ に載っています。


たとえばストアファイルのサイズが 100、50、23、12、12 と並んでいる場合、23、12、12 がコンパクションされます。
ここで注意しなければいけないのは、ファイルのソートはあくまで「作成日時」です。サイズではありません。
このアルゴリズムは、「ほとんどの新しいファイルは古いファイルより小さい」という前提に基づいています。


ストアファイルはメモリストアのフラッシュによって作成されます。このフラッシュ上限は決まっていて、hbase.hregion.memstore.flush.size (デフォルト64MB) * hbase.hregion.memstore.block.multiplier (デフォルト2) = 128MB となります。
古いファイルはコンパクションされていて大きくなっているはずなので、この前提は多くのケースにおいて成り立ちます。


しかし、当然成り立たないケースもあります。
例えば HBase のバルクロードは、ストアファイルを直接 HBase のリージョン内に配置する方法で、非常に高速にデータをロードできるのですが、新しいファイルなのに非常に大きいストアファイルをロードすることになり、上記の前提を崩してしまいます。
先程紹介したアルゴリズムは、あくまでコンパクション対象の最初の一つしか判定を行いません。アルゴリズム内で条件を満たしたストアファイルがあれば、そこから一定数のファイルを自動的に取り込みます。
これにより、この大きなストアファイルがあると、より古いファイルはコンパクション対象として判定されてしまいます。こうして大きいファイルがマイナーコンパクションの対象になってしまう可能性が高くなるわけです。

新しいコンパクションアルゴリズム


そこで 0.96 からは、Exploring コンパクションポリシーという新しいアルゴリズムをデフォルトアルゴリズムに採用しました。(HBASE-7842)



基本方針は単純で、「可能性のある組み合わせ全部計算して最適なものを選ぶ」です。
コンパクション対象を検索するところまでは既存のアルゴリズムと変わりません。
検索した後、以下のようなアルゴリズムで最適解を選んでいきます。

  1. コンパクション対象となった最初のストアファイルを F1 とする。
  2. F1から右に min 個以上 max 以下の連続したストアファイルを全て吟味していく。(デフォルトだと3〜10個) つまり、F1〜F3の組み合わせ、F1〜F4の組み合わせ、……というように吟味していく。
  3. このうち以下の条件に当てはまるものを選択する。
    1. 最も対象ストアファイル数が多い
    2. もしストアファイル数が同じものが複数ある場合、最もファイルサイズが小さい


これにより、バルクロードを用いている環境でも無駄なIOを生じることなくマイナーコンパクションを行うことができるようになりました。
この機能は、プラガブルコンパクションポリシーという HBase 0.96 から導入された新しい機能を前提として実装されています。(HBASE-7516)


今後、より効率のいい、あるいは特殊な状態に特化したコンパクションポリシーなどが実装されていくことでしょう。

おまけ: CDH の話


CDH5 では HBase 0.96 ベースになると思われますので、Exploring Compaction はデフォルトでオンになっています。
実は CDH4 でも使用することができます。CDH4.4 で、HBase 0.94 に Exploring Compaction をバックポートするパッチが入っています。(HBASE-8283)

githubのコミットログ


HBase 0.94 にはプラガブルコンパクションポリシーがないため、コンパクションのコードにそのまま追加しています。
デフォルトはもちろんオフです。
hbase.hstore.useExploringCompation を true にすると使うことができるため、興味のある人は試してみてください。

2013年夏のプログラミング・シンポジウム ビューティフルデータ(3) 午後2 #spro2013

関連リンク


(講演者の方は敬称略)

並列データ処理基盤を用いた並行バグ並列検査方式の検討 荒堀喜貴(東京工業大学)


目的: 並行バグ検査の高速化(並列化)

背景

前提とするプログラム実行モデル

  • 複数スレッドが共有メモリを並行アクセス
    • 並行 = 並列 + 擬似並列
    • スレッド操作は fork/join, lock/unlock, wait/notify
    • メモリモデルは Sequencial Consistency を仮定しない
事例
  • MozillaApacheのケース
    • Concurrency 並行処理のバグは、Mem メモリ操作のバグや Sem 意味依存のバグに比べて遥かに少ない

並行バグの検査に特化した専用ツール

競合解析を基にきわどいスレッドインタリーブを合成
Maple: Active Scheduling


イベント履歴に基づく競合解析
アクセスイベントeを5つ組として定義
メモリオブジェクト
スレッドIDロック集合



この方式の問題

  • イベント履歴に基づく競合解析の問題
    • 複数スレッドによるイベント履歴操作衝突で高オーバヘッド
    • 大規模分散データ処理技術の適用可能性が不明


マルチコアMapReduceによる競合解析

「リアルストレージワークロード特徴抽出のためのデータ収集蓄積技術」大江和一(富士通研究所)


ストレージのワークロードを自分たちで収集
2007.10 〜 2010.12
継続してログ収集ができたのは、最後の1.5年間


収集を行ったストレージシステム
スケールアウト型分散ストレージシステム
ワークロード収集を行った主なストレージシステム
Samba + backup : 35TB 数ヶ月単位のワークロードを収集
Samba 4.4TB (連続1.5年分)
生トレースの保存はあきらめ、1GB / min 単位で統計情報を抽出し、圧縮・保存


統計データの最大サイズ kb / 回 150 50
統計データの最大サイズ gb / 月 6.2 2.1
平均ユーザ数 1000 3000
最大IOPS 1500 2000


平均ドロップ率1%未満
全IOの7割が特定のブロックに集中


「ソーシャルデータを分析・可視化することで見えてくる人間行動」本郷寛(ユーザーローカル)

Twitter: バースト現象。ニュースの拡散性は指数的に減少していく


「単車の虎」に於けるアクセスログ収集・解析手法 今井陽太(Donuts)


データ量

  • 3GB / day
  • 3min 400GB
  • 年間 4.8TB
  • Bzip2 圧縮


なぜBzip2か
お金がないのでストレージ買いたくないから

2013年夏のプログラミング・シンポジウム ビューティフルデータ(2) 午後1 #spro2013

長いので複数記事に分けました。

[招待講演] 製鉄所における大量品質管理データの解析事例と課題 茂森弘靖(JFEスチール)

15年ぐらい製鉄所の新しい設備を作ってた
5年前に研究所に移ってデータ解析しはじめた

  • JFEスチール
    • 東日本製鉄所
    • 西日本製鉄所
      • 福山・倉敷
    • 知多製鉄所


今日は倉敷地区




高炉→転炉→連鋳
これで圧延向けの半製品を作る
そこから各種工程に分かれて様々な製品を作る

  • 顧客数2万社→製品8万種→80万件/月オーダー
  • 設備数 140
  • 通貨工程 5600
  • 生産量 3000万トン / 年
  • 清算業務管理用計算機 Level4
  • 創業間利用計算機 Level3
  • 製鉄所基幹LAN プロセス計算機 Level2
  • 計装DCS LAN ・ 電気PLC LAN
  • デジタル制御装置 Level1
    • 10us 周期など


プロセス計算機ソフト量
2000年ぐらいで 800万ステップ


実装されるモデルの数が飛躍的に増大
蓄積されるデータの量は飛躍的に増大


鉄鋼製品の特性
引張強度 200 - 1500 MPa
すごい幅が広い


鉄鋼製造プロセスの特長
巨大装置産業
注文に基づく清算が基本
多品種・少ロット清算へ対応可能
多くの工場・プロセスを経由
etc.




鉄鋼製品の品質指標

  • 材質
    • 最も重要な品質指標
    • 強度
      • 引張強度
      • 降伏点
      • 伸び
    • 靭性
      • 吸収エネルギー
      • 遷移温度
    • 磁気特性
      • 鉄損
  • 寸法
  • 形状
    • 板クラウン
    • 平坦度
    • 平面形状
  • 表面品質


品質管理業務フロー

  • お客様から注文
    • 要求材質
      • 強度
      • 靭性
  • 品質検討
  • 受注可否判断
  • 製造条件
    • 化学成分
    • 加熱条件
    • 圧延条件
    • 冷却条件


製造条件から品質(材質)を精度良く予測する手段が必要

材質予測モデルの概要
  • 冶金プロセスと製造プロセス
  • 金属組織の変化をオンラインで解析するのは非常に困難


局所回帰モデル
要求点に近い事例で回帰分析


材質予測モデルのデータセット 約10,000
生産サイクルに合わせる
FIFOで更新


微量金属の強度への寄与
局所回帰モデルによって、偏回帰係数の変化を計算
飽和現象がうまく表現できた

  • 従来手法とその問題点
    • 近い事例での検索
    • 線形回帰式で材質予測
    • 設計負荷が高い
    • 精度が悪い


品質設計問題の定式化
2次計画問題を逐次解く
多目的最適化問題


データマイニングツールのビジュアルプログラミングを利用
数理システムの Visual Mining Studio



多変量統計敵プロセス管理


各操業条件の実績値が互いに相関をもって連動することに着目
各操業条件データを連動する方向をもとに整理(主成分分析)し、2つの変数を監視


相関しているはずが、逆相関の結果を検出する
単に元の変数だけ見てるとわからない

T2統計量
製造仕様の変更、実験材投入など
人為的バラつき

Q統計量
センサー異常、機器故障など
突発的バラつき


従来の監視者の業務
管理データ 1000超
データ抽出・編集作業 2時間/工場

MSPCによる解析
基準データ(異常のない通常操業のデータ)
実績・評価用のデータ

それを解析してT2やQ統計量を出す

MSPCにより原因候補を抽出


10年前は懐疑的な人が多かったが、そういう人は10年間で会社辞めてってるので……

Q. どれくらいきれいなデータでやってるのか?(PFI 比戸さん)
A. 欠損データは除くようにしている
このデータはこの範囲にないといけないはずだというテーブルを持っている
3σより外れたものは削除している
試行錯誤の中で導入している

「コロケーション・パーチェスビッグデータの対応分析クラスタリングによる類似地域推薦システム」大槻明(東京工業大学)


Twitterから位置情報(コロケーション情報)その中でも市区町村の情報と「どこで何を買ったか」(パーチェス情報)を取得
これを2部グラフとしてとらえ、対応正を類似尺度としたクラスタリングを行う

クラスタリングの結果生成される類似地域を可視化
未完成


先行研究
計量書誌学とModularity
約3万件のデータマイニング系論文データを可視化したイメージ
計量書誌学: 論文引用の研究
http://ja.wikipedia.org/wiki/%E8%A8%88%E9%87%8F%E6%9B%B8%E8%AA%8C%E5%AD%A6


Modularity Qによるクラスタリング
モジュラリティ: コミュニティ分割時の評価関数
モジュラリティ値が高いときにグループ分割をすれば、
グループ(モジュール)内でのつながりが密な状態で、グループ外とのつながりが疎な状態ができる

Modularity はリンク無制限のネットワークには使うことができるが、2部グラフには使うことができない

Modularity Qの2部グラフへの応用(先行研究)
Barber のQb、村田のQm、etc.


Twitterからのデータ取得
対象期間: クリスマス
2012/12/22 - 25

取得件数: 1,083

使える情報: 731

パーチェス情報
どこで買ったか
@つきなどで位置情報があるものは自動抽出、ないものは手動抽出

何を買ったか
Chasen係り受け抽出

Uppertail法による階層クラスタリング
→x-means法へ

kmeans をつかて2分割を繰り返すが
BIC(ベイズ情報推定)を使う










ストリーム解析処理再訪〜HPCの観点から〜 秋岡明香(明治大学)


研究の目的

  • ストリーム解析処理の挙動解析とモデル化
    • データインテンシブとは根本的に何が違うか
  • ストリーム解析処理のベンチマーク


データインテンシブは write once read many
ストリーム解析は write once read once


データインテンシブ
データアクセスの高速化がアプリケーション高速化の鍵!


ストリーム解析処理
データアクセス高速化してもちっともうれしくない
高速化戦略を見直さないといけない


ストリーム解析処理の一班モデル(1)
「流れてくるデータをフェッチする。余す所なくフェッチする」


流れてくるデータ→処理1→スケッチ
処理1: 非常に軽い処理じゃないとダメ
スケッチ: キャッシュのような記憶領域
処理2: スケッチからデータをとって解析する。DBなどに叩き込む
処理3: DBなどから取り出して解析する。


処理1〜スケッチ〜処理2 の高速化が課題
スケッチはデータ依存・処理依存


ストリーム解析処理の一般モデル(2)
データフェッチ + スケッチ read → 処理1 → スケッチ write → スケッチ read → 処理2

n番目のデータを処理するプロセスと同時に、n + 1 番目のデータを処理するプロセスも必要


タスクグラフ
アプリケーションのデータ依存や制御依存、計算コストなどを模式化した有向グラフ
スケジューリングアルゴリズムの評価時など対象アプリケーションとして擬似的に使用


実行時間見積もりに関して
計算対象のデータ量等で実行時間の大きな変動が起こりうる
Min-Summaryのしきい値再計算など
平均値による実行コストの見積もりは意味なくなるかもしれない


too many cores の時代到来?

2013年夏のプログラミング・シンポジウム ビューティフルデータ(1) 午前 #spro2013

(講演者の方の氏名は敬称略)

[招待講演] パーソナルデータ保護法制に向けた最近の動向 高木浩光(産業技術総合研究所)

ここ2年ほどで急にきわどい事例が出始めた
(なんかたがが外れた感じ。技術的に実現可能になったからではない)


本人の同意があれば問題ない
ただし、真に同意があると言えるか疑わしい事例あり
契約上の同意だけでなく、自主的な同意がないとダメというのが法律家の意見
コンテキストに沿わない取得と利用(誤認誘導型)


特定の個人を識別できないデータならOKという主張
なぜそう思うの?逆になぜ特定の個人を識別できるデータはヤバいと思うの?
個人情報保護=連絡先の保護と誤解している人も何割かいる


何をもって匿名化されていると言えるか
PPDM privacy preserving data mining などの技術を前提に制度設計してよいか否か
政治家は、こういう技術が社会的にどう影響を与えるかわからない


例: ロンドンのスマートゴミ箱
通行人を識別してた→問題とされて試験運用を中断

この半年の動き
    • 総務省 パーソナルデータの利用・流通に関する研究会
      • 情報セキュリティ対策室10月設置、6月報告書
      • 個人情報保護法を超越した保護。利活用の制度を提案
      • パーソナルデータ⊃個人情報
    • 経産省 IT融合フォーラム パーソナルデータWG
      • 情報経済課 11月設置、5月報告書
      • 消費者と事業者の信頼関係の構築→有効な同意の確保へ
    • 内閣府 規制改革会議 創業等WG
      • 内閣総理大臣諮問 1月設置 3-5月WG、6月答申
      • 氏名住所削除で匿名データとみなそうとするが失敗
      • 現行法を無視してガイドラインで合法化を目指す方向性

6月14日 世界最先端IT国家創造宣言


国際先端テストの結論(消費者庁)
「匿名化情報の利用に関する日本と欧米の制度の比較」
特定個人を識別できるような対応表を廃棄すれば問題ない、法改正は必要ない
→そんなことはない



個人情報保護法

個人情報とは
生存する個人に関する情報であって
氏名、生年月日その他の記述等により特定の個人を識別することができるもの
(他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを含む)


法解釈上の論点
「識別することができる」は誰によって識別という話か?
提供者基準(政府及び消費者庁・経産省、鈴木)
受領者基準(岡村)


岡村久道 個人情報保護法 新訂版、商事法務、2009
Aにとって識別性を具備しない情報を、これを具備するBに提供するケースは実際に発生しうるか疑問
→これは誤り


X(識別性あり) → Y(識別性なし) → Z(識別性あり) を想定していない



  • 業務委託との混同に注意
  • データ分析の業務委託の場合(政府説での理解)
    • 委託契約の元で履歴データを提供(預託)する
    • データから氏名等を削除して臨時のIDを付して渡すのが通例
    • その意図は、安全管理措置として事故字の被害を軽減するためであり、個人データの提供に当たらなくする(個人情報に該当しなくする)ためではない
    • 委託先は委託元と一体であるから委託先においても個人データ


JR-日立の例
一旦JRが受け取った後の統計データであればまだよかった
業務委託した日立がデータ提供しているのが問題
似てるようで全然違う
現行法だと違法だと言っていい


現行法
提供毎にランダムIDを付与するのは合法
→提供毎に過去全部のデータを提供してしまえば無意味




データ自体による照合性
k-匿名性との関係(全データがk=1だったら?)



適切な匿名化措置
匿名化したデータを再識別化しないことを約束・好評
第三者に提供する場合は、提供先が再識別化することを禁止すること




ゲノム科学におけるビッグデータ・データマイニング 石井一夫(東京農工大学)


バイオインフォマティクス、計算機統計学、ゲノムのデータ解析が専門
「Rによる計算機統計学


次世代シーケンサーとは、2005年ごろ実用化された新型分析機器。
大量拘束にDNAを解読可能で、ヒトゲノムを3時間程度で解読
個装基板上にDNA断片を子草加市、これを蛍光色素+酵素反応などを用いて、同時並列的に解読。CCDカメラで撮影+コンピュータで処理。
1検体大体数GBで、数百GBのデータを日常的に処理する。大体1000人程度で200TB
このデータを解析していく。

1. 画像処理からDNA塩基配列を取得する。
2. 配列を集計、編集していく
3. 統計処理をしていく

分散しやすいところ(マッピングやBLAST検索)はHadoop (AWS EMR)、分散しにくいところは大量のメモリ(4TB)を積んだサーバで処理

  • Hadoop上で動作する分析ツール
    • Crossbox(ジョン・ホプキンス大学)
    • Contrail
    • Myrna
    • GATK(Genome Analysis ToolKit)


次世代シーケンサーデータの品質管理

サンプル濃度の間違いや試薬濃度の間違いなどの解析
モンテカルロを使うと精度よく品質解析可能


Q. 圧縮してないの?
してる場合もある、と回答してたのであまり圧縮してないっぽい


数式を綺麗にプログラミングするコツ 中谷秀洋(サイボウズ・ラボ)


スライド http://www.slideshare.net/shuyo/programming-based-on-formula


数式

数式から行間の情報を読み解く

「逐語訳」できる形に数式を書き換える

実装


きちんと計算後の次元・サイズを確認する
さぼらず紙と鉛筆で確認するのが一番賢い

HBase論争に釣られてみる

HBaseコミッター達による、NoSQLの記事への反論が面白かったので翻訳してみました。

著者の許諾取得済み。Thanks Stack and the other authors!

本文

原題: Taking the Bait


Information Weekは先日、「HBase はNoSQL を支配するのか?」という記事を掲載した。MapR の Michael Hausenblas は HBase の事例に「賛成」の論陣を張っており、Apache Cassandra の Jonathan Ellis とベンダーである DataStax は「反対」の側だった。

この「ディベート」をベンダーのセールストークとして却下し、Apache HBase に立ち戻り、HBase を使用し、改善していくのは、簡単な話である。しかし、この記事は特別に問題のある例だった。記事では、「賛成」と「反対」の双方とも、HBase コミュニティの仕事にはほんの少ししか言及していない。ここでは誤りを訂正する目的で、いくつかの点に言及したい。

まず、Michael は、Hadoop が急速に成長しており、そして、HBase は Hadoop から出てきたのであり、緊密に結びついているのであるから、HBase は上向きの上向きだ、と論じていた。HBase コミュニティの積極的な参加者でなければ、このような仮定を立てるのは容易である (HBase によって Hadoop の採用を推進されているところでは、その逆に出くわすことにもなる)。
Michael は次に、古い一貫性対 eventual-consistency の戦いに話を焼き直し、飽き飽きする HBase 対 Cassandra の機能比較に切り替えた。そして、最後には、Cassandra の源泉である Facebook がデータ保存のために、大きなサイズのいくつかのアプリの代わりに HBase を使用することにしたというだけの理由で、HBase の方が良い、と結論づけた。我々はその種の論争などしない。Apache HBase か Apache Cassandra を活用すべきであるかどうかは、多くの要因によるのであり、多くの規模の問題と同様に攻撃的な言い争いに巻き込まれすぎているといえる。


その次に Michael は、「我々は企業向けの HBase の「次のバージョン」を作り上げた・・・。我々は2013年5月に M7 のラベルの下でその新しいバージョンをGAにもたらした」と語り、おとり商法を行った。この引用での「我々」というのは、Apache HBase コミュニティのことを述べているのではなく、Michael の雇用主であるMapR Technologies のことを指している。また、Michael が言及する「企業向けの HBase」というのは Apache HBase のことではない。M7 というのは、我々が知る限り、構造上 Apache HBase とは根本的に異なっている、プロプライエタリの製品である。その製品はソースが明らかにされていないのであり、我々はこれ以上は言及できない。この話は、Apache HBase コミュニティが長年にわたり、ハードワークと、Apache HBase 以外の商業的なクローズドソースの製品への寄与を通じて築き上げてきた信用と善意をいただいてしまおうとする試みと見えた。


次は、Jonathan の「反対」の論に言及してみたい。Jonathan の主張のいくつかは今はもう真実ではないか、大いに主観的である。真実でないというのは、「RegionServer のフェイルオーバーは10分ないし15分かかる」という箇所である (HDFS-3703 および HDFS-3912 を見てほしい)。主観的であるというのは、「HBase をもとに開発を行うのは苦痛だ」という箇所である (我々の意見では、我々のクライアントAPIは、一般的に使用されているCassandra クライアントライブラリよりも簡単で使いやすい)。これら以外のものについては、どれもメーリングリストから Quora に至るフォーラムで何年にもわたり論議・再論議してきたものばかりだった。Jonathan の論は大部分は、我々が Apache Hadoop の HDFS ファイルシステムと緊密に結びついていることと、 Google BigTable アーキテクチャの輪郭をなぞっていることから来るものを、列挙しているだけである。HBase は HDFS の多くの機能を利用し、BigTable からは着想を得ている。その結果として、Cassandra にとっては問題となるユースケースのいくつかを、我々は得意としている。逆もまた真である。我々のユーザーが使用するハードウェアは進化するのであり、あるいは、新たなユーザーが新しいユースケースをもとにした経験をもたらすのであり、我々も HDFS もじっとその場に立ち止まったままではいない。


彼は、アプローチの違いを強調している。


我々は協調させるために、Apache HDFS の採用、Apache Hadoop MapReduce の統合、および、Apache ZooKeeper の使用を選んだことを、健全な関心の分離と見なしている。HBase は歴戦のコンポーネントで構築されている。これは特徴であり、バグではない。


Jonathan が組み込まれたクエリ言語やセカンダリインデックス機能をコア Cassandra に必要な複雑化と見なすのに対し、我々は、Salesforce の Phoenix のようなプロジェクトを、Apache HBase を中心とするより大きなエコシステムの一部である見なし、支援する。Phoenix の人たちは問題のその部分にドメインの専門知識をもたらすことができるが、我々 (HBase) は、安定したパフォーマンスの高いストレージエンジンコアを提供することに焦点を当てることができる。Apache Hadoop をここまで成功させてきたものの一部は、プロジェクトを支援し豊かにするそのエコシステム、HBase を含むエコシステム、である。そのようなエコシステムが、HBase の周囲で発展してきた。


Jonathan が、HBase コミュニティのことを「リーダーシップ」が分散されているために「断片化」されていると評する方向へとそれていくのに対し、我々は、そこで言及されているのはたぶん、Apache HBase プロジェクトは「所有」されたプロジェクト、つまりたった1人のベンダーに導かれたプロジェクト、ではないという事実であるのだろうと考えている。むしろそれは、多くの組織、ほんの数例をあげれば、Cloudera、Hortonworks、SalesforceFacebook、Yahoo、IntelTwitter、および Taobao ということになるが、それらの多くの組織からの多くのチームがみな協力してそのプロジェクトを推進していこうとしている、そのようなプロジェクトなのである。Apache HBase コミュニティのほとんどは、2つのブランチでの共同作業に参加している。ブランチの1つは新規の0.96のリリースに関するものであり、もう1つは現在の安定したリリースである0.94に関するものである。Facebook もまた、共有されているソース管理リポジトリにおいて、Facebook 独自の Apache HBase のブランチをもっている。このブランチはインスピレーションの源泉になっており、ときに他のブランチへの直接的な寄与となっている。我々のコミュニティのニーズと要望に応じた便利で効率的な協力モデルを発見したことについて、我々は謝罪するつもりなどない。たった1人のベンダーに導かれた他のプロジェクトにとっては、このことは完全に最適化されていないか、場合によっては混沌 (「断片化」) とすら見えることだろう。


我々はこれはそのまま残しておく。

いつもと同じように、我々は、我々のコミュニティと Apache HBase プロジェクトへのあなたの参加と寄与を歓迎する。我々には、偉大な製品と、特定の商業体への恩義がなく、エゴのない、摩擦の少ない意思決定プロセスとがある。もしあなたがかかなければならない痒みがあって、Apache HBase が解決策ではないかと思うのなら、あるいは、あなたが Apache HBase を使用していて、もっといい改善案があるはずだと感じるのなら、我々のところにやってきて、大いに話をしましょう。

Hadoopのディスクあふれ対策(補足)


最近流行りのディスク容量があふれたときの挙動、Hadoop編を書こうと思ったらwyukawaさんが既に書いてくださったのでやめました。
……と思ったのですが、せっかくなので id:wyukawa さんが書いてない箇所を補足してみようと思います。

( この記事は @ にレビューしてもらっています。ありがとうございます )

wyukawaさんの記事へのコメント

まずHBaseを使っている場合はcompactionがある関係上Disk使用率は50%以内に抑えておくのが無難だと思います。この辺はCassandraと同じですね。


全データを同時にコンパクションするケースはまずないので無理に50%以下に抑えなくていいとは思いますが、意識はしておいた方がいいですね。
私は60%での警告を推奨しますが、この辺はケースバイケースです。
MapReduce の出力結果など、いきなり容量増える場合もありますし、サーバが飛べば総容量は減りますから、HBase を使っていない場合でも容量ぎりぎりに使うことは推奨しません。

次にNameNodeの場合はdfs.name.dirで指定したディレクトリにメタデータを書くわけですが、このパーティションがDisk Fullになった場合はNameNodeがdownします。大変危険ですので注意しましょう。


dfs.name.dir は CDH3 / Hadoop 1.x 系のプロパティです。CDH4 / Hadoop 2.x 系だと dfs.namenode.name.dir になります。
dfs.namenode.name.dir を複数指定している場合、いずれか一つに書き込みが成功すれば警告のみでダウンしません。
WebUIからは、メタデータを書き込めないディレクトリは failed と表示されます。
edits の書き込みは、QJMベースにしていれば複数台中過半数に書き込めていれば大丈夫です。
例えば3台のジャーナルノード(JN)があれば、1台のディスクがあふれてもサービス継続します。

hadoop fs -rmで削除してもTrashが有効になっている(fs.trash.intervalが設定されている)場合は.Trashにmvするだけなのでそこも消しましょう。


hdfs dfs -expunge で Trash を空に出来ます。

Hadoop のデータ使用量


大体以下のような感じで容量を食います。

  • NN
  • 2NN 及びスタンバイNN
    • NNと同じだけのデータ及びバックアップのメタデータ(デフォルト2世代、dfs.namenode.num.checkpoints.retainedで調整可能)
    • つまり(アクティブ)NNより容量が多いので注意!
  • ジャーナルノード(JN)
    • edits
    • ログ
  • DN
    • 実データ
    • ログ
NN


そもそもメタデータ(fsimage)はメモリ上にロードしなければいけないのでせいぜい数十GBが限界。
editsは処理内容によりますが、きちんとチェックポイントが稼動していれば数GBも見ておけば十分かと。大抵の場合100GBもいくことはないと思います。
問題はログで、数百ノード〜1000ノードクラスになると数分あたり1GBなんていう恐ろしいスピードで生成されていきます。
あっという間にパンクするので注意しましょう。
ログの管理については後述。


NNについて重要なのは、100GBぐらいの容量は割と普通に使うということです。
DNに比べてディスク容量少なくていいからといって、133GB の HDD とかで RAID1 組んだりしてるとディスクあふれて落ちる場合がありますのでご注意ください。

DN


ディスク内バランシングについては wyukawa さんが書いた通り。
一時データのつもりでレプリカファクター1とかで書き込んだりしているとあっさり偏りますので、ディスク監視とこまめなバランサー稼働をこころがけましょう。

5ブロック分の書き込み容量を確保できないDNは、NNから書き込み不能DNとみなされますので、HDFSの書き込みであふれることはないです。


Hadoop はDN 1台死んだって問題ないからそんなに心配しなくてもいいんじゃね?」
と思う人がいるかもしれませんが、もしうまいことばらけて書き込んでる場合は他のDNもディスクがいっぱいになってるはずなのでわりと状況は深刻です。
HDFSの総容量は常にチェックしておきましょう。

ログ


Hadoop 1.x 及び CDH3 系はデフォルトが DRFA です。
つまり、1日ごとにローテーションしていく形式です。
これにより、ある日のログだけ異様に膨らむということが起こりえます。
CDH4 / Hadoop 2.x 系はデフォルトが RFA でサイズ固定になっています。(デフォルト 256MB * 20ファイル = 5GB)
ログあふれが起こりにくくなっている反面、ログが流れやすいので注意が必要です。


CDH4 で MapReduce1 を使っている人は、MR1だけがデフォルト CDH3 準拠、つまり DRFA になっていることに注意してください。

捕捉

よく考えたらオリジナルは「容量が少ないというアラートが飛んできたときにどうするか」なので、上記の内容だとただの予防ですね。
とりあえず思いつくのを二つ。

ログ消しましょう

RFA だと昔よりログあふれしにくくなったとはいえ、緊急事態のときには真っ先に削除する対象なのは変わらないでしょう。
クラスタ内に入って Hive を起動している場合、ローカルファイルシステムの /tmp/${ユーザ名}/ 以下に hive.log などのログ一式が収まっていますので、パーティション分けていない場合はこれも消しましょう(微々たるものですが)

HDFS

ゴミ箱ディレクトリ ~/.Trash の削除は前述の通り。
/tmp も消せるものは消しましょう。MapReduceなどのジョブの実行情報などが格納されているのでジョブの再実行ができないかもしれませんが、緊急事態なのでクラスタがダウンするよりマシです。一時しのぎしつつ根本的な対応を急ぎましょう。

MacOSXにnumpy, scipy, matplotlibをインストール

西尾さんの記事を試したかったので、必要なパッケージをインストールしました。

手順

gfortran を入れる→ pip install で必要なものを突っ込む、の順。
コンパイルする必要があるので XCode 必須。

まずは gfortran をインストール。

$ brew install gfortran

次に pip install でパッケージをインストール。

$ pip install numpy
$ pip install scipy
$ pip install matplotlib

  • warning がたくさん出るけど気にしない
  • easy_install だとうまく入らなかった。原因不明だし本当に easy_install に問題があるのかも未検証