如何告诉 spark 和 zeppelin 在 AWS EMR 中使用本地 maven .m2 目录?
Posted
技术标签:
【中文标题】如何告诉 spark 和 zeppelin 在 AWS EMR 中使用本地 maven .m2 目录?【英文标题】:how to tell spark and zeppelin to use local maven .m2 directory in AWS EMR? 【发布时间】:2019-02-06 14:28:21 【问题描述】:我创建了一个包含本地 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 下载 jar?
我知道我可以使用pyspark --jars /local/path/to/jar.jar
从本地路径导入 jar 并复制到 .ivy 目录,但我宁愿使用 spark 和 zeppelin 来使用我的本地 maven 存储库。
此外,如果我在 spark-default.conf 中设置 spark.driver.extraClassPath
和 spark.executor.extraClassPath
/usr/local/.m2/repository/*,将能够在这些目录中查找 jars(因为 inisde 目录没有直接包含 .jar,例如 /usr/local/.m2/repository/groupId/artifactId/version/name.jar)
【问题讨论】:
【参考方案1】:您应该能够像这样动态加载依赖项:
%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
【讨论】:
以上是关于如何告诉 spark 和 zeppelin 在 AWS EMR 中使用本地 maven .m2 目录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Zeppelin/Spark/Scala 中漂亮地打印数据框?
如何在 HDP 中的 zeppelin-spark2 中将库安装到 python
如何在 zeppelin 中将数组从 spark 绑定到 javascript?