Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第65章 HBase
HBase コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
重要
Camel HBase は Apache Karaf ではサポートされません。
Camel 2.10 以降で利用可能
このコンポーネントは、Apache HBase のべき等リポジトリー、プロデューサー、およびコンシューマーを提供します。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
Apache HBase の概要 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HBase は、Google の Bigtable: A Distributed Storage System for Structured Data の後にモデル化された、オープンソースの分散型バージョン管理された列指向のストアです。Big Data へのランダムでリアルタイム読み取り/書き込みアクセスが必要な場合は、HBase を使用できます。詳細は、Apache HBase を参照してください。
Camel および HBase リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel ルート内で datasotre を使用する場合は、Camel メッセージがデータストアにどのように保存されるかを指定する常にチャーンがあります。ドキュメントベースのストアでは、メッセージボディーをドキュメントに直接マッピングできるため、より簡単になります。リレーショナルデータベースでは、ORM ソリューションを使用してプロパティーを列などにマップできます。列ベースのストアには、このようなマッピングを実行する標準的な方法がないため、より困難です。
HBase は、さらに 2 つの課題を追加します。
- HBase は列をファミリーにグループ化するため、命名規則を使用してプロパティーを列にマッピングするだけでは不十分です。
- HBase には 型の概念がありません。つまり、すべてを byte[] として格納し、byte[] が String、Number、シリアル化された Java オブジェクト、またはバイナリーデータのみを表しているかどうかは認識されません。
これらの課題を解決するために、camel-hbase はメッセージヘッダーを使用して、メッセージの HBase 列へのマッピングを指定します。また、HBase データをモデル化し、xml/json との間で簡単に変換できる camel-hbase 提供クラスを使用する機能も提供します。最後に、ユーザーが独自のマッピングストラテジーを実装して使用する機能を提供します。
camel-hbase マッピングストラテジーに関係なく、メッセージを org.apache.camel.component.hbase.model.HBaseData オブジェクトに変換し、そのオブジェクトを内部操作に使用します。
コンポーネントの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HBase コンポーネントは、カスタム HBaseConfiguration オブジェクトをプロパティーとして指定するか、クラスパスにある HBase 関連のリソースに基づいて、独自の HBase 設定オブジェクトを作成できます。
<bean id="hbase" class="org.apache.camel.component.hbase.HBaseComponent"> <property name="configuration" ref="config"/> </bean>
<bean id="hbase" class="org.apache.camel.component.hbase.HBaseComponent">
<property name="configuration" ref="config"/>
</bean>
コンポーネントに設定オブジェクトが指定されていない場合、コンポーネントはこれを作成します。作成した設定は、設定を取り出す hbase-site.xml ファイルのクラスパスを検索します。HBase クライアントの設定方法の詳細は、HBase client configuration and dependenciesを参照してください。
HBase プロデューサー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
上記のように、Camel は HBase の produers エンドポイントを提供します。これにより、Camel ルートを使用して HBase からデータを保存、削除、取得、またはクエリーできます。
hbase://table[?options]
hbase://table[?options]
table はテーブル名です。
サポートされる操作は以下のとおりです。
- Put
- Get
- 削除
- スキャン
プロデューサーでサポートされる URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
operation
|
CamelHBasePut
|
実行する HBase 操作。サポートされる値:CamelHBasePut 、CamelHBaseGet 、CamelHBaseDelete 、および CamelHBaseScan 。
|
maxResults
|
100
|
スキャンする行の最大数。サポートされる操作:CamelHBaseScan
|
mappingStrategyName
|
header
|
Camel メッセージを HBase 列にマッピングするために使用するストラテジー。サポートされる値は、ヘッダー 、または ボディー です。
|
mappingStrategyClassName
|
null
|
カスタムマッピングストラテジー実装のクラス名。 |
filters
|
null
|
フィルターの一覧。サポートされる操作:CamelHBaseScan 。
|
userGroupInformation
|
UserGroupInformation
|
Camel 2.17: Kerberos を使用する場合など、HBase と通信する権限を定義します。 |
row.xxx
|
null
|
Camel 2.17: キー/値を HBaseRow モデルにマッピングするのに使用されます。Camel 2.17 以降 では、マッピングでは
row. 接頭辞を使用する必要があります。キーは、ヘッダーマッピングテーブルに以下に一覧表示されます。たとえば、以下のようになります。 row.family=info&row.qualifier=firstName&row.family2=birthdate&row.qualifier2=year
|
ヘッダーマッピングのオプション:
名前 | デフォルト値 | 説明 |
---|---|---|
rowId
|
行の ID。これは、通常 Exchange ごとの行の変更として使用が制限されています。 | |
rowType
|
文字列 |
行 ID に対応するタイプ。サポートされる操作:CamelHBaseScan 。
|
family
|
列ファミリー。複数の列を参照するための数字接尾辞を サポート します。 | |
修飾子
|
列修飾子。複数の列を参照するための数字接尾辞を サポート します。 | |
value
|
値。複数の列を参照するための数字接尾辞を サポート します。 | |
valueType
|
文字列 |
値のタイプ。複数の列を参照するための数字接尾辞をサポートします。サポートされる操作:CamelHBaseGet および CamelHBaseScan 。
|
操作を配置します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
HBase は列ベースのストアで、特定の行の特定の列にデータを保存できます。列はファミリーにグループ化されるため、列を指定するには、列ファミリーとその列の修飾子を指定する必要があります。特定の列にデータを保存するには、列と行の両方を指定する必要があります。
camel ルートから HBase にデータを保存する最も単純なシナリオでは、メッセージボディーの一部を指定の HBase 列に保存します。
上記のルートは、メッセージボディーに id および value プロパティーを持つオブジェクトが含まれ、値の内容を id で指定された行の HBase 列 myfamily:myqualifier に保存します。複数の列と値のペアを指定する必要がある場合は、追加の列マッピングを指定できます。2 番目のヘッダーからの数字(例:
RowId2
, RowId3
, RowId4
など)を使用する必要があります。最初のヘッダーのみには数字 1
がありません。
uri オプション、メッセージヘッダー、またはその両方の組み合わせを使用できることを覚えておくことが重要です。定数を URI の一部として指定し、動的な値をヘッダーとして指定することが推奨されます。何かがヘッダーとして定義され、uri の一部として定義されている場合、ヘッダーが使用されます。
操作を取得します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Get Operation は、指定された HBase 行から 1 つ以上の値を取得するために使用される操作です。取得する値を指定するには、uri の一部として指定するか、メッセージヘッダーとして指定できます。
上記の例では、get 操作の結果は CamelHBaseValue という名前のヘッダーとして保存されます。
操作を削除します。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel-hbase で HBase delete 操作を実行することもできます。delete 操作は、行全体を削除します。指定する必要があるのは、メッセージヘッダーの一部として 1 つ以上の行になります。
スキャン操作。 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
スキャン操作は HBase のクエリーと同等です。スキャン操作を使用して、複数の行を取得できます。結果の一部となる列を指定し、値をオブジェクトに変換する方法を指定するには、uri オプションまたはヘッダーを使用します。
<route> <from uri="direct:in"/> <to uri="hbase:mytable?operation=CamelHBaseScan&amily=myfamily&ualifier=myqualifier&alueType=java.lang.Long&owType=java.lang.String"/> <to uri="log:out"/> </route>
<route>
<from uri="direct:in"/>
<to uri="hbase:mytable?operation=CamelHBaseScan&amily=myfamily&ualifier=myqualifier&alueType=java.lang.Long&owType=java.lang.String"/>
<to uri="log:out"/>
</route>
この場合、結果を制限するためにフィルターの一覧も指定する必要があります。フィルターのリストを uri の一部として指定できます。Camel はフィルターすべてを満たす行のみ を 返します。メッセージの一部である情報を認識するフィルターを設定するには、Camel は ModelAwareFilter を定義します。これにより、フィルターがメッセージとマッピングストラテジーで定義されるモデルを考慮することができます。ModelAwareFilter camel-hbase を使用すると、選択したマッピングストラテジーが in メッセージに適用され、マッピングをモデル化する オブジェクトが作成され、そのオブジェクトを Filter に渡します。
たとえば、メッセージヘッダーとして を使用してスキャンを実行するには、以下のように
ModelAwareColumnMatchingFilter
を使用します。
上記のルートは、pojo プロパティーが firstName で、lastName プロパティーがメッセージボディーとして渡されると仮定し、これらのプロパティーを取得し、それらをメッセージヘッダーの一部として追加します。デフォルトのマッピングストラテジーは、ヘッダーを HBase 列にマップするモデルオブジェクトを作成し、そのモデルを ModelAwareColumnMatchingFilter に渡します。フィルターは、モデルに一致する列が含まれていない行を除外します。サンプルによるクエリーに似ています。
HBase コンシューマー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel HBase Consumer は、指定された HBase テーブルで繰り返しスキャンを実行し、メッセージの一部としてスキャン結果を返します。ヘッダーマッピング(デフォルト)またはボディーマッピングのいずれかを指定できます。後ほど、org.apache.camel.component.hbase.model.HBaseData をメッセージボディーの一部として追加します。
hbase://table[?options]
hbase://table[?options]
uri オプションの一部として、返す列とそのタイプを指定できます。
hbase:mutable?family=name&qualifer=first&valueType=java.lang.String&family=address&qualifer=number&valueType2=java.lang.Integer&rowType=java.lang.Long
hbase:mutable?family=name&qualifer=first&valueType=java.lang.String&family=address&qualifer=number&valueType2=java.lang.Integer&rowType=java.lang.Long
上記の例では、指定されたフィールドで設定されるモデルオブジェクトを作成し、スキャン結果によりモデルオブジェクトに値が設定されます。最後に、マッピングストラテジーは、このモデルを Camel メッセージにマッピングするために使用されます。
コンシューマーでサポートされている URI オプション リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 説明 |
---|---|---|
initialDelay
|
1000
|
最初のポーリングが開始されるまでの時間(ミリ秒単位)。 |
delay
|
500
|
次のポーリングまでの時間 (ミリ秒単位)。 |
useFixedDelay
|
true
|
固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 |
timeUnit |
TimeUnit.MILLISECONDS
|
initialDelay および delay オプションの時間単位。
|
runLoggingLevel
|
TRACE
|
Camel 2.8: コンシューマーはポーリング時に開始/完了のログ行をログに記録します。このオプションを使用すると、ログレベルを設定できます。 |
operation
|
CamelHBasePut
|
実行する HBase 操作。サポートされる値:CamelHBasePut 、CamelHBaseGet 、CamelHBaseDelete 、および CamelHBaseScan 。
|
maxResults
|
100
|
スキャンする行の最大数。サポートされる操作:CamelHBaseScan
|
mappingStrategyName
|
header
|
Camel メッセージを HBase 列にマッピングするために使用するストラテジー。サポートされる値は、ヘッダー 、または ボディー です。
|
mappingStrategyClassName
|
null
|
カスタムマッピングストラテジー実装のクラス名。 |
filters
|
null
|
フィルターの一覧。サポートされる操作:CamelHBaseScan
|
remove
|
true
|
true の場合、Camel HBase Consumer は処理する行を削除します。
|
userGroupInformation
|
UserGroupInformation
|
Camel 2.17: Kerberos を使用する場合など、HBase と通信する権限を定義します。 |
ヘッダーマッピングのオプション:
名前 | デフォルト値 | 説明 |
---|---|---|
rowId
|
行の ID。これは、通常 Exchange ごとの行の変更として使用が制限されています。 | |
rowType
|
文字列 | 行 ID に対応するタイプ。サポートされる操作: CamelHBaseScan |
family
|
列ファミリー。**upports には、複数の列を参照するための数字の接尾辞が含まれます。 | |
修飾子
|
列修飾子。*複数の列を参照するための数字接尾辞をサポートします。 | |
value
|
値。複数の列を参照するための数字接尾辞をサポートします。 | |
rowModel
|
文字列 | 各行のモデル化方法を記述する org.apache.camel.component.hbase.model.HBaseRow のインスタンス |
rowModel のロールが明確でない場合、URI オプション(ファミリー、修飾子、タイプなど)を使用して "describ" ではなく、HBaseRow modle をプログラムで構築できます。
HBase Idempotent リポジトリー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel-hbase コンポーネントは、各メッセージが一度だけ処理されるようにするときに使用できるべき等リポジトリーも提供します。HBase idempotent リポジトリーは、テーブル、列ファミリー、列修飾子で設定され、そのテーブルにメッセージごとに行を作成します。
HBase マッピング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
前述のように、デフォルトのマッピングストラテジーが ヘッダー および ボディー マッピングであることが分かります。以下は、各マッピングストラテジーの仕組みの詳細な例になります。
HBase ヘッダーマッピングの例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ヘッダーマッピングはデフォルトのマッピングです。値 myvalue を HBase 行 myrow と列 myfamily:mycolum に指定するには、メッセージには以下のヘッダーが含まれている必要があります。
ヘッダー | 値 |
---|---|
CamelHBaseRowId | myrow |
CamelHBaseFamily | myfamily |
CamelHBaseQualifier | myqualifier |
CamelHBaseValue | myvalue |
異なる列および / または異なる行により多くの値を配置するには、ヘッダーのインデックスで接尾辞が付いたヘッダーを追加で指定できます。以下に例を示します。
ヘッダー | 値 |
---|---|
CamelHBaseRowId | myrow |
CamelHBaseFamily | myfamily |
CamelHBaseQualifier | myqualifier |
CamelHBaseValue | myvalue |
CamelHBaseRowId2 | myrow2 |
CamelHBaseFamily2 | myfamily |
CamelHBaseQualifier2 | myqualifier |
CamelHBaseValue2 | myvalue2 |
get や scan などの取得操作では、データの変換先となるタイプごとに、各列に を指定することもできます。以下に例を示します。
ヘッダー | 値 |
---|---|
CamelHBaseFamily | myfamily |
CamelHBaseQualifier | myqualifier |
CamelHBaseValueType | Long |
すべてのメッセージに対して定数とみなされるボイラープレートヘッダーを回避するために、以下のようにエンドポイント URI の一部として指定することもできます。
ボディーマッピングの例 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ボディーマッピングストラテジーを使用するには、URI の一部としてオプション mappingStrategy を指定する必要があります。以下に例を示します。
hbase:mytable?mappingStrategy=body
hbase:mytable?mappingStrategy=body
ボディーマッピングストラテジーを使用するには、ボディーに org.apache.camel.component.hbase.model.HBaseData のインスタンスが含まれている必要があります。構築できます
上記のオブジェクトは put 操作で使用することができます。たとえば、ID myRowId で行を作成または更新し、値 myvalue を列 myfamily:myqualifier に追加します。ボディーマッピングストラテジーが最初に認識されない可能性があります。ヘッダーマッピングストラテジーに対する利点は、HBaseData オブジェクトを xml/json との間で簡単に変換できることです。
その他の参考資料 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!