すべてのプロダクト
Search
ドキュメントセンター

:Elastic Container InstanceからOSSバケット内のデータにアクセスする

最終更新日:Dec 14, 2024

HadoopやSparkなどのデータ処理フレームワークを使用してバッチジョブを処理する場合、Object Storage Service (OSS) バケットを使用してデータを保存できます。 このトピックでは、ファイルをOSSバケットにアップロードし、アプリケーション内のファイル内のデータにアクセスする方法について説明します。 このトピックでは、Sparkアプリケーションを使用します。

ファイルの準備とOSSバケットへのアップロード

  1. Object Storage Service (OSS) コンソールにログインします。

  2. バケットの作成 詳細については、「バケットの作成」をご参照ください。

  3. ファイルをOSSにアップロードします。 詳細は、「簡易アップロード (Simple upload)」をご参照ください。

    ファイルをアップロードした後、ファイルのURLとエンドポイントを記録します。 例: oss:// test ***-hust/test.txt oss-cn-hangzhou-internal.aliyuncs.com

Sparkアプリケーションでファイル内のデータにアクセスする

  1. Sparkアプリケーションを開発します。

    SparkConf conf = new SparkConf().setAppName(WordCount.class.getSimpleName());
    JavaRDD<String> lines = sc.textFile("oss:// test ***-hust/test.txt" 、250);
    ...
    wordsCountResult.saveAsTextFile("oss:// test ***-hust/test-result");
    sc.close(); 
  2. Sparkアプリケーションでファイルに関する情報を設定します。

    説明

    エンドポイント、AccessKey ID、およびAccessKeyシークレットを実際の値に置き換えます。

    • 方法1: 静的構成ファイルを使用する

      core-site.xmlファイルを変更し、新しいcore-site.xmlファイルをアプリケーションプロジェクトのディレクトリ (リソースという名前) に格納します。

      <?xml version="1.0" encoding="UTF-8"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      <!-
        Apacheライセンス、バージョン2.0 (「ライセンス」) でライセンスされています。
        ライセンスに準拠している場合を除き、このファイルを使用できません。
        You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
        適用法によって要求されない限り、または書面で同意されない限り、ソフトウェア
        ライセンスの下で配布される「AS is」BASISに配布され、
        明示的または暗黙のいずれかの種類の保証または条件なし。
        権限を管理する特定の言語については、ライセンスを参照してください。
        ライセンスに基づく制限。 添付のLICENSEファイルを参照してください。
      ->
      <!-- このファイルにサイト固有のプロパティを上書きします。 ->
      <設定>
          <! -- OSS設定 -->
          <property>
              <name>fs.oss.impl</name>
              <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
          </property>
          <property>
              <name>fs.oss.endpoint</name>
              <valu e>oss-cn-hangzhou-internal.aliyuncs.com</value>
          </property>
          <property>
              <name>fs.oss.accessKeyId</name>
              <value>{AccessKey ID}</value>
          </property>
          <property>
              <name>fs.oss.accessKeySecret</name>
              <value>{AccessKey Secret}</value>
          </property>
          <property>
              <name>fs.oss.buffer.dir</name>
              <value>/tmp/oss</value>
          </property>
          <property>
              <name>fs.oss.connection.secure.enabled</name>
              <value>false</value>
          </property>
          <property>
              <name>fs.oss.connection.maximum</name>
              <value>2048</value>
          </property>
      </configuration> 
    • 方法2: Sparkアプリケーションの送信時に動的設定を実行する

      例:

      hadoopConf:
          # OSS
          "fs.oss.impl": "org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem"
          "fs.oss.endpoint": "oss-cn-hangzhou-internal.aliyuncs.com"
          "fs.oss.accessKeyId": "あなたのAccessKey ID"
          "fs.oss.accessKeySecret": "your AccessKey Secret" 
  3. JARファイルをパッケージ化します。

    パッケージ化されたJARファイルには、すべての依存関係が含まれます。 Sparkアプリケーションのpom.xmlファイルのサンプルコンテンツ:

    1<?xml version="1.0" encoding="UTF-8"?>
     2 <プロジェクトxmlns=" http://maven.apache.org/POM/4.0.0 "
     3 xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance "
     4 xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd ">
     5 <modelVersion>4.0.0</modelVersion>
     6
     7 <groupId>com.aliyun.liumi.spark</groupId>
     8 <artifactId>SparkExampleJava</artifactId>
     9 <version>1.0-スナップショット </version>
    10
    11 <依存関係>
    12 <依存関係>
    13 <groupId>org.apache.spark</groupId>
    14 <artifactId>spark-core_2.12</artifactId>
    15 <version>2.4.3</version>
    16 </dependency>
    17
    18 <依存関係>
    19 <groupId>com.aliyun.dfs</groupId>
    20 <artifactId>aliyun-sdk-dfs</artifactId>
    21 <バージョン> 1.0.3</version>
    22 </dependency>
    23
    24 </dependencies>
    25
    26 <ビルド>
    27 <プラグイン>
    28 <plugin>
    29 <groupId>org.apache.maven.plugins</groupId>
    30 <artifactId>maven-assembly-plugin</artifactId>
    31 <バージョン> 2.6</version>
    32 <構成>
    33 <appendAssemblyId>false</appendAssemblyId>
    34 <descriptorRefs>
    35 <descriptorRef>jar-with-dependencies</descriptorRef>
    36 </descriptorRefs>
    37 <アーカイブ>
    38 <マニフェスト>
    39 <mainClass>com.aliyun.liumi.spark.example.WordCount</mainClass>
    40 </manifest>
    41 </archive>
    42 </構成>
    43 <executions>
    44 <実行>
    45 <id>make-assembly</id>
    46 <phase> パッケージ </phase>
    47 <ゴール>
    48 <goal> アセンブリ </goal>
    49 </goals>
    50 </execution>
    51 </executions>
    52 </plugin>
    53 </plugins>
    54 </build>
    55</プロジェクト> 
  4. Dockerfileを書き込みます。

    # スパークベース画像
    FRO M registry.cn-beijing.aliyuncs.com/eci_open/spark:2.4.4
    RUN rm $SPARK_HOME/jars/kubernetes-client-*.jar
    $SPARK_HOME/jars https://repo1.maven.org/maven2/io/fabric8/kubernetes-client/4.4.2/kubernetes-client-4.4.2.jar 追加
    RUN mkdir -p /opt/spark/jars
    COPY SparkExampleJava-1.0-SNAPSHOT.jar /opt/spark/jars
    # OSSのJAR依存関係パッケージ
    COPY aliyun-sdk-oss-3.4.1.jar /opt/spark/jars
    COPY hadoop-aliyun-2.7.3.2.6.1.0-129.jar /opt/spark/jars
    COPY jdom-1.1.jar /opt/spark/jars 
    説明

    OSSのJAR依存関係パッケージをダウンロードする方法については、「HDP 2.6ベースのHadoopを使用したOSSデータの読み書き」をご参照ください。

  5. Sparkアプリケーションイメージをビルドします。

    docker build -t registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-example -f Dockerfile。
  6. Alibaba Cloud Container Registryが提供するイメージリポジトリにイメージをプッシュします。

    docker pus h registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-例

上記の操作を完了すると、Sparkアプリケーションイメージが準備されます。 イメージを使用して、SparkアプリケーションをKubernetesクラスターにデプロイできます。