【问题标题】:how to tell spark and zeppelin to use local maven .m2 directory in AWS EMR?如何告诉 spark 和 zeppelin 在 AWS EMR 中使用本地 maven .m2 目录?
【发布时间】: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)

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2017-08-28
      • 2017-11-26
      • 2018-05-11
      • 2017-10-20
      • 2013-05-11
      • 2017-01-14
      • 2023-04-04
      • 2018-03-16
      相关资源
      最近更新 更多