Tencent COSは、Tencent Corp.が提供する有名なオブジェクトストレージシステムです。Hadoop-COSは、HDFSベースの上位コンピューティングシステムがCOSを基盤となるストレージシステムとして使用できるようにするクライアントです。サポートが確認されているビッグデータ処理システムは、Hadoop MR、Spark、Alluxioなどです。さらに、DruidはHADOOP-COSと統合されたHDFS-Load-Pluginを設定することで、COSをディープストレージとして使用することもできます。
Hadoop MapReduceおよびSparkがCOSにデータを書き込み、そこから直接読み取ることをサポートします。
Hadoopファイルシステムのインターフェースを実装し、HDFSと同じ擬似階層ディレクトリ構造を提供します。
大きなファイル用のマルチパートアップロードをサポートします。単一ファイルは最大19TBまでサポートします。
高パフォーマンスと高可用性。Hadoop-COSとHDFSのパフォーマンスの差は30%以内です。
注記
オブジェクトストレージはファイルシステムではなく、いくつかの制限があります。
オブジェクトストレージはキーバリューストレージであり、自然に階層ディレクトリをサポートしません。通常、オブジェクトキーのディレクトリ区切り文字を使用して、「/hadoop/data/words.dat」のように階層ディレクトリをシミュレートします。
COSオブジェクトストレージは現在、オブジェクトの追加操作をサポートしていません。つまり、既存のオブジェクト(ファイル)の末尾にコンテンツを追加することはできません。
delete
およびrename
操作はどちらもアトミックではありません。つまり、操作が中断された場合、操作結果が矛盾した状態になる可能性があります。オブジェクトストレージには異なる認証モデルがあります。
ディレクトリのアクセス権は777として報告されます。
ファイルのアクセス権は666として報告されます。
ファイルの所有者は、ローカルの現在のユーザーとして報告されます。
ファイルグループも、ローカルの現在のユーザーとして報告されます。
大きなファイル(最大40TB)用のマルチパートアップロードをサポートしますが、パート数は10000に制限されています。
一度にリストされるファイル数は1000に制限されています。
バケット: COSにデータを格納するためのコンテナ。名前は、ユーザー定義のバケット名とユーザーのappidで構成されます。
Appid: ユーザーディメンションの一意のリソース識別子。
SecretId: ユーザーの認証に使用されるID
SecretKey: ユーザーの認証に使用されるキー
リージョン: バケットが配置されているリージョン。
CosN: Hadoop-COSはURIスキームとしてcosn
を使用するため、CosNはHadoop-COSを指すためにしばしば使用されます。
Linuxカーネル2.6以上
COSをHadoopまたはその他のビッグデータシステムのデフォルトファイルシステムとして使用する場合は、core-site.xmlでfs.defaultFS
をHadoop-COSのURIとして設定する必要があります。Hadoop-COSはURIスキームとしてcosn
を使用し、バケットをURIホストとして使用します。同時に、バケットが配置されているリージョンを示すために、fs.cosn.userinfo.region
を明示的に設定する必要があります。
注記:
Hadoop-COSの場合、fs.defaultFS
はオプションです。COSをHadoopのデータソースとして一時的に使用するだけであれば、プロパティを設定する必要はなく、使用時に完全なURIを指定するだけです。例: hadoop fs -ls cosn://testBucket-125236746/testDir/test.txt
。
fs.cosn.userinfo.region
はHadoop-COSに必要なプロパティです。理由は、Hadoop-COSがバケットを使用するリージョンを把握し、それに基づいてアクセスするためのURLを正確に構築する必要があるためです。
COSはマルチリージョンストレージをサポートしており、デフォルトではリージョンごとに異なるアクセスドメインがあります。オブジェクトのアップロードとダウンロードの速度を向上させるために、自分のビジネスシナリオに応じて最も近いストレージリージョンを選択することをお勧めします。利用可能なリージョンは、https://intl.cloud.tencent.com/document/product/436/6224で確認できます。
以下に構成形式の例を示します。
<property> <name>fs.defaultFS</name> <value>cosn://<bucket-appid></value> <description> Optional: If you don't want to use CosN as the default file system, you don't need to configure it. </description> </property> <property> <name>fs.cosn.bucket.region</name> <value>ap-xxx</value> <description>The region where the bucket is located</description> </property>
COSに格納されたオブジェクトにアクセスするには、各ユーザーが資格情報(ユーザーのsecreteIdとsecretKey)を正しく構成する必要があります。これらの資格情報は、Tencent Cloudが提供する公式コンソールから取得できます。
<property> <name>fs.cosn.credentials.provider</name> <value>org.apache.hadoop.fs.auth.SimpleCredentialsProvider</value> <description> This option allows the user to specify how to get the credentials. Comma-separated class names of credential provider classes which implement com.qcloud.cos.auth.COSCredentialsProvider: 1.org.apache.hadoop.fs.auth.SimpleCredentialsProvider: Obtain the secret id and secret key from fs.cosn.userinfo.secretId and fs.cosn.userinfo.secretKey in core-site.xml 2.org.apache.hadoop.fs.auth.EnvironmentVariableCredentialsProvider: Obtain the secret id and secret key from system environment variables named COS_SECRET_ID and COS_SECRET_KEY If unspecified, the default order of credential providers is: 1. org.apache.hadoop.fs.auth.SimpleCredentialsProvider 2. org.apache.hadoop.fs.auth.EnvironmentVariableCredentialsProvider </description> </property> <property> <name>fs.cosn.userinfo.secretId</name> <value>xxxxxxxxxxxxxxxxxxxxxxxxx</value> <description>Tencent Cloud Secret Id </description> </property> <property> <name>fs.cosn.userinfo.secretKey</name> <value>xxxxxxxxxxxxxxxxxxxxxxxx</value> <description>Tencent Cloud Secret Key</description> </property>
HadoopがCOSを基盤となるファイルシステムとして正しく統合するには、AおよびBオプションを明示的に指定する必要があります。
HadoopがCOSを基盤となるファイルシステムとして統合できるようにするには、fs.cosn.impl
とfs.AbstractFileSystem.cosn.impl
を正しく設定する必要があります。fs.cosn.impl
はorg.apache.hadoop.fs.cos.CosFileSystem
として設定する必要があり、fs.AbstractFileSystem.cosn.impl
はorg.apache.hadoop.fs.cos.CosN
として設定する必要があります。
<property> <name>fs.cosn.impl</name> <value>org.apache.hadoop.fs.cosn.CosNFileSystem</value> <description>The implementation class of the CosN Filesystem</description> </property> <property> <name>fs.AbstractFileSystem.cosn.impl</name> <value>org.apache.hadoop.fs.cos.CosN</value> <description>The implementation class of the CosN AbstractFileSystem.</description> </property>
Hadoop-COSは設定するための豊富なランタイムプロパティを提供しており、ほとんどの場合、適切に動作するデフォルト値が提供されているため、カスタム値を指定する必要はありません。
注意すべき重要な点は次のとおりです。:
Hadoop-COSはいくつかの一時ファイルを生成し、ディスクスペースを消費します。すべての一時ファイルは、オプションfs.cosn.tmp.dir
(デフォルト: /tmp/hadoop_cos)で指定されたディレクトリに配置されます。
デフォルトのブロックサイズは8MBであり、COS blobストレージシステムに最大78GBの単一ファイルをアップロードできることを意味します。これは主に、マルチパートアップロードが最大10,000ブロックまでしかサポートできないという事実によるものです。このため、より大きな単一ファイルをサポートする必要がある場合は、プロパティfs.cosn.block.size
を設定して、ブロックサイズをそれに応じて大きくする必要があります。たとえば、最大の単一ファイルのサイズが1TBの場合、ブロックサイズは少なくとも(1 * 1024 * 1024 * 1024 * 1024)/10000 = 109951163以上である必要があります。現在、最大サポートファイルは19TBです(ブロックサイズ: 2147483648)。
<property> <name>fs.cosn.tmp.dir</name> <value>/tmp/hadoop_cos</value> <description>Temporary files would be placed here.</description> </property> <property> <name>fs.cosn.buffer.size</name> <value>33554432</value> <description>The total size of the buffer pool.</description> </property> <property> <name>fs.cosn.block.size</name> <value>8388608</value> <description> Block size to use cosn filesysten, which is the part size for MultipartUpload. Considering the COS supports up to 10000 blocks, user should estimate the maximum size of a single file. For example, 8MB part size can allow writing a 78GB single file. </description> </property> <property> <name>fs.cosn.maxRetries</name> <value>3</value> <description> The maximum number of retries for reading or writing files to COS, before throwing a failure to the application. </description> </property> <property> <name>fs.cosn.retry.interval.seconds</name> <value>3</value> <description>The number of seconds to sleep between each COS retry.</description> </property>
プロパティ | 説明 | デフォルト値 | 必須 |
---|---|---|---|
fs.defaultFS | Hadoopが使用するデフォルトのファイルシステムを設定します。 | なし | いいえ |
fs.cosn.credentials.provider | このオプションを使用すると、ユーザーは資格情報の取得方法を指定できます。com.qcloud.cos.auth.COSCredentialsProviderを実装する資格情報プロバイダークラスのカンマ区切りクラス名。 1. org.apache.hadoop.fs.cos.auth.SimpleCredentialsProvider: core-site.xmlの fs.cosn.userinfo.secretId およびfs.cosn.userinfo.secretKey からシークレットIDとシークレットキーを取得します。2. org.apache.hadoop.fs.auth.EnvironmentVariableCredentialsProvider: COSN_SECRET_ID およびCOSN_SECRET_KEY という名前のシステム環境変数からシークレットIDとシークレットキーを取得します。指定されていない場合、資格情報プロバイダーのデフォルトの順序は次のとおりです。 1. org.apache.hadoop.fs.auth.SimpleCredentialsProvider; 2. org.apache.hadoop.fs.auth.EnvironmentVariableCredentialsProvider. |
なし | いいえ |
fs.cosn.userinfo.secretId/secretKey | アカウントのAPIキー情報 | なし | はい |
fs.cosn.bucket.region | バケットが配置されているリージョン。 | なし | はい |
必須 | fs.cosn.impl | なし | はい |
CosNファイルシステムの実装クラス。 | 必須 | なし | はい |
fs.AbstractFileSystem.cosn.impl | CosN AbstractFileSystemの実装クラス。 | 必須 | いいえ |
fs.cosn.tmp.dir | cosnによって生成された一時ファイルは、プログラムの実行中にここに保存されます。 | 33554432 | いいえ |
/tmp/hadoop_cos | fs.cosn.buffer.size | 8388608 | いいえ |
バッファプールの合計サイズ。ブロックサイズ以上である必要があります。 | fs.cosn.block.size | ファイルブロックのサイズ。各ファイルを最大10,000個に分割してアップロードできるという制限を考慮して、使用する単一ファイルの最大サイズに応じてオプションを設定する必要があります。たとえば、8MBのパートサイズでは、78GBの単一ファイルを書き込むことができます。 | いいえ |
8388608(8MB) | fs.cosn.upload_thread_pool | ファイルがCOSにストリーミングされるときに、並行アップロードに使用されるスレッド数。 | いいえ |
CPUコア数 * 3 | fs.cosn.read.ahead.block.size | 10 | いいえ |
各先読みブロックのサイズ。 | アプリケーションに失敗をスローする前に、COSへのファイルの読み取りまたは書き込みを再試行する最大回数。 | 3 | いいえ |
fs.cosn.retry.interval.seconds | 各再試行の間隔(秒単位)。 | 3 | いいえ |
コマンド形式: hadoop fs -ls -R cosn://bucket-appid/<path>
または hadoop fs -ls -R /<path>
。後者の場合、defaultFs オプションを cosn
に設定する必要があります。
CosNを基盤ファイルシステムとして使用して、WordCountルーチンを実行します。
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-x.x.x.jar wordcount cosn://example/mr/input.txt cosn://example/mr/output
HadoopのデフォルトファイルシステムとしてCosNを設定する場合は、次のように実行できます。
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-x.x.x.jar wordcount /mr/input.txt /mr/output
CosNファイルシステムをテストするには、テストランナーに認証情報を渡す次の2つのファイルが必要です。
これら2つのファイルは、hadoop-cloud-storage-project/hadoop-cos/src/test/resource
ディレクトリの下に作成する必要があります。
auth-key.xml
COSの認証情報は、auth-key.xml
で指定できます。同時に、これはCosNファイルシステムのテストのトリガーでもあります。COSバケットURLは、オプションtest.fs.cosn.name
を指定して提供する必要があります。
auth-keys.xml
の例を次に示します。
<configuration> <property> <name>test.fs.cosn.name</name> <value>cosn://testbucket-12xxxxxx</value> </property> <property> <name>fs.cosn.bucket.region</name> <value>ap-xxx</value> <description>The region where the bucket is located</description> </property> <property> <name>fs.cosn.userinfo.secretId</name> <value>AKIDXXXXXXXXXXXXXXXXXXXX</value> </property> <property> <name>fs.cosn.userinfo.secretKey</name> <value>xxxxxxxxxxxxxxxxxxxxxxxxx</value> </property> </configuration>
このファイルがない場合、このモジュールのすべてのテストはスキップされます。
core-site.xml
このファイルは事前に存在し、auth-keys.xmlで作成された構成をソースとしています。ほとんどの場合、テスト中に特定の非デフォルトプロパティを設定する必要がない限り、変更は必要ありません。
contract-test-options.xml
コントラクトテストのサポートに関連するすべての構成は、contract-test-options.xml
で指定する必要があります。以下は、contract-test-options.xml
の例です。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <include xmlns="http://www.w3.org/2001/XInclude" href="auth-keys.xml"/> <property> <name>fs.contract.test.fs.cosn</name> <value>cosn://testbucket-12xxxxxx</value> </property> <property> <name>fs.cosn.bucket.region</name> <value>ap-xxx</value> <description>The region where the bucket is located</description> </property> </configuration>
ファイルにオプションfs.contract.test.fs.cosn
が定義されていない場合、すべてのコントラクトテストはスキップされます。
COSのIOパフォーマンスは、Tencent CVM上で実行されている仮想クラスターであっても、原則としてHDFSよりも低くなります。
主な理由は、以下の点に起因すると考えられます。
HDFSは、クエリを高速化するためにデータを複製します。
HDFSは、ディレクトリの内容のリスト表示、パスでのgetFileStatus()の呼び出し、ディレクトリの作成または削除など、多くの「メタデータ」操作において大幅に高速です。
HDFSはローカルハードディスクにデータを保存するため、コードがそのホスト上で実行できる場合はネットワークトラフィックを回避できます。しかし、COSに保存されているオブジェクトへのアクセスは、ほとんど毎回ネットワークへのアクセスが必要です。これは、IOパフォーマンスを損なう重要な点です。Hadoop-COSも、プリリードキュー、アップロードバッファプール、同時アップロードスレッドプールなど、多くの最適化作業を行っています。
多数のシーク呼び出し/位置指定された読み取り呼び出しを実行するファイルIOも、HTTPリクエストのサイズが原因でパフォーマンスの問題が発生します。プリリードキャッシュの最適化にもかかわらず、多数のランダム読み取りは依然として頻繁なネットワークリクエストを引き起こす可能性があります。
HDFSでは、ディレクトリまたはファイルのrename
とmv
の両方がアトミックでO(1)レベルの操作ですが、COSでは、操作はcopy
とdelete
を順番に組み合わせる必要があります。したがって、COSオブジェクトでリネームおよび移動操作を実行することは、パフォーマンスが低いだけでなく、データの整合性を保証することも困難です。
現在、Hadoop-COSを介してCOS BLOBストレージシステムを使用すると、HDFSと比較して約20%〜25%のパフォーマンス損失が発生します。ただし、COSの使用コストは、ストレージコストとメンテナンスコストの両方を含めて、HDFSよりも低くなります。