通过在亚马逊 EMR 上提交 spark-submit 添加 postgresql jar
Adding postgresql jar though spark-submit on amazon EMR
我尝试过使用 --driver-class-path 和 --jars 进行 spark-submit 并尝试过这种方法 https://petz2000.wordpress.com/2015/08/18/get-blas-working-with-spark-on-amazon-emr/
关于在命令行中使用 SPARK_CLASSPATH,如
SPARK_CLASSPATH=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar pyspark
我收到这个错误
Found both spark.executor.extraClassPath and SPARK_CLASSPATH. Use only the former.
但是我无法添加它。如何添加 postgresql JDBC jar 文件以从 pyspark 使用它?我正在使用 EMR 版本 4.2
谢谢
1) 清除环境变量:
unset SPARK_CLASSPATH
2) 使用 --jars 选项在您的集群上分发 postgres 驱动程序:
pyspark --jars=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar
//or
spark-submit --jars=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar <your py script or app jar>
在 spark.driver.extraClassPath
行将 jar 路径添加到 /etc/spark/conf/spark-defaults.conf
解决了我的问题。
我通常使用下面的方法并且效果很好。
1) 第 1 步:使用 bootstrap 操作 shell 脚本下载 postgres 驱动程序 jar:
#!/bin/bash
mkdir -p /home/hadoop/lib/
cd /home/hadoop/lib
wget https://jdbc.postgresql.org/download/postgresql-42.2.12.jar
chmod +x postgresql-42.2.12.jar
2) 第 2 步:在集群 EMR 设置上添加配置 JSON 以将 jar 文件包含到 spark-defaults 文件的执行程序和驱动程序 extraClassPath 中:
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/goodies/lib/emr-spark-goodies.jar:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/usr/share/aws/emr/s3select/lib/emr-s3-select-spark-connector.jar:/home/hadoop/lib/postgresql-42.2.12.jar",
"spark.driver.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/goodies/lib/emr-spark-goodies.jar:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/usr/share/aws/emr/s3select/lib/emr-s3-select-spark-connector.jar:/home/hadoop/lib/postgresql-42.2.12.jar",
},
}
如果您的 EMR 集群可以访问互联网,您可以使用 Maven:
$ spark-sql --packages org.postgresql:postgresql:42.2.18 --driver-class-path ~/.ivy2/jars/org.postgresql_postgresql-42.2.18.jar
其中 spark-sql
可以替换为 pyspark
或另一个 Spark CLI
这会将 PostgreSQL JDBC 驱动程序和依赖项从 Maven Central 下载到您的 EMR Master,最有可能在 /home/hadoop/.ivy2/jars/
(您可以查看 spark 控制台/日志以加倍检查),并将该驱动程序加载到 Spark
我尝试过使用 --driver-class-path 和 --jars 进行 spark-submit 并尝试过这种方法 https://petz2000.wordpress.com/2015/08/18/get-blas-working-with-spark-on-amazon-emr/
关于在命令行中使用 SPARK_CLASSPATH,如
SPARK_CLASSPATH=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar pyspark
我收到这个错误
Found both spark.executor.extraClassPath and SPARK_CLASSPATH. Use only the former.
但是我无法添加它。如何添加 postgresql JDBC jar 文件以从 pyspark 使用它?我正在使用 EMR 版本 4.2
谢谢
1) 清除环境变量:
unset SPARK_CLASSPATH
2) 使用 --jars 选项在您的集群上分发 postgres 驱动程序:
pyspark --jars=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar
//or
spark-submit --jars=/home/hadoop/pg_jars/postgresql-9.4.1208.jre7.jar <your py script or app jar>
在 spark.driver.extraClassPath
行将 jar 路径添加到 /etc/spark/conf/spark-defaults.conf
解决了我的问题。
我通常使用下面的方法并且效果很好。
1) 第 1 步:使用 bootstrap 操作 shell 脚本下载 postgres 驱动程序 jar:
#!/bin/bash
mkdir -p /home/hadoop/lib/
cd /home/hadoop/lib
wget https://jdbc.postgresql.org/download/postgresql-42.2.12.jar
chmod +x postgresql-42.2.12.jar
2) 第 2 步:在集群 EMR 设置上添加配置 JSON 以将 jar 文件包含到 spark-defaults 文件的执行程序和驱动程序 extraClassPath 中:
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/goodies/lib/emr-spark-goodies.jar:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/usr/share/aws/emr/s3select/lib/emr-s3-select-spark-connector.jar:/home/hadoop/lib/postgresql-42.2.12.jar",
"spark.driver.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/goodies/lib/emr-spark-goodies.jar:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/usr/share/aws/emr/s3select/lib/emr-s3-select-spark-connector.jar:/home/hadoop/lib/postgresql-42.2.12.jar",
},
}
如果您的 EMR 集群可以访问互联网,您可以使用 Maven:
$ spark-sql --packages org.postgresql:postgresql:42.2.18 --driver-class-path ~/.ivy2/jars/org.postgresql_postgresql-42.2.18.jar
其中 spark-sql
可以替换为 pyspark
或另一个 Spark CLI
这会将 PostgreSQL JDBC 驱动程序和依赖项从 Maven Central 下载到您的 EMR Master,最有可能在 /home/hadoop/.ivy2/jars/
(您可以查看 spark 控制台/日志以加倍检查),并将该驱动程序加载到 Spark