狠狠撸

狠狠撸Share a Scribd company logo
takemikami?s note ? http://takemikami.com/
HBase CompleteBulkLoad
その仕組み&発?した問題
Copyright (C) Takeshi Mikami. All rights reserved. 1
三上威(アーリース情報技術株式会社 代表) twitter: @takemikami
2019.6.4 Repro Tech: 実践?並列分散処理基盤 @ Repro株式会社
takemikami?s note ? http://takemikami.com/
はじめに
?テーマ
HBase CompleteBulkLoad
その仕組み&発?した問題
?内容
? CompleteBulkLoadの概要
? 発?した問題とCompleteBulkLoadの仕組み
Copyright (C) Takeshi Mikami. All rights reserved. 2
本?のLTでお話しする内容について説明します
※「HBaseが分散KVSである」と知っていれば理解できる内容です
takemikami?s note ? http://takemikami.com/
??紹介
? 三上威 (@takemikami)
? データエンジニア?サイエンティスト
? タスク: 分析?予測モデル開発?基盤構築 etc
? 対象: マーケティングデータ etc
? 略歴
? 甲南?学理学部応?数学科 卒
? EC, CRM等のシステム構築 @ NEC系SIer
? ECサイトのマーケティングデータ分析 @ DeNA
? データ分析?予測モデル開発?基盤構築 @アーリース情報技術(株)
Copyright (C) Takeshi Mikami. All rights reserved. 3
発表者のプロフィールを紹介します
※フリーランスの法?成り
takemikami?s note ? http://takemikami.com/
??紹介 開発プロダクト
? digdag-plugin-shresult
? ワークフローエンジン「Digdag」のプラグイン
? シェルスクリプトを実?し、標準出?をDigdagの変数に格納するオペレータ
? https://github.com/takemikami/digdag-plugin-shresult
? objectify-appengine-memcacheclient
? Google Cloud DatastoreのJava?ライブラリ「Objectify」(v6以降)で、
Google AppEngine Memcache のキャッシュを利?するためのサービス
? https://github.com/takemikami/objectify-appengine-memcacheclient
Copyright (C) Takeshi Mikami. All rights reserved. 4
発表者が作ったプロダクトを紹介します
etc
takemikami?s note ? http://takemikami.com/
??紹介 技術同?誌
? Apache Hadoop & Sparkビッグデータプログラミング??
? ビッグデータの加?や機械学習のためのプログラミングガイド
? 2019.4.14 技術書典6 @ 池袋サンシャインシティ2F 展?ホールD
Copyright (C) Takeshi Mikami. All rights reserved. 5
発表者が執筆した同?誌を紹介します
https://takemikami.booth.pm/
takemikami?s note ? http://takemikami.com/
CompleteBulkLoadの全体像
? HBaseのCompleteBulkLoadは2stepで実施
? importtsv: mapreduceでtsvファイルをHFile (HBaseの内部形式)に変換
? completebulkload: HFileをHBaseのテーブルにロード
Copyright (C) Takeshi Mikami. All rights reserved. 6
HBaseのCompleteBulkLoad全体の流れについて説明します
tsv
ファイル
HFile HBase
table
importtsv
complete
bulkload
Step1 Step2
事前に内部形式に変換 短時間でロード
HBaseの内部形式
takemikami?s note ? http://takemikami.com/
発?した問題
?前提
? CompleteBulkLoadでデータを洗い替え(?次バッチ)
? importtsv → truncate(drop/create) → completebulkload
?流れ
? 新機能追加でデータ量が?幅に増加
? ロードに?常に時間がかかる
? ロードに時間がかかり過ぎるため
→ 機能を?直して、データ量を削減
? エラーが出てロード出来なくなる!
Copyright (C) Takeshi Mikami. All rights reserved. 7
CompleteBulkLoadによるデータ洗い替えで発?した問題について説明します
takemikami?s note ? http://takemikami.com/
HBaseのテーブルの理解 ?tableとregion
? HBaseのテーブル: Rowキー?カラム?タイムスタンプに対し値を持つ
? データはRowキーの範囲で分割し保存 (分割された単位をRegionと呼ぶ)
Copyright (C) Takeshi Mikami. All rights reserved. 8
HBaseのテーブルのregionについて説明します
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
Region①
00?50
Region②
51?99
注:columnfamilyの
説明は省く
takemikami?s note ? http://takemikami.com/
HBaseのテーブルの理解 ?regionの分割
? Region内のデータサイズが閾値を超えると、Regionがsplit(分割)
(明?的にコマンドを??してsplitすることも可能)
Copyright (C) Takeshi Mikami. All rights reserved. 9
HBaseのテーブルのregionの分割について説明します
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
Region①
00?50
Region②
51?99
Region①
00?15
Region②
15?50
Region③
51?99
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み
Copyright (C) Takeshi Mikami. All rights reserved. 10
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
step1
mapreduceでtsvファイルを
HFile (HBaseの内部形式)に変換
step2
HFileを
HBaseテーブルに
ロード
バルクロードは、この2stepで実施
次スライドから順を追って説明します
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 1. tsvファイルの準備
Copyright (C) Takeshi Mikami. All rights reserved. 11
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
HDFSに??TSVファイルをアップロードします
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 2. mapper/reducerの起動
Copyright (C) Takeshi Mikami. All rights reserved. 12
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
??TSVファイル数に応じた数の
mapperを起動します
インポート先テーブルのRegion数の
Reducerを起動します
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 3.map処理
Copyright (C) Takeshi Mikami. All rights reserved. 13
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
??TSVファイル数を
インポート先テーブルの「キー」と「属性値のMap」
の形式にmapします
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 4.shuffle処理
Copyright (C) Takeshi Mikami. All rights reserved. 14
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
出?先テーブルの
regionのキー範囲に合わせ、
各reducerにshuffleします
00?50の範囲00?50の範囲
51?100の範囲51?100の範囲
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 5.reduce処理
Copyright (C) Takeshi Mikami. All rights reserved. 15
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
regionのキー範囲ごとに、
Reduce処理で、
HFileを?成します
takemikami?s note ? http://takemikami.com/
HFile
バルクロードの仕組み 6.completebulkload処理
Copyright (C) Takeshi Mikami. All rights reserved. 16
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Complate
BulkLoad
Map
Complate
BulkLoad
Reduce
Reduce
Shuffle
HBase
各region毎に、
Hfileをテーブルにロードします
takemikami?s note ? http://takemikami.com/
何が起きていたのか?
?前提
? CompleteBulkLoadでデータを洗い替え(?次バッチ)
? importtsv → truncate(drop/create) → completebulkload
?流れ
? 新機能追加でデータ量が?幅に増加
? ロードに?常に時間がかかる
? ロードに時間がかかり過ぎるため
→ 機能を?直して、データ量を削減
? エラーが出てロード出来なくなる!
Copyright (C) Takeshi Mikami. All rights reserved. 17
発?した問題で起こっていた内容を説明します
1度?のロード
2度?のロード
takemikami?s note ? http://takemikami.com/
HFile
何が起きていたのか? 1度?のロード
Copyright (C) Takeshi Mikami. All rights reserved. 18
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Map
Reduce
Reduce
Shuffle
HBase
CompleteBulkLoad時に
何度もSplitが発?
CompleteBulkLoad時に
何度もSplitが発?
?新機能追加でロードするデータ量が?幅に増加
?ロードに?常に時間がかかる
?ロードに時間がかかり過ぎるため データ量を削減
?エラーが出てロード出来なくなる!
Complate
BulkLoad
Complate
BulkLoad
takemikami?s note ? http://takemikami.com/
何が起きていたのか? 2度?のロード
Copyright (C) Takeshi Mikami. All rights reserved. 19
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region②
51?100
Region①
00?50
Map
Map
Shuffle
HBase
?新機能追加でロードするデータ量が?幅に増加
?ロードに?常に時間がかかる
?ロードに時間がかかり過ぎるため データ量を削減
?エラーが出てロード出来なくなる!
00?50の範囲
細かい範囲
多数のRegionがあるので
多数のHFileを作成
HFileHFileHFileHFile
Complate
BulkLoad
Reduce
細かい範囲
HFileHFileHFileHFileHFile
Reduce
Complate
BulkLoad細かい範囲
多数のRegionがあるので
多数のHFileを作成
takemikami?s note ? http://takemikami.com/
何が起きていたのか? 2度?のロード
Copyright (C) Takeshi Mikami. All rights reserved. 20
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Map
Map
Shuffle
HBase
?新機能追加でロードするデータ量が?幅に増加
?ロードに?常に時間がかかる
?ロードに時間がかかり過ぎるため データ量を削減
?エラーが出てロード出来なくなる!
HFileHFileHFileHFile
Reduce
HFileHFileHFileHFileHFile
Reduce
Region
Complate
BulkLoad
Complate
BulkLoad
complatebulkload前に
truncateするのでRegionは1つに
takemikami?s note ? http://takemikami.com/
何が起きていたのか? 2度?のロード
Copyright (C) Takeshi Mikami. All rights reserved. 21
バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します
TSV
TSV
キー 名前 年齢
76 鈴? 25
03 佐藤 32
12 ?? 47
25 ??? ???
キー 値
76 名前:鈴?, 年齢:25
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
25 ???
キー 値
03 名前:佐藤, 年齢:32
12 名前:??, 年齢:47
15 名前:?本, 年齢:21
25 ???
HFile
キー 値
95 名前:?橋, 年齢:18
76 名前:鈴?, 年齢:25
65 ???
キー 名前 年齢
95 ?橋 18
15 ?本 21
65 ??? ???
キー 値
95 名前:?橋, 年齢:18
15 名前:?本, 年齢:21
65 ???
compltebulkloadimporttsv
Region
Map
Map
Shuffle
HBase
?新機能追加でロードするデータ量が?幅に増加
?ロードに?常に時間がかかる
?ロードに時間がかかり過ぎるため データ量を削減
?エラーが出てロード出来なくなる!
HFileHFileHFileHFile
Complate
BulkLoad
Reduce
HFileHFileHFileHFileHFile
Reduce
Complate
BulkLoad
単?Regionにロード可能な
HFile数の閾値を超えてエラー
単?Regionにロード可能な
HFile数の閾値を超えてエラー
takemikami?s note ? http://takemikami.com/
?った対処
?対処① importtsvのカスタマイズ
? 指定した数でHFileを分割するようにカスタマイズ
? 元データがHiveにあったので、HiveQLで分割位置を取得
? importtsvでHBaseからsplit位置取得する処理を差し替え
?対処② 事前にRegionをSplit
? completebulkload実?前に、
HFileの分割位置でRegionをSplit (hbaseコマンド)
Copyright (C) Takeshi Mikami. All rights reserved. 22
発?した問題に対して?った対処を?します
takemikami?s note ? http://takemikami.com/
CompleteBulkLoad実施時の注意点
? CompleteBulkLoad実施時、以下のバランスが悪いと問題が?じる
? ①ロードするデータサイズ ②テーブルのregion分割数
Copyright (C) Takeshi Mikami. All rights reserved. 23
CompleteBulkLoad実施時の注意点を説明します
『①ロードするデータサイズ > ②テーブルのregion分割数』の場合
ロードするデータがregionに収まりきらず、
completebulkloadの途中で、何度もauto-splitが発?し、ロードに時間がかかる。
『①ロードするデータサイズ < ②テーブルのregion分割数』の場合
region分割数が多いと多数のHFileができる。
テーブルを洗い替え(truncate→complatebulkload)しようとすると、
単?regionにロードできるHFile数の閾値を超えて、エラーになってしまう。
→ (importtsv実?前にregionを?動splitするなど)
ロードするデータサイズとregion数をバランスさせておく必要がある。

