如何告诉Spark和Zeppelin在AWS EMR中使用本地maven .m2目录?

时间:2018-08-31 14:19:12

标签: maven apache-spark amazon-emr apache-zeppelin

我创建了一个包含本地Maven存储库的aws AMI,它位于/ usr / local /

然后我使用该AMI创建带有Spark和Zeppelin的AWS EMR集群。

当我使用pyspark --packages导入jar包时,EMR实例在/ home / hadoop中创建一个.ivy目录。 Zeppellin将在/ var / lib / zeppelin / local-repo

中创建一个名称为ID的目录

我如何指向pyspark,spark和Zeppelin使用我的本地Maven存储库(/usr/local/.m2/repository)而不是创建.ivy目录并从mave Central下载jars?

我知道我可以使用pyspark --jars /local/path/to/jar.jar从本地路径导入jar并复制到.ivy目录,但是我宁愿使用spark和zeppelin来使用本地maven存储库。

此外,如果我在spark-default.conf中设置spark.driver.extraClassPathspark.executor.extraClassPath /usr/local/.m2/repository/*,将能够在这些目录中查找jar(因为inisde目录不包含.jar标记,例如/usr/local/.m2/repository/groupId/artifactId/version/name.jar)

1 个答案:

答案 0 :(得分:0)

您应该能够动态加载依赖项,例如:

%spark.dep

// add maven repository
z.addRepo("RepoName").url("RepoURL")

// add maven snapshot repository
z.addRepo("RepoName").url("RepoURL").snapshot()

// add credentials for private maven repository
z.addRepo("RepoName").url("RepoURL").username("username").password("password")

// add artifact from filesystem
z.load("/path/to.jar")

// add artifact from maven repository 
z.load("groupId:artifactId:version") 

查看文档以获取更多详细信息: https://zeppelin.apache.org/docs/latest/interpreter/spark.html#3-dynamic-dependency-loading-via-sparkdep-interpreter