カスタム設定ファイルを使用すると、タスクやセッションなどの環境設定を定義できます。XML や JSON など複数のファイル形式がサポートされており、ワークロード全体で設定の一貫性とセキュリティを確保できます。
前提条件
ワークスペースを作成しました。詳細については、「ワークスペースの管理」をご参照ください。
カスタム設定ファイルの作成
-
設定管理ページに移動します。
-
E-MapReduce コンソールにログインします。
-
左側のナビゲーションウィンドウで、EMR Serverless > Spark を選択します。
-
Spark ページで、対象のワークスペース名をクリックします。
-
EMR Serverless Spark ページで、左側のナビゲーションウィンドウから [設定管理] をクリックします。
-
-
Configurations ページで、ConfigMaps タブをクリックします。
-
Create Custom Configuration File をクリックします。
-
Create Custom Configuration File ページで、以下のパラメーターを設定し、create をクリックします。
パラメーター
説明
Path
ファイルの保存先パスを選択します。
Name
ファイル名と拡張子を指定します。ファイル形式に応じて、
.txt、.xml、または.jsonを選択します。File Content
設定内容を入力します。入力内容は、選択したファイル形式のフォーマット要件を満たしている必要があります。
Description
(任意)ファイルの目的を記述して、識別しやすくします。
説明システムには事前定義された設定ファイルが含まれており、これらは名前の変更や上書きができません。次のファイル名は予約済みです:
spark-defaults.conf、kyuubi-defaults.conf、executorPodTemplate.yaml、spark-pod-template.yaml、driver_log4j.xml、executor_log4j.xml、session_log4j.xml、spark.properties、およびsyncer_log4j.xml。
カスタム設定ファイルを作成後、[操作] 列の 編集 または 削除 をクリックして、ファイルを編集または削除できます。
カスタム設定ファイルの使用
例 1:Ranger 認証の有効化
EMR Serverless の Spark Thrift Server で Ranger 認証を有効化するには、カスタム設定ファイルを使用します。
-
カスタム設定ファイルを作成します。
ranger-spark-security.xmlという名前の設定ファイルを作成し、/etc/spark/confに保存します。以下の内容を使用してください:<configuration> <property> <name>ranger.plugin.spark.policy.cache.dir</name> <value>/opt/emr-hive/policycache</value> </property> <property> <name>ranger.plugin.spark.ambari.cluster.name</name> <value>serverless-spark</value> </property> <property> <name>ranger.plugin.spark.service.name</name> <value>emr-hive</value> </property> <property> <name>ranger.plugin.spark.policy.rest.url</name> <value>http://<ranger_admin_ip>:<ranger_admin_port></value> </property> <property> <name>ranger.plugin.spark.policy.source.impl</name> <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value> </property> <property> <name>ranger.plugin.spark.super.users</name> <value>root</value> </property> </configuration><ranger_admin_ip>および<ranger_admin_port>は、ご利用の Ranger Admin サービスの内部 IP アドレスおよびポートに置き換えてください。ECS 上の EMR クラスターで Ranger サービスに接続する場合は、<ranger_admin_ip>にマスターノードの内部 IP アドレスを、<ranger_admin_port>に 6080 を使用できます。 -
Spark Thrift Server を構成します。
Spark Thrift Server セッションで Ranger 認証を有効化するには、まずセッションを停止します。Normal Network Connection ドロップダウンリストで、作成済みの接続名を選択します。次に、Spark Configuration に以下の構成を追加します。編集後、変更を反映させるためにセッションを再起動してください。
spark.emr.serverless.user.defined.jars /opt/ranger/ranger-spark.jar spark.sql.extensions org.apache.kyuubi.plugin.spark.authz.ranger.RangerSparkExtension -
接続をテストします。
Spark Beeline を使用して接続をテストします。接続方法の詳細については、「Spark Thrift Server への接続」をご参照ください。必要な権限を持たずにデータベース、テーブル、その他のリソースにアクセスしようとすると、システムは権限拒否エラーを返します。
Error: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.kyuubi.plugin.spark.authz.AccessControlException: Permission denied: user [test] does not have [update] privilege on [database=default/table=students/column=name] at org.apache.spark.sql.hive.thriftserver.HiveThriftServerErrors$.runningQueryError(HiveThriftServerErrors.scala:46) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.org$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$execute(SparkExecuteStatementOperation.scala:262) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.$anonfun$run$2(SparkExecuteStatementOperation.scala:166) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23) at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties(SparkOperation.scala:79) at org.apache.spark.sql.hive.thriftserver.SparkOperation.withLocalProperties$(SparkOperation.scala:63) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.withLocalProperties(SparkExecuteStatementOperation.scala:41) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:166) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2$$anon$3.run(SparkExecuteStatementOperation.scala:161) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1730) at org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$anon$2.run(SparkExecuteStatementOperation.scala:175) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750)
例 2:OSS ファイルへのアクセス
ECS 上の EMR から EMR Serverless へ非 SQL タスクを移行する際、EMR Serverless では core-site.xml ファイルが自動的にロードされないため、Alibaba Cloud Object Storage Service (OSS) または OSS-HDFS にアクセスするタスクが UnsupportedFileSystemException エラーで失敗することがあります。この問題を解決するには、タスクコード内で SparkContext#hadoopConfiguration を通じて FileSystem をすでに初期化していない限り、手動で設定を提供する必要があります。
Configurations ページの ConfigMaps タブで、core-site.xml という名前の設定ファイルを作成し、/etc/spark/conf に保存します。ファイルの内容は以下のとおりです:
<?xml version="1.0" ?>
<configuration>
<property>
<name>fs.AbstractFileSystem.oss.impl</name>
<value>com.aliyun.jindodata.oss.OSS</value>
</property>
<property>
<name>fs.oss.endpoint</name>
<value>oss-cn-<region>-internal.aliyuncs.com</value>
</property>
<property>
<name>fs.oss.impl</name>
<value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
</property>
<property>
<name>fs.oss.credentials.provider</name>
<value>com.aliyun.jindodata.oss.auth.SimpleCredentialsProvider</value>
</property>
<property>
<name>fs.oss.accessKeyId</name>
<value>Your AccessKey ID for OSS or OSS-HDFS</value>
</property>
<property>
<name>fs.oss.accessKeySecret</name>
<value>Your AccessKey Secret for OSS or OSS-HDFS</value>
</property>
</configuration>
<region> はご利用の OSS リージョン(例:hangzhou)に置き換えてください。