141.4. HBase プロデューサー


前述のように、camel は HBase のプロデューサーエンドポイントを提供します。これにより、camel ルートを使用して HBase からデータを保存、削除、取得、またはクエリーできます。

hbase://table[?options]

ここで、table はテーブル名です。

サポートされている演算は次のとおりです。

  • Put
  • Get
  • Delete
  • スキャン

141.4.1. サポートされている URI オプション

HBase コンポーネントは、以下に示す 3 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

共有設定を使用するには

 

設定

poolMaxSize (Common)

HTable プール内のテーブルごとに保持する参照の最大数。デフォルト値は 10 です。

10

int

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

HBase エンドポイントは、URI 構文を使用して設定されます。

hbase:tableName

パスおよびクエリーパラメーターを使用します。

141.4.2. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

tableName

必須 テーブルの名前

 

String

141.4.3. クエリーパラメーター (16 個のパラメーター):

名前説明デフォルトタイプ

cellMappingStrategyFactory (common)

セルのマッピングを担当するカスタム CellMappingStrategyFactory を使用する場合。

 

CellMappingStrategy ファクトリー

filters (common)

使用するフィルターのリスト。

 

List

mappingStrategyClassName (common)

カスタムマッピング戦略の実装のクラス名。

 

String

mappingStrategyName (common)

Camel メッセージを HBase 列にマッピングするために使用するストラテジー。サポートされている値: ヘッダーまたはボディー。

 

String

rowMapping (common)

キー/値を Map から HBaseRow にマップします。次のキーがサポートされています: rowId - 行の ID。行は通常、エクスチェンジごとに変更されるため、これは使用が制限されています。rowType - 行 ID を変換するタイプ。サポートされている操作: CamelHBaseScan。family - 列ファミリー。複数の列を参照するための数値接尾辞をサポートします。qualifier - 列修飾子。複数の列を参照するための数値接尾辞をサポートします。値 - 値。複数の列を参照するための数値接尾辞をサポートします。valueType - 値の型。複数の列を参照するための数値接尾辞をサポートします。サポートされている操作: CamelHBaseGet、および CamelHBaseScan。

 

Map

rowModel (common)

各行をモデル化する方法を記述する org.apache.camel.component.hbase.model.HBaseRow のインスタンス

 

HBaseRow

userGroupInformation (common)

kerberos の使用など、HBase と通信するための特権を定義します。

 

UserGroupInformation

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

maxMessagesPerPoll (consumer)

各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルトは無制限ですが、0 または負の数を使用して無制限として無効にします。

 

int

operation (consumer)

実行する HBase 操作

 

String

remove (consumer)

オプションが true の場合、Camel HBase コンシューマーは処理する行を削除します。

true

boolean

removeHandler (consumer)

行が削除されるときに実行されるカスタム HBaseRemoveHandler を使用するには。

 

HBaseRemoveHandler

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

maxResults (producer)

スキャンする行の最大数。

100

int

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

141.4.4. Put 操作

HBase は列ベースのストアであり、特定の行の特定の列にデータを格納できます。列はファミリーにグループ化されるため、列を指定するには、列ファミリーとその列の修飾子を指定する必要があります。特定の列にデータを格納するには、列と行の両方を指定する必要があります。

camel ルートから HBase にデータを格納する最も単純なシナリオは、メッセージボディーの一部を指定された HBase 列に格納することです。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Value -->
            <setHeader headerName="CamelHBaseValue">
                <el>${in.body.value}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier"/>
        </route>

上記のルートは、メッセージボディーに id および value プロパティーを持つオブジェクトが含まれていることを前提としており、id で指定された行の HBase 列 myfamily:myqualifier に value の内容を格納します。複数の列/値のペアを指定する必要がある場合は、追加の列マッピングを指定するだけで済みます。RowId2、RowId3、RowId4 など、2 番目のヘッダー以降の数字を使用する必要があることに注意してください。最初のヘッダーのみ番号 1 がありません。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row 1st column -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Row 2nd column -->
            <setHeader headerName="CamelHBaseRowId2">
                <el>${in.body.id}</el>
            </setHeader>
            <!-- Set the HBase Value for 1st column -->
            <setHeader headerName="CamelHBaseValue">
                <el>${in.body.value}</el>
            </setHeader>
            <!-- Set the HBase Value for 2nd column -->
            <setHeader headerName="CamelHBaseValue2">
                <el>${in.body.othervalue}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier&amp;family2=myfamily&amp;qualifier2=myqualifier2"/>
        </route>

