hadoop-aliyun
モジュールは、Aliyun オブジェクトストレージサービス (Aliyun OSS) との Aliyun 統合をサポートします。生成された JAR ファイル hadoop-aliyun.jar
は、このサポートに必要なすべての外部アーティファクトに対する推移的な依存関係も宣言しており、ダウンストリームアプリケーションがこのサポートを簡単に使用できるようにします。
Apache Hadoop のデフォルトのクラスパスに含めるには、hadoop-env.sh の HADOOP_OPTIONAL_TOOLS のリストに 'hadoop-aliyun' が含まれていることを確認してください。
FileSystem
インターフェースを実装することにより、階層型ファイルシステムビューを提供します。Aliyun OSS は、「オブジェクトストア」の一例です。スケーラビリティと特に高可用性を実現するために、Aliyun OSS は従来の「POSIX」ファイルシステムが約束する制約の一部を緩和しています。
具体的には
delete()
と rename()
は、ファイルごとの再帰的な操作によって実装されます。これらは、少なくともファイル数に比例した時間がかかり、その間、部分的な更新が表示される場合があります。 delete()
と rename()
はアトミック性を保証できません。操作が中断されると、ファイルシステムは中間状態のままになります。これに依存する Hadoop の機能は、予期しない動作をする可能性があります。たとえば、YARN の AggregatedLogDeletionService は、適切なログファイルを削除しません。
Aliyun クレデンシャルは、サービスの料金を支払うだけでなく、データへの読み取りおよび書き込みアクセスを提供します。アカウントを持つ人は誰でも、データセットを読み取ることができるだけでなく、削除することもできます。
次の方法でこれらのクレデンシャルを誤って共有しないでください。1. シークレットを含む構成ファイルを SCM にチェックインする。2. コンソールに記録する (必ず見られることになるため)。3. oss://accessKeyId:accessKeySecret@directory/file
などの URL にクレデンシャルを含むファイルシステム URI を定義する。ログやエラーメッセージに表示されます。4. バグレポートにシークレットを含める。
これらのいずれかを行った場合は、すぐにクレデンシャルを変更してください!
具体的には、Aliyun E-MapReduce では、oss://
もサポートされていますが、実装が異なります。Aliyun E-MapReduce を使用している場合は、これらの手順に従ってください。また、E-MapReduce での Aliyun OSS 統合に関連するすべての問題は、Aliyun 自身のみが対処できることに注意してください。問題が発生した場合は、Aliyun にお問い合わせください。
<property> <name>fs.oss.accessKeyId</name> <description>Aliyun access key ID</description> </property> <property> <name>fs.oss.accessKeySecret</name> <description>Aliyun access key secret</description> </property> <property> <name>fs.oss.credentials.provider</name> <description> Class name of a credentials provider that implements com.aliyun.oss.common.auth.CredentialsProvider. Omit if using access/secret keys or another authentication mechanism. The specified class must provide an accessible constructor accepting java.net.URI and org.apache.hadoop.conf.Configuration, or an accessible default constructor. </description> </property>
<property> <name>fs.AbstractFileSystem.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.OSS</value> <description>The implementation class of the OSS AbstractFileSystem. If you want to use OSS as YARN’s resource storage dir via the fs.defaultFS configuration property in Hadoop’s core-site.xml, you should add this configuration to Hadoop's core-site.xml </description> </property> <property> <name>fs.oss.endpoint</name> <description>Aliyun OSS endpoint to connect to. An up-to-date list is provided in the Aliyun OSS Documentation. </description> </property> <property> <name>fs.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value> </property> <property> <name>fs.oss.proxy.host</name> <description>Hostname of the (optinal) proxy server for Aliyun OSS connection</description> </property> <property> <name>fs.oss.proxy.port</name> <description>Proxy server port</description> </property> <property> <name>fs.oss.proxy.username</name> <description>Username for authenticating with proxy server</description> </property> <property> <name>fs.oss.proxy.password</name> <description>Password for authenticating with proxy server.</description> </property> <property> <name>fs.oss.proxy.domain</name> <description>Domain for authenticating with proxy server.</description> </property> <property> <name>fs.oss.proxy.workstation</name> <description>Workstation for authenticating with proxy server.</description> </property> <property> <name>fs.oss.attempts.maximum</name> <value>20</value> <description>How many times we should retry commands on transient errors.</description> </property> <property> <name>fs.oss.connection.establish.timeout</name> <value>50000</value> <description>Connection setup timeout in milliseconds.</description> </property> <property> <name>fs.oss.connection.timeout</name> <value>200000</value> <description>Socket connection timeout in milliseconds.</description> </property> <property> <name>fs.oss.paging.maximum</name> <value>1000</value> <description>How many keys to request from Aliyun OSS when doing directory listings at a time. </description> </property> <property> <name>fs.oss.multipart.upload.size</name> <value>10485760</value> <description>Size of each of multipart pieces in bytes.</description> </property> <property> <name>fs.oss.upload.active.blocks</name> <value>4</value> <description>Active(Concurrent) upload blocks when uploading a file.</description> </property> <property> <name>fs.oss.multipart.download.threads</name> <value>10</value> <description>The maximum number of threads allowed in the pool for multipart download and upload.</description> </property> <property> <name>fs.oss.multipart.download.ahead.part.max.number</name> <value>4</value> <description>The maximum number of read ahead parts when reading a file.</description> </property> <property> <name>fs.oss.max.total.tasks</name> <value>128</value> <description>The maximum queue number for multipart download and upload.</description> </property> <property> <name>fs.oss.max.copy.threads</name> <value>25</value> <description>The maximum number of threads allowed in the pool for copy operations.</description> </property> <property> <name>fs.oss.max.copy.tasks.per.dir</name> <value>5</value> <description>The maximum number of concurrent tasks allowed when copying a directory.</description> </property> <property> <name>fs.oss.multipart.upload.threshold</name> <value>20971520</value> <description>Minimum size in bytes before we start a multipart uploads or copy. Notice: This property is deprecated and will be removed in further version. </description> </property> <property> <name>fs.oss.multipart.download.size</name> <value>102400/value> <description>Size in bytes in each request from ALiyun OSS.</description> </property> <property> <name>fs.oss.list.version</name> <value>2</value> <description>Select which version of the OSS SDK's List Objects API to use. Currently support 2(default) and 1(older API). </description> </property> <property> <name>fs.oss.buffer.dir</name> <description>Comma separated list of directories to buffer OSS data before uploading to Aliyun OSS</description> </property> <property> <name>fs.oss.acl.default</name> <value></vaule> <description>Set a canned ACL for bucket. Value may be private, public-read, public-read-write. </description> </property> <property> <name>fs.oss.server-side-encryption-algorithm</name> <value></vaule> <description>Specify a server-side encryption algorithm for oss: file system. Unset by default, and the only other currently allowable value is AES256. </description> </property> <property> <name>fs.oss.connection.maximum</name> <value>32</value> <description>Number of simultaneous connections to oss.</description> </property> <property> <name>fs.oss.connection.secure.enabled</name> <value>true</value> <description>Connect to oss over ssl or not, true by default.</description> </property>
oss://
ファイルシステムクライアントをテストするには、テストランナーに認証の詳細を渡す 2 つのファイルが必要です。
auth-keys.xml
core-site.xml
これら 2 つの構成ファイルは、hadoop-tools/hadoop-aliyun/src/test/resources
に配置する必要があります。
core-site.xml
このファイルは既に存在し、auth-keys.xml
で作成された構成を読み込みます。
ほとんどの場合、テスト中に特定のデフォルト以外のプロパティを設定する必要がある場合を除き、変更は必要ありません。
auth-keys.xml
このファイルは、Aliyun OSS モジュールのテストをトリガーします。このファイルがないと、*このモジュールのテストは実行されません*
Aliyun OSS に接続するために必要なアクセスキー ID/シークレットとプロキシ情報が含まれており、OSS バケット URL も提供する必要があります。
test.fs.oss.name
: Aliyun OSS テストのバケットの URLバケットの内容はテストプロセス中にクリーンアップされるため、テスト以外の目的でバケットを使用しないでください。
/test/resources
の下にファイル contract-test-options.xml
を作成します。特定のファイル fs.contract.test.fs.oss
テストパスが定義されていない場合、これらのテストはスキップされます。これらのテストを実行するにはクレデンシャルも必要です。auth-keys.xml
からコピーするか、直接 XInclude 組み込みによってコピーできます。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.oss</name> <value>oss://spark-tests</value> </property> <property> <name>fs.oss.impl</name> <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value> </property> <property> <name>fs.oss.endpoint</name> <value>oss-cn-hangzhou.aliyuncs.com</value> </property> <property> <name>fs.oss.buffer.dir</name> <value>/tmp/oss</value> </property> <property> <name>fs.oss.multipart.download.size</name> <value>102400</value> </property> </configuration>