aws emr驱动程序jars

gojuced7  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(405)

我正在尝试通过以下方式在pyspark笔记本上使用aws emr 5.29中的外部驱动程序:


# %%configure -f

{ "conf": {"spark.jars":"s3://bucket/spark-redshift_2.10-2.0.1.jar,"
                        "s3://bucket/minimal-json-0.9.5.jar,"
                        "s3://bucket/spark-avro_2.11-3.0.0.jar,"
                        "s3://bucket/RedshiftJDBC4-no-awssdk-1.2.41.1065.jar"}}

根据https://blog.benthem.io/2020/04/21/connect-aws-emr-to-spark.html
但是,在尝试

from pyspark.sql import SQLContext

sc = spark # existing SparkContext
sql_context = SQLContext(sc)

df = sql_context.read.format("com.databricks.spark.redshift")\
                                    .option("url", jdbcUrl)\
                                    .option("query","select * from test")\
                                    .option("tempdir", "s3://")\
                                    .load()

我得到:java.lang.classnotfoundexception:找不到数据源:com.databricks.spark.redshift。
如何排除故障?我可以确认emr角色有权访问bucket,因为我可以使用spark在同一个bucket上处理csv文件。我还可以确认所有列出的jar文件都在bucket中。

yc0p9oo0

yc0p9oo01#

实际上,解决这个问题的方法是通过ssh连接到主节点,然后查看ivy日志:
/mnt/var/log/livy/livy-livy-server.out
下载的jar文件
/var/lib/livy/.ivy2/jars文件/
根据我发现的情况,我将代码改为:

%%configure -f
{
    "conf": {
        "spark.jars" : "s3://bucket/RedshiftJDBC4-no-awssdk-1.2.41.1065.jar",
        "spark.jars.packages": "com.databricks:spark-redshift_2.10:2.0.0,org.apache.spark:spark-avro_2.11:2.4.0,com.eclipsesource.minimal-json:minimal-json:0.9.4"
    }
}

相关问题