第67章 HDFS2


HDFS2 コンポーネント

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

URI 形式

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

オプション

Expand
名前
デフォルト値
説明
overwrite
true
ファイルは上書きできる
append
false
既存のファイルに追加します。すべての HDFS ファイルシステムが append オプションをサポートしているわけではないことに注意してください。
bufferSize
4096
HDFS が使用するバッファーサイズ
replication
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
opened
読み取り/書き込みのためにファイルを開くと、書き込みフェーズでファイルを読み取らないように、この接尾辞でファイルの名前が変更されます。
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
コンシューマーがファイルを選択できるようにするには、ファイルの所有者はこの所有者と一致する必要があります。それ以外の場合は、ファイルはスキップされます。

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 設定を使用する必要があります。その他の場合は、各メッセージでファイルが閉じられます。
以下に例を示します。
hdfs2://localhost/tmp/simple-file?splitStrategy=IDLE:1000,BYTES:5
Copy to Clipboard Toggle word wrap
つまり、新しいファイルは 1 秒以上アイドル状態であるか、または 5 バイト以上書き込まれている場合に作成されます。hadoop fs -ls /tmp/simple-file を実行すると、複数のファイルが作成されていることがわかります。

メッセージヘッダー

このコンポーネントでは、以下のヘッダーがサポートされます。

プロデューサーのみ

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

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

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

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

さまざまな org.apache.hadoop.fs.FileSystem 実装の検出に際して、Hadoop 2.x が使用するメカニズムに関連する OSGi 環境でこのコンポーネントを実行する場合には、いくつかの quirk があります。Hadoop 2.x は java.util.ServiceLoader を使用します。これは、利用可能なファイルシステムタイプと実装を定義する /META-INF/services/org.apache.hadoop.fs.FileSystem ファイルを探します。これらのリソースは、OSGi 内で実行すると利用できません。
camel-hdfs コンポーネントと同様に、デフォルトの設定ファイルはバンドルクラ出力ダーから見える必要があります。これに対処する一般的な方法は、バンドルルートに core-default.xml のコピー(例: hdfs-default.xml)を保持することです。

手動で定義されたルートでのこのコンポーネントの使用

以下の 2 つのオプションがあります。
  1. ルートを定義するバンドルで /META-INF/services/org.apache.hadoop.fs.FileSystem リソースをパッケージ化します。このリソースには、必要なHadoop 2.xファイルシステムの実装がすべて含まれているはずです。
  2. org.apache.hadoop.fs.FileSystem クラス内の内部かつ静的キャッシュを設定するボイラープレート初期化コードを提供します。
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
conf.setClass("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class, FileSystem.class);
conf.setClass("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class, FileSystem.class);
...
FileSystem.get("file:///", conf);
FileSystem.get("hdfs://localhost:9000/", conf);
...
Copy to Clipboard Toggle word wrap

Blueprint コンテナーでのこのコンポーネントの使用

2 つのオプション:
  1. Blueprint 定義を含むバンドルを使用して /META-INF/services/org.apache.hadoop.fs.FileSystem リソースをパッケージ化します。
  2. Blueprint 定義ファイルに以下を追加します。
<bean id="hdfsOsgiHelper" class="org.apache.camel.component.hdfs2.HdfsOsgiHelper">
   <argument>
      <map>
         <entry key="file:///" value="org.apache.hadoop.fs.LocalFileSystem"  />
         <entry key="hdfs://localhost:9000/" value="org.apache.hadoop.hdfs.DistributedFileSystem" />
         ...
      </map>
   </argument>
</bean>

<bean id="hdfs2" class="org.apache.camel.component.hdfs2.HdfsComponent" depends-on="hdfsOsgiHelper" />
Copy to Clipboard Toggle word wrap
このようにして、Hadoop 2.x は URI スキームをファイルシステム実装に正しくマッピングします。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat