HadoopやSparkなどのデータ処理フレームワークを使用してバッチジョブを処理する場合、Object Storage Service (OSS) バケットを使用してデータを保存できます。 このトピックでは、ファイルをOSSバケットにアップロードし、アプリケーション内のファイル内のデータにアクセスする方法について説明します。 このトピックでは、Sparkアプリケーションを使用します。
ファイルの準備とOSSバケットへのアップロード
Object Storage Service (OSS) コンソールにログインします。
バケットの作成 詳細については、「バケットの作成」をご参照ください。
ファイルをOSSにアップロードします。 詳細は、「簡易アップロード (Simple upload)」をご参照ください。
ファイルをアップロードした後、ファイルのURLとエンドポイントを記録します。 例:
oss:// test ***-hust/test.txt
oss-cn-hangzhou-internal.aliyuncs.com
Sparkアプリケーションでファイル内のデータにアクセスする
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();
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"
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</プロジェクト>
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データの読み書き」をご参照ください。
Sparkアプリケーションイメージをビルドします。
docker build -t registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-example -f Dockerfile。
Alibaba Cloud Container Registryが提供するイメージリポジトリにイメージをプッシュします。
docker pus h registry.cn-beijing.aliyuncs.com/liumi/spark:2.4.4-例
上記の操作を完了すると、Sparkアプリケーションイメージが準備されます。 イメージを使用して、SparkアプリケーションをKubernetesクラスターにデプロイできます。