Hi;
I am new to Flink development.
Is there any way to set S3 credentials at runtime?
How can we connect 3 or more different s3 buckets (with different creds)?
Lets say you have 3 csv file on AWS S3, and you want to join them with their id
fields.
How can we do this? I don't want to use flink-conf.yaml file or another config
file.
Because sources can change dynamically, so I need to set creds dynamically.
I could not pass the creds checking for even 1 csv file, here you can try the
code(Scala):
object AwsS3CSVTest {
def main(args: Array[String]): Unit = {
val conf = new Configuration();
conf.setString("fs.s3a.access.key", "***")
conf.setString("fs.s3a.secret.key", "***")
val env = ExecutionEnvironment.createLocalEnvironment(conf)
val datafile = env.readCsvFile("s3a://anybucket/anyfile.csv")
.ignoreFirstLine()
.fieldDelimiter(";")
.types(classOf[String], classOf[String], classOf[String],
classOf[String], classOf[String], classOf[String])
datafile.print()
}
}
I also asked on Stackoverflow for sharing.
https://stackoverflow.com/questions/74482619/apache-flink-s3-file-system-credentials-does-not-work/
I want to say that, I know I can do this with Spark. You can access the
HadoopConfiguration and set the creds at runtime:
def getAwsS3DF = {
val ss = SparkFactory.getSparkSession
ss.sparkContext.hadoopConfiguration.set("fs.s3a.access.key", "xxx")
ss.sparkContext.hadoopConfiguration.set("fs.s3a.secret.key", "xxx")
val df = ss.read.format("csv")
.option("header", true)
.option("sep", "\t")
.load("s3a://anybucket/anyfile.csv ")
df.show
}
So is there anything am I missing or is it not possible?
Thank you.