第66章 HDFS


HDFS コンポーネント

Camel 2.8 から利用可能
hdfs コンポーネントを使用すると、HDFS ファイルシステムとの間でメッセージを読み書きできます。HDFS は、Hadoop の中心となる分散ファイルシステムです。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-hdfs</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
Copy to Clipboard Toggle word wrap

URI 形式

hdfs://hostname[:port][/path][?options]
Copy to Clipboard Toggle word wrap
URI にクエリーオプションは ?option=value&option=value&.. の形式で追加できます。パスは以下のように処理されます。
  1. コンシューマーとして、ファイルの場合、ファイルを読み取るだけです。それ以外の場合は、設定されたパターンを満たすパス下のすべてのファイルをスキャンするディレクトリーを表します。このディレクトリー下のすべてのファイルは同じタイプである必要があります。
  2. プロデューサーとして、少なくとも 1 つの分割ストラテジーが定義されている場合、パスはディレクトリーと見なされ、そのディレクトリーの下に、プロデューサーは設定された UuidGenerator を使用して分割された名前ごとに異なるファイルを作成します。
注記
通常モードで HDFS から消費する場合、ファイルはチャンクに分割され、チャンクごとにメッセージを生成します。chunkSize オプションを使用して、チャンクのサイズを設定できます。File コンポーネントを使用して HDFS から読み取り、通常のファイルに書き込む場合は、fileMode=Append を設定してチャンクを連結できます。

オプション

Expand
名前 デフォルト値 説明
overwrite true ファイルは上書きできる
append false 既存のファイルに追加します。すべての HDFS ファイルシステムが append オプションをサポートしているわけではないことに注意してください。
bufferSize 4096 HDFS が使用するバッファーサイズ
レプリケーション 3 HDFS レプリケーション係数
blockSize 67108864 HDFS ブロックのサイズ
fileType NORMAL_FILE
SEQUENCE_FILE、MAP_FILE、ARRAY_FILE、または BLOOMMAP_FILE を指定できます。Hadoop を参照してください。
fileSystemType HDFS ローカルファイルシステムの LOCAL にすることができます。
keyType NULL
シーケンスまたはマップファイルの場合のキーのタイプ。以下を参照してください。
valueType TEXT
シーケンスまたはマップファイルの場合のキーのタイプ。以下を参照してください。
splitStrategy
異なる基準に基づいてファイルを分割する方法に関するストラテジーを記述する文字列。以下を参照してください。
openedSuffix 開放済み
読み取り/書き込み用にファイルが開かれると、書き込みフェーズでファイルを読み取らないように、この接尾辞でファイルの名前が変更されます。
readSuffix read
ファイルを読み込んだら、再度読み取るのを回避するために、この接尾辞で名前を変更します。
initialDelay 0
コンシューマーの場合、ディレクトリーのスキャンを開始する前に待機する時間(ミリ秒単位)。
delay 0
ディレクトリースキャンの間隔(ミリ秒単位)。
pattern *
ディレクトリーのスキャンに使用されるパターン
chunkSize 4096
通常のファイルを読み取る場合、これはチャンクごとにメッセージを生成するチャンクに分割されます。
connectOnStartup true Camel 2.9.3/ 2.10.1: プロデューサー/コンシューマーの開始時に HDFS ファイルシステムに接続するかどうか。false の場合、接続はオンデマンドで作成されます。HDFS は、45 x 20 秒再配信をハードコーディングしているため、接続を確立するために最大 15 分かかる可能性があることに注意してください。このオプションを false に設定すると、アプリケーションは起動できるようになり、最大 15 分間ブロックされません。
owner
Camel 2.13/2.12.4: コンシューマーがファイルを取得するには、ファイルの所有者はこの所有者と一致する必要があります。それ以外の場合は、ファイルはスキップされます。

