マジセミドライブ
ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。
OSS情報
2020.01.01
【OSS情報アーカイブ】Embulk


※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。
コンテンツ
「Embulk」とは
概要
Embulk(エンバルク)とは、プラグ可能なマルチソースバルクデータローダーです。バルク処理に特化したプラグインベースのデータローダーで、大規模データセットのバルク転送を実施します。「データベース」「DWH」「NoSQL」「ファイル形式」「クラウドデータストア」などのデータ転送を強力にサポートします。
基本説明
Embulk は、ストリーミング型ログ収集フレームワーク「fluentd」のバッチ版のようなデータ転送ツールです。特に、「1発実行」「日次バッチ処理」「定期バッチ処理」などのバルク処理用途に向いています。
転送元の「ファイル」「データベース」などからデータを吸い出し、転送先の「ストレージ」「データベース」などにロードするためのシンプルな仕組みを提供します。
プラグイン型アーキテクチャを採用しており、RubyやJavaでシンプルなコードを書くことで、さまざまな「データベース」「ファイルフォーマット」「ストレージ」に対して柔軟に対応できます。
ポイント
・さまざまなプラグインによる入力と出力の組み合わせ
・MavenおよびRubygemリポジトリでリリースされたプラグインに対応
・入力ファイル形式の自動推測機能
・並列実行機能—ビッグデータセット処理
・トランザクション制御機能—オールオアナッシングを保証
経緯
・2015年1月:初版リリース
ユースケース例
「CSVファイル」から「Elasticsearch + Kibana5」へのスケジュールされた一括データ読み込み
→embulk.org →recipes →scheduled-csv-load-to-elasticsearch-kibana5
オフィシャルサイト情報
■オフィシャルサイト
■GitHub
■主要開発元
Embulkは、The Embulk projectが中心となり開発が進められています。
■ライセンス情報
Embulkのライセンスは「Apache License Version 2.0」です。
詳細について、こちらを参照ください。
→github.com →embulk/embulk →LICENSE
■クイックスタート
「Linux & macOS用」と「Windows用」のコマンドが記述されています。
同様製品
同様な機能を提供する製品として、次のようなものがあります。
オープンソース製品:「Fluentd」「Logstash」など。
プラグインアーキテクチャ
Embulkは柔軟なプラグイン構造による機能拡張が可能です。
「データ入力」「データ加工」「データ出力」などの機能別タイプに分かれています。
並列/分散処理
Embulkは、1回の処理を複数のタスクに分割することで並列実行する仕組みを備えているため、大規模データの高速バルク処理が可能です。
トランザクション再開機能
Embulkは、失敗したトランザクションの再開機能をサポートしています。
トランザクションが失敗した場合、その状態をYAMLファイルに保存します。同じコマンドを使用してトランザクションを再試行できます。
トランザクションを再開しない場合は、「embulk cleanupサブコマンド」を使用して中間データを削除できます。
構成ファイル
■概要
Embulkでは、YAMLファイルを使用して一括データ読み込み処理を定義します。
Liquidテンプレートエンジンを使用して、構成ファイルに環境変数を埋め込むことができます。
また、別の構成ファイルを含めることもできます。
→embulk.org → docs →embulk-configuration-file-format
■「in」セクション
入力プラグインオプションを指定します。
・レコードベース—MySQL、DynamoDBなど
・ファイルベース—S3、HTTPなど
parser
入力がファイルベースの場合、ファイル形式(csv、jsonなど)を解析するためにパーサープラグインを指定します。
decoder
入力がファイルベースの場合、圧縮または暗号化をデコードするためにデコーダプラグインを指定します。
・gzip
・bzip2
・zip
・tar.gz など
■「out」セクション
出力プラグインオプションを指定します。
・レコードベース—Oracle、Elasticsearch など
・ファイルベース—Googleクラウドストレージ など
formatter
出力がファイルベースの場合、特定ファイル形式(CSV、JSONなど)にフォーマットするため、フォーマッタープラグインを指定します。
encoder
出力がファイルベースの場合、圧縮または暗号化(gzipやbzip2など)をエンコードするために、エンコーダプラグインを指定します。
■「filters」セクション
フィルタリングプラグインを指定できます。
■「exec」セクション
並列処理を制御するためのエグゼキュータプラグインを指定できます。
「Embulk」のプラグイン機能
概要
Embulkは、さまざまなプラグインを使用して、各種システムやファイル形式との間でデータをロードできます。
再利用性を高めるために、プラグインを共有して管理することで、カスタムスクリプトを読みやすく、保守しやすく維持できます。
■プラグインリスト
次のプラグイン種類リストが公開されています。
・入力プラグイン
・出力プラグイン
・フィルタプラグイン
・ファイルパーサープラグイン
・ファイルデコーダプラグイン
・ファイルフォーマッタプラグイン
・ファイルエンコーダプラグイン
・エグゼキュータプラグイン
■プラグインバンドル機能
「embulk mkbundleサブコマンド」により、プラグインが分離されたバンドルを作成できます。
プラグイン(gems)を、embulkディレクトリではなく、バンドルディレクトリにインストールすることで、プラグインのバージョンをシンプルに管理できます。
入力プラグイン
■ファイル入力プラグイン
ファイル入力プラグインは、ローカルファイルからデータを読み込みます。
デコードプラグイン
■Gzipデコーダプラグイン
Gzip形式にデコードします。
■BZip2デコーダプラグイン
BZip2形式にデコードします。
パーサープラグイン
■CSVパーサープラグイン
CSVパーサープラグインは「CSVファイル」や「TSVファイル」を解析します。
列設定を宣言できますが、列設定を自動的に生成する推測機能も利用できます。
エスケープされていない不規則な引用符の処理方法も指定できます。
■JSONパーサープラグイン
JSONパーサープラグインは、JSONオブジェクトの配列を含むJSONファイルを解析します。
columnsオプションにより、「列のリスト」と「JSON値をEmbulk列に抽出する方法」を宣言します。
処理結果として、JSON形式の「record」という名前の単一レコードを出力します。
フォーマッタープラグイン
■CSVフォーマッタープラグイン
CSVフォーマッタープラグインは、「CSV形式」や「TSV形式」にデータをフォーマットします。
quote_policyオプションにより、引用するフィールドタイプを指定できます。
エンコーダープラグイン
■Gzipエンコーダープラグイン
Gzipエンコーダープラグインは、Gzipを使用して出力ファイルを圧縮します。
「0(圧縮なし)」から「9(最高レベル圧縮)」の圧縮レベルを指定できます。
■BZip2エンコーダープラグイン
BZip2エンコーダープラグインは、BZip2を使用して出力ファイルを圧縮します。
「1」から「9」の圧縮レベルを指定できます。
出力プラグイン
■ファイル出力プラグイン
ファイル出力プラグインは、ローカルファイルシステムにレコードを出力します。
sequence_formatにより、タスクの「タスクインデックス」と「シーケンス番号」をフォーマットします。
その他のプラグイン
■ローカルエグゼキュータプラグイン
ローカルエグゼキュータプラグインは、唯一の組み込みエグゼキュータプラグインで、ローカルのスレッドを使用してタスクを実行します。
max_threadsオプション
max_threadsオプションにより、最大同時実行性を制御できます。
大きな数値を設定すると、空いているコンピュータリソースを最大限活用したハイパフォーマンスの転送を実施できます。
小さい数を設定すると、スレッドが多すぎて対象データストレージが過負荷になる状況を緩和できます。
min_output_tasksオプション
min_output_tasksオプションにより、「ページの散乱」を有効にできます。
入力タスクごとに複数のフィルタと出力スレッドを使用できるようにすることで、1つの入力タスクが複数スレッドで動作できるようになります。
入力データ速度が低い場合に、大きな数値を設定することで、Embulk全体の同時実行性パフォーマンスを向上できます。
■推測エグゼキュータプラグイン
推測エグゼキュータプラグインは、guessコマンドによって呼び出される推測機能です。
適切な推測プラグインを指定することで、処理順番などもを含めたEmbulk構成を提案します。
■プレビューエグゼキュータプラグイン
プレビューエグゼキュータプラグインは、previewコマンドによって呼び出されるプレビュー機能です。
①指定された入力ソースからサンプルバッファを読み取る
②サンプルバッファをpreviewPageオブジェクトに書き込む
③previewPageオブジェクトをコンソールに出力
preview_sample_buffer_bytesオプションにより、入力ソースから読み取るサンプルバッファのバイト数を制御できます。
「Embulk」のプラグイン開発
Embulkで利用するプラグインを段階的に開発できます。
→dev.embulk.org →customization
ステップ1:新しいプロジェクトを作成
Embulkには、新しいプロジェクトを生成するための多数のテンプレートが用意されているため、すぐに開発をスタートできます。
「Javaレコード」「Javaファイル」「Rubyレコード」「Rubyファイル」用の各種テンプレートが提供されています。
ステップ2:プロジェクト構築
プラグインがJavaベースの場合は、プロジェクトをビルドする必要があります。
ステップ3:初期動作確認
プラグインが動作することを確認します。
ステップ4:コード変更
必要に応じてコードを変更します。
GitHubに登録されている多くのコードをサンプルとして参照できます。
オプション:リリース
作成したプラグインを公開してリリースできます。
■①RubyGems.orgにアカウントを作成
Embulkは「RubyGems.org」をパッケージ配布サービスとして使用しているため、こちらのサイトでアカウントを作成することでリリースできるようになります。
■②説明情報を記述してリリース
リリースするために必要となる情報を記述してリリースします。
参考元サイト
※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。
この記事のタグ一覧
フリーワード検索
カテゴリー一覧
アクセスランキング
- 🏆ランク1位🏆
【ChatGPT探訪】ビルトイン画像生成AI「 DALL·E 3 」🖼️ - 🏆ランク2位🏆
【OSS情報】ディスクイメージング(クローニング)ツール「 Clonezilla 」 - 🏆ランク3位🏆
【無料で使える】「 翻訳 」ツールまとめ - 🏆ランク4位🏆
【OSS情報アーカイブ】Hazelcast - 🏆ランク5位🏆
【OSS情報アーカイブ】GitBucket - 🏆ランク6位🏆
【OSS情報アーカイブ】Joget Workflow - 🏆ランク7位🏆
【OSS情報アーカイブ】Graphite - 🏆ランク8位🏆
【ChatGPT使ってみる実験室】GAS×ChatGPT4で「 URLオープンチェック 」を自動化してみました - 🏆ランク9位🏆
【OSS情報アーカイブ】memcached - 🏆ランク10位🏆
【OSS情報アーカイブ】SonarQube