SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
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数をバランスさせておく必要がある。

Contenu connexe

Plus de Takeshi Mikami

CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウTakeshi Mikami
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方Takeshi Mikami
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介Takeshi Mikami
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)Takeshi Mikami
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Takeshi Mikami
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本Takeshi Mikami
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Takeshi Mikami
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Takeshi Mikami
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介Takeshi Mikami
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介Takeshi Mikami
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門Takeshi Mikami
 
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Takeshi Mikami
 
レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法Takeshi Mikami
 
担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発Takeshi Mikami
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)Takeshi Mikami
 
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)Takeshi Mikami
 
アグリゲート・コンピューティング風IoTでの戦い方
アグリゲート・コンピューティング風IoTでの戦い方アグリゲート・コンピューティング風IoTでの戦い方
アグリゲート・コンピューティング風IoTでの戦い方Takeshi Mikami
 
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)Takeshi Mikami
 
TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅Takeshi Mikami
 

Plus de Takeshi Mikami (20)

CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
 
GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
 
RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介RDFチェックツール「rdflint」のご紹介
RDFチェックツール「rdflint」のご紹介
 
アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)アーリース情報技術株式会社 会社案内 (2019/02/13)
アーリース情報技術株式会社 会社案内 (2019/02/13)
 
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
Spark MLlib ML Pipelines の概要 及びpysparkからの扱い方
 
SPARQL入門
SPARQL入門SPARQL入門
SPARQL入門
 
センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本センサーによるデータ計測と異常検知の基本
センサーによるデータ計測と異常検知の基本
 
Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定Webサイトのアクセスログによるユーザー属性推定
Webサイトのアクセスログによるユーザー属性推定
 
Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門Google Cloud Dataflowによる データ変換処理入門
Google Cloud Dataflowによる データ変換処理入門
 
IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介IoTでの機械学習活用イメージと強化学習のご紹介
IoTでの機械学習活用イメージと強化学習のご紹介
 
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
協調フィルタリング・アソシエーション分析によるレコメンド手法の紹介
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門SparkMLlibで始めるビッグデータを対象とした機械学習入門
SparkMLlibで始めるビッグデータを対象とした機械学習入門
 
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成Ims@sparqlではじめるr markdownとgitbookによるレポート生成
Ims@sparqlではじめるr markdownとgitbookによるレポート生成
 
レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法レコメンドアルゴリズムの基本と周辺知識と実装方法
レコメンドアルゴリズムの基本と周辺知識と実装方法
 
担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発担当アイドルに反応してLチカさせる予測モデル開発
担当アイドルに反応してLチカさせる予測モデル開発
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
 
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
 
アグリゲート・コンピューティング風IoTでの戦い方
アグリゲート・コンピューティング風IoTでの戦い方アグリゲート・コンピューティング風IoTでの戦い方
アグリゲート・コンピューティング風IoTでの戦い方
 
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)
データウェアハウス入門 (マーケティングデータ分析基盤技術勉強会)
 
TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅TensorFlowで遊びながら学んだ、はじめてのLED点滅
TensorFlowで遊びながら学んだ、はじめてのLED点滅
 

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数をバランスさせておく必要がある。