关于EMR的Zeppelin的Presto译员

时间:2016-03-08 03:51:05

标签: emr apache-zeppelin presto

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

2 个答案:

答案 0 :(得分:5)

Zeppelin没有正式的Presto翻译,而且提出的Jira票的结论是没有必要,因为你可以只使用jdbc解释器

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

我正在使用presto& amp; zeppelin,默认的解释器集不包括jdbc,但它可以使用ssh安装到主节点并运行

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

更好的是将其用作引导脚本。

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

  1. 点击Zeppelin右上角的登录名下拉列表
  2. 点击翻译
  3. 点击+创建
  4. 给它起一个像presto这样的名字,这意味着你需要在zeppelin的段落的第一行使用%presto作为指令,或者将它设置为默认的解释器。

    您需要的设置是:

    default.driver com.facebook.presto.jdbc.PrestoDriver

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

    default.user hadoop

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

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

    e.g。 在artifact

    com.facebook.presto:presto-jdbc:0.170

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

    您还可以让Zeppelin直接连接到目录或目录&amp;通过将它们附加到default.url设置来进行模式化 根据JDBC驱动程序的Presto文档 https://prestodb.io/docs/current/installation/jdbc.html

    e.g。例如,使用带有hive Metastore的Presto和一个名为datakeep的数据库

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

    OR

    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回购没有包含这个有关,不确定我放弃了。

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

    • (假设你安装了java&amp; 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

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

答案 1 :(得分:0)

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