如何告诉 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.extraClassPathspark.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 中漂亮地打印数据框?

如何让独立服务 Zeppelin 看到 Hive?

如何在 HDP 中的 zeppelin-spark2 中将库安装到 python

如何在 zeppelin 中将数组从 spark 绑定到 javascript?

Zeppelin+Spark+Kubernetes:让 Zeppelin Job 在现有的 Spark 集群上运行

Spark Standalone + Zeppelin + Docker:如何设置 SPARK_HOME