要在EMR上执行Apache Beam Spark / Flink Runner并访问GCS文件,需要进行以下步骤:
确保您的EMR集群具有适当的权限和访问凭据来访问GCS。您可以通过为EMR角色授予适当的GCS访问权限来实现这一点。
在Spark / Flink应用程序中,添加适当的配置以连接到GCS。例如,在Spark中,您可以使用以下代码示例:
import org.apache.spark.SparkConf
import org.apache.beam.runners.spark.SparkContextOptions
val conf = new SparkConf()
.setAppName("Apache Beam with GCS on EMR")
// 添加GCS访问凭据
conf.set("spark.hadoop.google.cloud.auth.service.account.enable", "true")
conf.set("spark.hadoop.google.cloud.auth.service.account.keyfile", "/path/to/keyfile.json")
// 设置要访问的GCS文件路径
conf.set(SparkContextOptions.GCS_UPLOAD_BUCKET, "gs://your-bucket-name")
conf.set(SparkContextOptions.GCS_STAGING_BUCKET, "gs://your-bucket-name")
// 创建SparkContext
val sc = new SparkContext(conf)
请确保将/path/to/keyfile.json
替换为您的GCS访问凭据的实际路径,并将gs://your-bucket-name
替换为您要访问的GCS存储桶。
import org.apache.flink.api.common.ExecutionConfig
import org.apache.beam.runners.flink.FlinkPipelineOptions
ExecutionConfig.GlobalJobParameters params = ExecutionConfig.GlobalJobParameters.fromMap(
Collections.singletonMap("google.cloud.auth.service.account.keyfile", "/path/to/keyfile.json")
);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setGlobalJobParameters(params);
// 设置要访问的GCS文件路径
env.getConfig().setString(FlinkPipelineOptions.GCSUploadBucket, "gs://your-bucket-name");
env.getConfig().setString(FlinkPipelineOptions.GCSStagingBucket, "gs://your-bucket-name");
// 创建FlinkPipelineOptions
FlinkPipelineOptions options = PipelineOptions.as(FlinkPipelineOptions.class);
options.setRunner(FlinkRunner.class);
// 创建Pipeline
Pipeline pipeline = Pipeline.create(options);
请确保将/path/to/keyfile.json
替换为您的GCS访问凭据的实际路径,并将gs://your-bucket-name
替换为您要访问的GCS存储桶。
通过执行上述步骤,您应该能够在EMR上成功执行Apache Beam Spark / Flink Runner并访问GCS文件。