Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
takemikami’s note – http://takemikami.com/
三上 威 (フリーランスITエンジニア) twitter: @takemikami
Apache HBase バルクロードの使い方
HBaseバルクロードの実...
takemikami’s note – http://takemikami.com/
アジェンダ
• バルクロードの全体像
• バルクロードの実施方法
• HBaseのテーブルの理解 〜regionについて
• バルクロードの仕組み
• バルク...
takemikami’s note – http://takemikami.com/
• HBaseのバルクロードは2stepで実施
– importtsv
mapreduceでtsvファイルをHFile (HBaseの内部形式)に変換
– c...
takemikami’s note – http://takemikami.com/
バルクロードの実施方法 〜1.tsvファイルの準備
• 例として、次の形式のデータをロードする流れを説明します
– キーに2桁の数字を持つ
– 属性に名前(n...
takemikami’s note – http://takemikami.com/
バルクロードの実施方法 〜2.importtsvの実行
• importtsvを実行し、tsvからHFileに変換
5Copyright (C) 2017 T...
takemikami’s note – http://takemikami.com/
バルクロードの実施方法 〜3.completebulkloadの実行
• completebulkloadを実行し、HBaseのテーブルにロード
6Copyr...
takemikami’s note – http://takemikami.com/
Rowキー カラム タイムスタンプ 値
03 名前 1484890815454 佐藤
03 年齢 1484890815454 32
12 名前 1484890...
takemikami’s note – http://takemikami.com/
Rowキー カラム タイムスタンプ 値
03 名前 1484890815454 佐藤
03 年齢 1484890815454 32
12 名前 1484890...
takemikami’s note – http://takemikami.com/
HBaseのテーブルの理解 〜region状態の確認
9Copyright (C) 2017 Takeshi Mikami. All rights reser...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み
10Copyright (C) 2017 Takeshi Mikami. All rights reserved.
TSV
TSV
キー...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 1. tsvファイルの準備
11Copyright (C) 2017 Takeshi Mikami. All rights reserv...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 2. mapper/reducerの起動
12Copyright (C) 2017 Takeshi Mikami. All rights...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 3.map処理
13Copyright (C) 2017 Takeshi Mikami. All rights reserved.
TS...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 4.shuffle処理
14Copyright (C) 2017 Takeshi Mikami. All rights reserved...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 5.reduce処理
15Copyright (C) 2017 Takeshi Mikami. All rights reserved....
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 6.completebulkload処理
16Copyright (C) 2017 Takeshi Mikami. All rights...
takemikami’s note – http://takemikami.com/
バルクロードの仕組み 改めて全体
17Copyright (C) 2017 Takeshi Mikami. All rights reserved.
TSV
...
takemikami’s note – http://takemikami.com/
バルクロード実施時の注意点
• バルクロード実施時、以下のバランスが悪いと問題が生じる
– ①ロードするデータサイズ ②テーブルのregion分割数
18Co...
Upcoming SlideShare
Loading in …5
×

Apache Hbase バルクロードの使い方

630 views

Published on

本資料では、HBaseのバルクロードの実施方法と仕組み、実施時の注意点について説明します。

Published in: Technology
  • Be the first to comment

Apache Hbase バルクロードの使い方

  1. 1. takemikami’s note – http://takemikami.com/ 三上 威 (フリーランスITエンジニア) twitter: @takemikami Apache HBase バルクロードの使い方 HBaseバルクロードの実施方法・仕組み・実施時の注意点 1 HBase Hadoop 2017/2/14 Copyright (C) 2017 Takeshi Mikami. All rights reserved.
  2. 2. takemikami’s note – http://takemikami.com/ アジェンダ • バルクロードの全体像 • バルクロードの実施方法 • HBaseのテーブルの理解 〜regionについて • バルクロードの仕組み • バルクロード実施時の注意点 2Copyright (C) 2017 Takeshi Mikami. All rights reserved.
  3. 3. takemikami’s note – http://takemikami.com/ • HBaseのバルクロードは2stepで実施 – importtsv mapreduceでtsvファイルをHFile (HBaseの内部形式)に変換 – completebulkload HFileをHBaseのテーブルにロード バルクロードの全体像 3Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのバルクロード全体の流れについて説明します。 tsv ファイル HFile HBase table importtsv complete bulkload Step1 Step2 →本資料では、HBaseのバルクロードの実施方法・仕組み・実施時の注意点を説明します。
  4. 4. takemikami’s note – http://takemikami.com/ バルクロードの実施方法 〜1.tsvファイルの準備 • 例として、次の形式のデータをロードする流れを説明します – キーに2桁の数字を持つ – 属性に名前(name)・年齢(age)を持つ • 次のカラムを持つtsvファイルを作成 – キー、名前、年齢 • HDFSにtsvをupload 4Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのバルクロードの実施方法を示します。 $ hadoop fs -mkdir /tmp/sample/tsv $ hadoop fs -put sample.tsv /tmp/sample/tsv/0001 キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ ↑tsvファイルのイメージ
  5. 5. takemikami’s note – http://takemikami.com/ バルクロードの実施方法 〜2.importtsvの実行 • importtsvを実行し、tsvからHFileに変換 5Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのバルクロードの実施方法を示します。 $ hbase org.apache.hadoop.hbase.mapreduce.ImportTsv ¥ -Dimporttsv.columns=HBASE_ROW_KEY,name,age ¥ -Dimporttsv.bulk.output=hdfs:///tmp/sample/hfile ¥ sampletable hdfs:///tmp/sample/tsv テーブルの カラム名リスト HFileの出力先 入力tsvファイルの格納先 テーブル名 tsv ファイル HFile HBase table importtsv complete bulkload Step1 Step2
  6. 6. takemikami’s note – http://takemikami.com/ バルクロードの実施方法 〜3.completebulkloadの実行 • completebulkloadを実行し、HBaseのテーブルにロード 6Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのバルクロードの実施方法を示します。 $ hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles ¥ hdfs:///tmp/sample/hfile sampletable テーブル名 HFileの格納先 tsv ファイル HFile HBase table importtsv complete bulkload Step1 Step2
  7. 7. takemikami’s note – http://takemikami.com/ Rowキー カラム タイムスタンプ 値 03 名前 1484890815454 佐藤 03 年齢 1484890815454 32 12 名前 1484890815454 山田 12 年齢 1484890815454 47 15 名前 1484890815454 山本 15 年齢 1484890815454 21 76 名前 1484890815454 鈴木 76 年齢 1484890815454 25 95 名前 1484890815454 高橋 95 年齢 1484890815454 18 HBaseのテーブルの理解 〜tableとregion 7Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのテーブルのregionについて説明します。 • HBaseのテーブルは、Rowキー・カラム・タイムスタンプに対して1つの値を持つ構造 • データはRowキーの範囲で分割し保存される(分割された単位をRegionと呼ぶ) Region① 00〜50 注:columnfamilyの説明は省きます。 Region② 51〜99
  8. 8. takemikami’s note – http://takemikami.com/ Rowキー カラム タイムスタンプ 値 03 名前 1484890815454 佐藤 03 年齢 1484890815454 32 12 名前 1484890815454 山田 12 年齢 1484890815454 47 15 名前 1484890815454 山本 15 年齢 1484890815454 21 76 名前 1484890815454 鈴木 76 年齢 1484890815454 25 95 名前 1484890815454 高橋 95 年齢 1484890815454 18 HBaseのテーブルの理解 〜regionの分割 8Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのテーブルのregionの分割について説明します。 • Region内のデータサイズが閾値を超えると、Regionがsplit(分割)されます。 (明示的にコマンドを入力してsplitすることも可能) Region① 00〜50 Region② 51〜99 Region① 00〜14 Region② 15〜50 Region③ 51〜99 データ量が閾値を 超えると、split データ量が閾値を 超えると、split
  9. 9. takemikami’s note – http://takemikami.com/ HBaseのテーブルの理解 〜region状態の確認 9Copyright (C) 2017 Takeshi Mikami. All rights reserved. HBaseのテーブルのregion分割状態の確認方法について説明します。 • テーブルがどんなRegionに分割されているかは、HBaseのメタ情報から確認 hbase> scan ‘hbase:meta’,{FILTER=>“PrefixFilter(‘※テーブル名※’)"} column=info:regioninfo, ・・・・, value={・・・・, STARTKEY => '00', ENDKEY => '50'} ■コマンド ■結果 各regionの開始・終了位置各regionの開始・終了位置
  10. 10. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 10Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 compltebulkload HBase importtsv step1 mapreduceでtsvファイルを HFile (HBaseの内部形式)に変換 Region① 00〜50step2 HFileを HBaseテーブルに ロード バルクロードは、この2stepで実施 次スライドから順を追って説明します
  11. 11. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 1. tsvファイルの準備 11Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV HDFSに入力TSVファイルをアップロードします
  12. 12. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 2. mapper/reducerの起動 12Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV 入力TSVファイル数に応じた数の mapperを起動します インポート先テーブルのRegion数の Reducerを起動します Regionが2つであれば、 Reducerも2つ Regionが2つであれば、 Reducerも2つ
  13. 13. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 3.map処理 13Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV 入力TSVファイル数を インポート先テーブルの「キー」と「属性値のMap」 の形式にmapします
  14. 14. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 4.shuffle処理 14Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV 出力先テーブルの regionのキー範囲に合わせ、 各reducerにshuffleします 00~50の範囲00~50の範囲 51~100の範囲51~100の範囲
  15. 15. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 5.reduce処理 15Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV regionのキー範囲ごとに、 Reduce処理で、 HFileを生成します
  16. 16. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 6.completebulkload処理 16Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV 各region毎に、 Hfileをテーブルにロードします
  17. 17. takemikami’s note – http://takemikami.com/ バルクロードの仕組み 改めて全体 17Copyright (C) 2017 Takeshi Mikami. All rights reserved. TSV TSV キー 名前 年齢 76 鈴木 25 03 佐藤 32 12 山田 47 25 ・・・ ・・・ キー 値 76 名前:鈴木, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 25 ・・・ Map Shuffle キー 値 03 名前:佐藤, 年齢:32 12 名前:山田, 年齢:47 15 名前:山本, 年齢:21 25 ・・・ HFile キー 値 95 名前:高橋, 年齢:18 76 名前:鈴木, 年齢:25 65 ・・・ キー 名前 年齢 95 高橋 18 15 山本 21 65 ・・・ ・・・ キー 値 95 名前:高橋, 年齢:18 15 名前:山本, 年齢:21 65 ・・・ Map HFile Reduce Reduce Region① 00〜50 Region② 51〜100 Complete BulkLoad Complete BulkLoad バルクロード(ImportTSV〜CompleteBulkLoad)の流れについて順を追って説明します。 CompleteBulkLoad HBase ImportTSV
  18. 18. takemikami’s note – http://takemikami.com/ バルクロード実施時の注意点 • バルクロード実施時、以下のバランスが悪いと問題が生じる – ①ロードするデータサイズ ②テーブルのregion分割数 18Copyright (C) 2017 Takeshi Mikami. All rights reserved. バルクロード実施時の注意点を説明します。 『①ロードするデータサイズ > ②テーブルのregion分割数』の場合 ロードするデータがregionに収まりきらず、 completebulkloadの途中で、何度もauto-splitが発生し、ロードに時間がかかる。 『①ロードするデータサイズ < ②テーブルのregion分割数』の場合 region分割数が多いと多数のHFileができる。 テーブルを洗い替え(truncate→complatebulkload)しようとすると、 単一regionにロードできるHFile数の閾値を超えて、エラーになってしまう。 → (importtsv実行前にregionを手動splitするなど) ロードするデータサイズとregion数をバランスさせておく必要がある。

×