uri オプション、メッセージヘッダー、または両方の組み合わせを使用できることを覚えておくことが重要です。uri の一部として定数を指定し、ヘッダーとして動的な値を指定することをお勧めします。ヘッダーと uri の両方で何かが定義されている場合は、ヘッダーが使用されます。

141.4.5. Get 操作

Get 操作は、指定された HBase 行から 1 つ以上の値を取得するために使用される操作です。取得する値を指定するには、それらを uri の一部またはメッセージヘッダーとして指定するだけです。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row of the Get -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseGet&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long"/>
            <to uri="log:out"/>
        </route>

上記の例では、get 操作の結果は CamelHBaseValue という名前のヘッダーとして保存されます。

141.4.6. Delete 操作

また、camel-hbase を使用して HBase の削除操作を実行することもできます。削除操作は行全体を削除します。指定する必要があるのは、メッセージヘッダーの一部として 1 つ以上の行だけです。

        <route>
            <from uri="direct:in"/>
            <!-- Set the HBase Row of the Get -->
            <setHeader headerName="CamelHBaseRowId">
                <el>${in.body.id}</el>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseDelete"/>
        </route>

141.4.7. スキャン操作。

スキャン操作は、HBase のクエリーに相当します。スキャン操作を使用して、複数の行を取得できます。結果の一部にする列を指定し、値をオブジェクトに変換する方法を指定するには、uri オプションまたはヘッダーを使用できます。

        <route>
            <from uri="direct:in"/>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long&amp;rowType=java.lang.String"/>
            <to uri="log:out"/>
        </route>

この場合、結果を制限するためのフィルターのリストも指定する必要がある可能性があります。URI の一部としてフィルターのリストを指定すると、camel は すべての フィルターを満たす行のみを返します。
メッセージの一部である情報を認識するフィルターを持つために、camel は ModelAwareFilter を定義します。これにより、メッセージとマッピング戦略によって定義されたモデルをフィルターで考慮することができます。
ModelAwareFilter を使用すると、camel-hbase は選択されたマッピングストラテジーをメッセージに適用し、マッピングをモデル化するオブジェクトを作成し、そのオブジェクトをフィルターに渡します。

たとえば、メッセージヘッダーを条件として使用してスキャンを実行するには、以下に示すように ModelAwareColumnMatchingFilter を使用できます。

        <route>
            <from uri="direct:scan"/>
            <!-- Set the Criteria -->
            <setHeader headerName="CamelHBaseFamily">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier">
                <constant>first</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue">
                <el>in.body.firstName</el>
            </setHeader>
            <setHeader headerName="CamelHBaseFamily2">
                <constant>name</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier2">
                <constant>last</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseValue2">
                <el>in.body.lastName</el>
            </setHeader>
            <!-- Set additional fields that you want to be return by skipping value -->
            <setHeader headerName="CamelHBaseFamily3">
                <constant>address</constant>
            </setHeader>
            <setHeader headerName="CamelHBaseQualifier3">
                <constant>country</constant>
            </setHeader>
            <to uri="hbase:mytable?operation=CamelHBaseScan&amp;filters=#myFilterList"/>
        </route>

        <bean id="myFilters" class="java.util.ArrayList">
            <constructor-arg>
                <list>
                    <bean class="org.apache.camel.component.hbase.filters.ModelAwareColumnMatchingFilter"/>
                </list>
            </constructor-arg>
        </bean>

上記のルートは、pojo にプロパティー firstName と lastName がメッセージボディーとして渡されることを想定しており、これらのプロパティーを取得して、メッセージヘッダーの一部として追加します。デフォルトのマッピングストラテジーは、ヘッダーを HBase 列にマップするモデルオブジェクトを作成し、そのモデルに ModelAwareColumnMatchingFilter を渡します。フィルターは、モデルに一致する列を含まない行を除外します。例によるクエリーのようなものです。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.