3

我正在尝试在 AWS EMR 中连接 Astra Cassandra。但是当我通过 S3 传递文件时,执行程序无法获取捆绑文件。

这是我通过的火花提交命令。

--master yarn
--class com.proj.prog
--packages com.datastax.spark:spark-cassandra-connector_2.12:3.1.0,org.apache.hadoop:hadoop-aws:3.1.2
--conf spark.files=s3://.../connect/secure-connect-proj.zip
--conf spark.cassandra.connection.config.cloud.path=secure-connect-proj.zip

模式是集群,它在客户端模式下工作,但不在集群中。

我也试过但没有奏效。

--conf spark.cassandra.connection.config.cloud.path=s3://.../connect/secure-connect-proj.zip

这在这两种情况下都是错误的。

diagnostics: User class threw exception: java.io.IOException: \
  Failed to open native connection to Cassandra \
  at Cloud File Based Config at secure-connect-proj.zip :: \
    The provided path secure-connect-proj.zip is not a valid URL \
    nor an existing locally path. Provide an URL accessible to all executors \
    or a path existing on all executors (you may use `spark.files` \
    to distribute a file to each executor).
Job aborted due to stage failure: Task 0 in stage 1.0 failed 4 times,  \
  most recent failure: Lost task 0.3 in stage 1.0 (TID 7) \
  (ip-172-31-17-85.ap-south-1.compute.internal executor 1): \
  java.io.IOException: Failed to open native connection to Cassandra \
  at Cloud File Based Config at s3://.../connect/secure-connect-proj.zip :: \
    The provided path s3://.../connect/secure-connect-proj.zip is not a valid URL \
    nor an existing locally path. Provide an URL accessible to all executors \
    or a path existing on all executors (you may use `spark.files` \
    to distribute a file to each executor).

请帮忙。我知道我遗漏了一些东西,但我找不到可行的解决方案。

4

1 回答 1

1

S3 URI

从您提供的示例中,您指定了正确的 S3 URI 并不清楚。确保 URI 是以下形式之一:

s3://bucket_name/secure-connect-db_name.zip
s3://bucket_name/subdir/secure-connect-db_name.zip
s3://bucket_name/path/to/secure-connect-db_name.zip

我建议您更新原始问题并替换s3://...s3://bucket_name以避免混淆。

IAM 角色和 EMR

EMR 使用 EMRFS 访问 S3 数据,因此您需要为 EMRFS 请求配置 IAM 角色。EMRFS 使用附加到 EC2 实例的服务角色的权限策略。

如果未正确配置,这可能是 EMR 无法访问安全捆绑包的原因。有关详细信息,请参阅为对 Amazon S3 的 EMRFS 请求配置 IAM 角色

兼容性

确保您使用的是正确版本的 spark-cassandra-connector。版本 3.1 的连接器适用于 Spark 3.1,这意味着它只能适用于Amazon EMR 6.3

如果您使用的是 Amazon EMR 5.33,它具有 Spark 2.4,因此您需要使用 2.5 版的连接器。

用火花壳测试

通过运行 spark-shell 测试连接性,以便更容易隔离问题。

这些是运行测试所需的依赖项:

libraryDependencies += "org.apache.spark" % "spark-sql" % "3.1.2"
libraryDependencies += "com.datastax.spark" % "spark-cassandra-connector" % "3.1.0"

使用以下命令启动 spark-shell:

spark-shell --packages com.datastax.spark:spark-cassandra-connector_2.12:3.1.0 \
  --master {master-url} \
  --conf spark.files=s3://bucket_name/secure-connect-db_name.zip \
  --conf spark.cassandra.connection.config.cloud.path=secure-connect-db_name.zip \
  --conf spark.cassandra.auth.username=client_id \
  --conf spark.cassandra.auth.password=client_secret \
  --conf spark.sql.extensions=com.datastax.spark.connector.CassandraSparkExtensions

最后,测试连接:

import org.apache.spark.sql.cassandra._
val data = spark.read.cassandraFormat("table_name", "keyspace_name").load
data.printSchema
data.show
于 2021-08-29T01:36:51.203 回答