Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在EMR上向spark传递密码_Apache Spark_Amazon S3_Pyspark_Emr_Amazon Emr - Fatal编程技术网

Apache spark 如何在EMR上向spark传递密码

Apache spark 如何在EMR上向spark传递密码,apache-spark,amazon-s3,pyspark,emr,amazon-emr,Apache Spark,Amazon S3,Pyspark,Emr,Amazon Emr,假设在AmazonEMR上运行的spark集群需要访问postgresql数据库。给它提供登录名和密码的最佳方式是什么? 以下是我们尝试过的一些方法: 在S3上有配置文件和信息(不理想,因为S3上的密码是纯文本) 将其作为环境变量作为spark env on EMR设置的一部分传递(由于执行者无权访问环境变量,因此不起作用。可以在spark配置中使用spark.ExecuteEnv对其进行设置。[EnvironmentVariableName],但这将再次要求密码在spark配置文件(也必须在

假设在AmazonEMR上运行的spark集群需要访问postgresql数据库。给它提供登录名和密码的最佳方式是什么? 以下是我们尝试过的一些方法:

  • 在S3上有配置文件和信息(不理想,因为S3上的密码是纯文本)
  • 将其作为环境变量作为spark env on EMR设置的一部分传递(由于执行者无权访问环境变量,因此不起作用。可以在spark配置中使用spark.ExecuteEnv对其进行设置。[EnvironmentVariableName],但这将再次要求密码在spark配置文件(也必须在S3中)中以纯文本形式存在

有没有更好的方法让我错过了呢?

您可以使用EC2实例元数据将秘密推送到每个EC2实例,使用GET调用检索它。理想情况下,创建一个仅在EMR集群生命周期内有效的登录/密码,在其被拆除后将其删除(或至少重置密码)

AFAIK在Spark中没有明确的支持,但是如果在类路径上获得AWS SDK,可以使用ec2metatautils来处理它

将其作为环境变量传递,作为EMR设置上spark env的一部分 (由于执行者无法访问环境,因此不起作用。) 变量

如果您能够提取驱动程序中的变量,则可以通过将其设置为广播变量将其“传输”给执行器。如果您在每个执行器中设置某种DB客户端,则只要该值是广播的,执行器就可以访问该值


首先用KMS对密码进行加密。然后,您可以使用多种选项将加密值传递给您的驱动程序或工作程序。在驱动程序和工作程序内部,您可以使用KMS对密码进行解密

要传递加密值,可以

  • 将其作为参数传递给spark submit,或
  • 通过EMR分类(驾驶员的火花环境,工人的UDF的纱线环境),或
  • 将其作为参数传递给引导操作,并将其添加到类似bashrc的内容中(我不建议这样做)

是否有关于如何推送EC2实例元数据的文档?我找不到任何内容。