【问题标题】:Presto Interpreter in Zeppelin on EMREMR 上 Zeppelin 中的 Presto 口译员
【发布时间】:2016-06-21 21:08:18
【问题描述】:

是否可以在 AWS EMR 4.3 上将 Presto 解释器添加到 Zeppelin,如果可以,有人可以发布说明吗?我在 EMR 上运行 Presto-Sandbox 和 Zeppelin-Sandbox。

【问题讨论】:

    标签: emr apache-zeppelin presto


    【解决方案1】:

    Zeppelin 没有官方的 Presto 解释器,提出的 Jira 票的结论是没有必要,因为你可以使用 jdbc 解释器

    https://issues.apache.org/jira/browse/ZEPPELIN-27

    我正在使用 presto 和 zeppelin 运行更高版本的 EMR,默认的解释器集不包括 jdbc,但可以使用 ssh 将其安装到主节点并运行

    sudo /usr/lib/zeppelin/bin/install-interpreter.sh --name jdbc

    最好将其用作引导脚本。

    然后你可以在 Zeppelin 中添加一个新的解释器。

    1. 点击Zeppelin右上角的登录名下拉菜单
    2. 点击解释器
    3. 点击+创建

    给它起一个 presto 之类的名字,意味着你需要在 zeppelin 中的段落的第一行使用 %presto 作为指令,或者将其设置为默认解释器。

    这里需要的设置是:

    default.drivercom.facebook.presto.jdbc.PrestoDriver

    default.urljdbc:presto://<YOUR EMR CLUSTER MASTER DNS>:8889

    default.userhadoop

    请注意,没有提供密码,因为 EMR 环境应该使用 IAM 角色和 ppk 密钥等进行身份验证。

    您还需要 presto JDBC 驱动程序 jar 的依赖项。在 Zeppelin 中有多种添加依赖项的方法,但一种简单的方法是通过 Dependencies 下的解释器设置中的 maven groupid:artifactid:version 引用

    例如 下artifact

    com.facebook.presto:presto-jdbc:0.170

    请注意,0.170 版本对应的是当前部署在 EMR 上的 Presto 版本,未来会发生变化。您可以在 AWS EMR 设置中查看哪个版本正在部署到您的集群。

    您还可以让 Zeppelin 直接连接到目录,或通过将目录和架构附加到 default.url 设置 根据 JDBC 驱动程序的 Presto 文档 https://prestodb.io/docs/current/installation/jdbc.html

    例如例如,将 Presto 与带有名为 datakeep 的数据库的 hive 元存储一起使用

    jdbc:presto://<YOUR EMR CLUSTER MASTER DNS>:8889/hive

    jdbc:presto://<YOUR EMR CLUSTER MASTER DNS>:8889/hive/datakeep

    更新 2018 年 2 月

    EMR 5.11.1 使用 presto 0.187,Zeppelin 解释器向 Presto 驱动程序提供属性的方式存在问题,导致类似 Unrecognized connection property 'url' 的错误

    目前唯一的解决方案似乎是在工件中使用旧版本,或者手动上传修补过的 presto 驱动程序 见https://github.com/prestodb/presto/issues/9254https://issues.apache.org/jira/browse/ZEPPELIN-2891

    在我的情况下,使用对驱动程序的旧引用(显然必须早于 0.180),例如com.facebook.presto:presto-jdbc:0.179 不起作用,zeppelin 给了我一个关于无法下载依赖项的错误。有趣的错误,但可能与 Zeppelin 的本地 maven repo 不包含此内容有关,不确定我是否放弃了。

    我可以确认修补驱动程序有效。

    • (假设您安装了 java 和 maven)
    • 克隆 presto github repo
    • 检查发布标签,例如git checkout 0.187
    • 根据补丁https://groups.google.com/group/presto-users/attach/1231343dbdd09/presto-jdbc.diff?part=0.1&authuser=0进行编辑
    • 使用mvn clean package 构建jar
    • 将 jar 复制到 zeppelin 机器上 zeppelin 用户有权读取的位置。
    • 在解释器中,在 Dependencies - Artifacts 部分下,使用该 jar 文件的绝对路径代替 maven 引用。
    • 将用户传递给 presto 驱动程序似乎存在问题,因此只需将其作为 url 参数添加到“default.url”jdbc 连接字符串中,例如 jdbc:presto://<YOUR EMR CLUSTER MASTER DNS>:8889?user=hadoop

    启动并运行。同时,可能值得考虑将 Athena 作为 Presto 的替代品,因为它是无服务器的,并且实际上只是 Presto 的一个分支。它仅对外部配置单元表有限制,它们必须在 Athena 自己的目录中创建(或者现在在 AWS Glue 目录中,也仅限于外部表)。

    【讨论】:

    • 非常感谢您的解决方案。我尝试使用 presto-jdbc 0.200。它有效!(不能直接应用差异)帮助任何愿意尝试的人。差异文件链接实际上是:groups.google.com/group/presto-users/attach/1231343dbdd09/…
    • 感谢您指出@Rox 我已经修复了上面的链接。
    • 如果您收到can't download dependencies 错误,请尝试sudo chown -R zeppelin:zeppelin /usr/lib/zeppelin/local-repo/ 并重试
    【解决方案2】:

    Chris Kang 在 spark-shell 中有一篇很好的帖子,http://theckang.com/2016/spark-with-presto/。我不认为你不能在 Zeppelin 中做到这一点。另一个有用的帖子是确保您在 EMR 中拥有正确的 Java 版本,http://queirozf.com/entries/update-java-to-jdk-8-on-amazon-elastic-mapreduce。目前的 Presto 版本仅在 Java 8 上运行。我希望它为您指明正确的方向。

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 2017-06-21
      • 2016-12-09
      • 2017-08-19
      • 2020-06-22
      • 2018-02-08
      • 2017-12-18
      • 2016-06-02
      • 2019-10-25
      相关资源
      最近更新 更多