More Related Content

HBase CompleteBulkLoadその仕組み&発生した問題

  • 1. takemikami?s note ? http://takemikami.com/ HBase CompleteBulkLoad その仕組み&発?した問題 Copyright (C) Takeshi Mikami. All rights reserved. 1 三上威(アーリース情報技術株式会社 代表) twitter: @takemikami 2019.6.4 Repro Tech: 実践?並列分散処理基盤 @ Repro株式会社
  • 2. takemikami?s note ? http://takemikami.com/ はじめに ?テーマ HBase CompleteBulkLoad その仕組み&発?した問題 ?内容 ? CompleteBulkLoadの概要 ? 発?した問題とCompleteBulkLoadの仕組み Copyright (C) Takeshi Mikami. All rights reserved. 2 本?のLTでお話しする内容について説明します ※「HBaseが分散KVSである」と知っていれば理解できる内容です
  • 3. takemikami?s note ? http://takemikami.com/ ??紹介 ? 三上威 (@takemikami) ? データエンジニア?サイエンティスト ? タスク: 分析?予測モデル開発?基盤構築 etc ? 対象: マーケティングデータ etc ? 略歴 ? 甲南?学理学部応?数学科 卒 ? EC, CRM等のシステム構築 @ NEC系SIer ? ECサイトのマーケティングデータ分析 @ DeNA ? データ分析?予測モデル開発?基盤構築 @アーリース情報技術(株) Copyright (C) Takeshi Mikami. All rights reserved. 3 発表者のプロフィールを紹介します ※フリーランスの法?成り
  • 4. takemikami?s note ? http://takemikami.com/ ??紹介 開発プロダクト ? digdag-plugin-shresult ? ワークフローエンジン「Digdag」のプラグイン ? シェルスクリプトを実?し、標準出?をDigdagの変数に格納するオペレータ ? https://github.com/takemikami/digdag-plugin-shresult ? objectify-appengine-memcacheclient ? Google Cloud DatastoreのJava?ライブラリ「Objectify」(v6以降)で、 Google AppEngine Memcache のキャッシュを利?するためのサービス ? https://github.com/takemikami/objectify-appengine-memcacheclient Copyright (C) Takeshi Mikami. All rights reserved. 4 発表者が作ったプロダクトを紹介します etc
  • 5. takemikami?s note ? http://takemikami.com/ ??紹介 技術同?誌 ? Apache Hadoop & Sparkビッグデータプログラミング?? ? ビッグデータの加?や機械学習のためのプログラミングガイド ? 2019.4.14 技術書典6 @ 池袋サンシャインシティ2F 展?ホールD Copyright (C) Takeshi Mikami. All rights reserved. 5 発表者が執筆した同?誌を紹介します https://takemikami.booth.pm/
  • 6. takemikami?s note ? http://takemikami.com/ CompleteBulkLoadの全体像 ? HBaseのCompleteBulkLoadは2stepで実施 ? importtsv: mapreduceでtsvファイルをHFile (HBaseの内部形式)に変換 ? completebulkload: HFileをHBaseのテーブルにロード Copyright (C) Takeshi Mikami. All rights reserved. 6 HBaseのCompleteBulkLoad全体の流れについて説明します tsv ファイル HFile HBase table importtsv complete bulkload Step1 Step2 事前に内部形式に変換 短時間でロード HBaseの内部形式
  • 7. takemikami?s note ? http://takemikami.com/ 発?した問題 ?前提 ? CompleteBulkLoadでデータを洗い替え(?次バッチ) ? importtsv → truncate(drop/create) → completebulkload ?流れ ? 新機能追加でデータ量が?幅に増加 ? ロードに?常に時間がかかる ? ロードに時間がかかり過ぎるため → 機能を?直して、データ量を削減 ? エラーが出てロード出来なくなる! Copyright (C) Takeshi Mikami. All rights reserved. 7 CompleteBulkLoadによるデータ洗い替えで発?した問題について説明します
  • 8. takemikami?s note ? http://takemikami.com/ HBaseのテーブルの理解 ?tableとregion ? HBaseのテーブル: Rowキー?カラム?タイムスタンプに対し値を持つ ? データはRowキーの範囲で分割し保存 (分割された単位をRegionと呼ぶ) Copyright (C) Takeshi Mikami. All rights reserved. 8 HBaseのテーブルのregionについて説明します 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 Region① 00?50 Region② 51?99 注:columnfamilyの 説明は省く
  • 9. takemikami?s note ? http://takemikami.com/ HBaseのテーブルの理解 ?regionの分割 ? Region内のデータサイズが閾値を超えると、Regionがsplit(分割) (明?的にコマンドを??してsplitすることも可能) Copyright (C) Takeshi Mikami. All rights reserved. 9 HBaseのテーブルのregionの分割について説明します 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 Region① 00?50 Region② 51?99 Region① 00?15 Region② 15?50 Region③ 51?99
  • 10. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み Copyright (C) Takeshi Mikami. All rights reserved. 10 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase step1 mapreduceでtsvファイルを HFile (HBaseの内部形式)に変換 step2 HFileを HBaseテーブルに ロード バルクロードは、この2stepで実施 次スライドから順を追って説明します
  • 11. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 1. tsvファイルの準備 Copyright (C) Takeshi Mikami. All rights reserved. 11 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase HDFSに??TSVファイルをアップロードします
  • 12. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 2. mapper/reducerの起動 Copyright (C) Takeshi Mikami. All rights reserved. 12 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase ??TSVファイル数に応じた数の mapperを起動します インポート先テーブルのRegion数の Reducerを起動します
  • 13. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 3.map処理 Copyright (C) Takeshi Mikami. All rights reserved. 13 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase ??TSVファイル数を インポート先テーブルの「キー」と「属性値のMap」 の形式にmapします
  • 14. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 4.shuffle処理 Copyright (C) Takeshi Mikami. All rights reserved. 14 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase 出?先テーブルの regionのキー範囲に合わせ、 各reducerにshuffleします 00?50の範囲00?50の範囲 51?100の範囲51?100の範囲
  • 15. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 5.reduce処理 Copyright (C) Takeshi Mikami. All rights reserved. 15 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase regionのキー範囲ごとに、 Reduce処理で、 HFileを?成します
  • 16. takemikami?s note ? http://takemikami.com/ HFile バルクロードの仕組み 6.completebulkload処理 Copyright (C) Takeshi Mikami. All rights reserved. 16 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Complate BulkLoad Map Complate BulkLoad Reduce Reduce Shuffle HBase 各region毎に、 Hfileをテーブルにロードします
  • 17. takemikami?s note ? http://takemikami.com/ 何が起きていたのか? ?前提 ? CompleteBulkLoadでデータを洗い替え(?次バッチ) ? importtsv → truncate(drop/create) → completebulkload ?流れ ? 新機能追加でデータ量が?幅に増加 ? ロードに?常に時間がかかる ? ロードに時間がかかり過ぎるため → 機能を?直して、データ量を削減 ? エラーが出てロード出来なくなる! Copyright (C) Takeshi Mikami. All rights reserved. 17 発?した問題で起こっていた内容を説明します 1度?のロード 2度?のロード
  • 18. takemikami?s note ? http://takemikami.com/ HFile 何が起きていたのか? 1度?のロード Copyright (C) Takeshi Mikami. All rights reserved. 18 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Map Reduce Reduce Shuffle HBase CompleteBulkLoad時に 何度もSplitが発? CompleteBulkLoad時に 何度もSplitが発? ?新機能追加でロードするデータ量が?幅に増加 ?ロードに?常に時間がかかる ?ロードに時間がかかり過ぎるため データ量を削減 ?エラーが出てロード出来なくなる! Complate BulkLoad Complate BulkLoad
  • 19. takemikami?s note ? http://takemikami.com/ 何が起きていたのか? 2度?のロード Copyright (C) Takeshi Mikami. All rights reserved. 19 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region② 51?100 Region① 00?50 Map Map Shuffle HBase ?新機能追加でロードするデータ量が?幅に増加 ?ロードに?常に時間がかかる ?ロードに時間がかかり過ぎるため データ量を削減 ?エラーが出てロード出来なくなる! 00?50の範囲 細かい範囲 多数のRegionがあるので 多数のHFileを作成 HFileHFileHFileHFile Complate BulkLoad Reduce 細かい範囲 HFileHFileHFileHFileHFile Reduce Complate BulkLoad細かい範囲 多数のRegionがあるので 多数のHFileを作成
  • 20. takemikami?s note ? http://takemikami.com/ 何が起きていたのか? 2度?のロード Copyright (C) Takeshi Mikami. All rights reserved. 20 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Map Map Shuffle HBase ?新機能追加でロードするデータ量が?幅に増加 ?ロードに?常に時間がかかる ?ロードに時間がかかり過ぎるため データ量を削減 ?エラーが出てロード出来なくなる! HFileHFileHFileHFile Reduce HFileHFileHFileHFileHFile Reduce Region Complate BulkLoad Complate BulkLoad complatebulkload前に truncateするのでRegionは1つに
  • 21. takemikami?s note ? http://takemikami.com/ 何が起きていたのか? 2度?のロード Copyright (C) Takeshi Mikami. All rights reserved. 21 バルクロード(ImportTSV?CompleteBulkLoad)の流れについて順を追って説明します TSV TSV キー 名前 年齢 76 鈴? 25 03 佐藤 32 12 ?? 47 25 ??? ??? キー 値 76 名前:鈴?, 年齢:25 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 25 ??? キー 値 03 名前:佐藤, 年齢:32 12 名前:??, 年齢:47 15 名前:?本, 年齢:21 25 ??? HFile キー 値 95 名前:?橋, 年齢:18 76 名前:鈴?, 年齢:25 65 ??? キー 名前 年齢 95 ?橋 18 15 ?本 21 65 ??? ??? キー 値 95 名前:?橋, 年齢:18 15 名前:?本, 年齢:21 65 ??? compltebulkloadimporttsv Region Map Map Shuffle HBase ?新機能追加でロードするデータ量が?幅に増加 ?ロードに?常に時間がかかる ?ロードに時間がかかり過ぎるため データ量を削減 ?エラーが出てロード出来なくなる! HFileHFileHFileHFile Complate BulkLoad Reduce HFileHFileHFileHFileHFile Reduce Complate BulkLoad 単?Regionにロード可能な HFile数の閾値を超えてエラー 単?Regionにロード可能な HFile数の閾値を超えてエラー
  • 22. takemikami?s note ? http://takemikami.com/ ?った対処 ?対処① importtsvのカスタマイズ ? 指定した数でHFileを分割するようにカスタマイズ ? 元データがHiveにあったので、HiveQLで分割位置を取得 ? importtsvでHBaseからsplit位置取得する処理を差し替え ?対処② 事前にRegionをSplit ? completebulkload実?前に、 HFileの分割位置でRegionをSplit (hbaseコマンド) Copyright (C) Takeshi Mikami. All rights reserved. 22 発?した問題に対して?った対処を?します
  • 23. takemikami?s note ? http://takemikami.com/ CompleteBulkLoad実施時の注意点 ? CompleteBulkLoad実施時、以下のバランスが悪いと問題が?じる ? ①ロードするデータサイズ ②テーブルのregion分割数 Copyright (C) Takeshi Mikami. All rights reserved. 23 CompleteBulkLoad実施時の注意点を説明します 『①ロードするデータサイズ > ②テーブルのregion分割数』の場合 ロードするデータがregionに収まりきらず、 completebulkloadの途中で、何度もauto-splitが発?し、ロードに時間がかかる。 『①ロードするデータサイズ < ②テーブルのregion分割数』の場合 region分割数が多いと多数のHFileができる。 テーブルを洗い替え(truncate→complatebulkload)しようとすると、 単?regionにロードできるHFile数の閾値を超えて、エラーになってしまう。 → (importtsv実?前にregionを?動splitするなど) ロードするデータサイズとregion数をバランスさせておく必要がある。