keyType および ValueType

  • NULL これは、キーまたは値が存在しないことを意味します。
  • バイトを書き込む BYTE では、java バイトクラスは BYTE にマッピングされます。
  • バイトのシーケンスを書き込む BYTES。java ByteBuffer クラスをマッピングします。
  • java 整数を書き込む INT
  • java 浮動小数点を書き込む FLOAT
  • java long を記述する LONG
  • Java の二重書き込み用の DOUBLE
  • java 文字列を書き込む TEXT
BYTES は他のすべてでも使用されます。たとえば、Camel ではファイルが InputStream として送信されます。この例では、シーケンスファイルまたはマップファイルでバイトのシーケンスとして記述されます。

分割ストラテジー

現行バージョンでは、addment モードでファイルを開くと、信頼性が十分にないため、無効になっています。そのため、新しいファイルしか作成できません。Camel HDFS エンドポイントは、以下の方法でこの問題の解決を試みます。
  • split strategy オプションが定義されている場合、hdfs パスがディレクトリーとして使用され、設定された UuidGenerator を使用してファイルが作成されます。
  • 分割条件が満たされるたびに、新しいファイルが作成されます。splitStrategy オプションは、以下の構文で文字列として定義されます。 splitStrategy=<ST>:<value>,<ST>:<value>,*
<ST> は以下のとおりです。
  • BYTES は新しいファイルが作成され、書き込まれたバイト数が <value> を超えると古いファイルが閉じられます。
  • MESSAGES は新しいファイルが作成され、書き込まれたメッセージの数が <value> を超える場合に古いファイルが閉じられます。
  • IDLE 新しいファイルが作成され、最後の <value> ミリ秒で書き込みが行われなかった場合に古いファイルが閉じられます。
注記
現在、このストラテジーでは、IDLE 値を設定するか、HdfsConstants.HDFS_CLOSE ヘッダーを false に設定して BYTES/MESSAGES 設定を使用する必要があります。そうしないと、ファイルは各メッセージで閉じられます。
以下に例を示します。
hdfs://localhost/tmp/simple-file?splitStrategy=IDLE:1000,BYTES:5
Copy to Clipboard Toggle word wrap
つまり、新しいファイルは 1 秒以上アイドル状態であるか、または 5 バイト以上書き込まれている場合に作成されます。そのため、hadoop fs ls /tmp/simplefile を実行すると、複数のファイルが作成されていることがわかります。

メッセージヘッダー

このコンポーネントでは、以下のヘッダーがサポートされます。
プロデューサーのみ
Expand
ヘッダー
説明
CamelFileName
Camel 2.13: 書き込むファイルの名前を指定します(エンドポイントパスに相対的)。名前は String または Expression オブジェクトにすることができます。分割ストラテジーを使用しない場合のみ関連します。

ファイルストリームを閉じるための制御

Camel 2.10.4 以降で利用可能
分割ストラテジー なしHDFS プロデューサーを使用する場合、ファイル出力ストリームはデフォルトで書き込み後に閉じられます。ただし、ストリームを開いたままにし、後でストリームを明示的に閉じることもできます。そのため、ヘッダー HdfsConstants.HDFS_CLOSE (value = "CamelHdfsClose")を使用してこれを制御することができます。この値をブール値に設定すると、ストリームを閉じるべきかどうかを明示的に制御できます。
これは、スプリットストラテジーを使用する場合には適用されないことに注意してください。これは、ストリームが閉じられるタイミングを制御できるさまざまなストラテジーがあるためです。

OSGi でのこのコンポーネントの使用

このコンポーネントは OSGi 環境で完全に機能しますが、ユーザーからのいくつかのアクションが必要になります。Hadoop は、リソースをロードするためにスレッドコンテキストクラ出力ダーを使用します。通常、スレッドコンテキストクラ出力ダーは、ルートを含むバンドルのバンドルクラ出力ダーになります。そのため、デフォルトの設定ファイルはバンドルクラ出力ダーから見える必要があります。これに対処する一般的な方法は、バンドルルートに core-default.xml のコピーを保持することです。このファイルは hadoop-common.jar にあります。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat