2017-07-26 43 views
3

我正在EMR上创建集群并将Zeppelin配置为从S3读取笔记本。要做到这一点,我使用JSON对象,看起来像:在启动集群时在EMR上配置Zeppelin的Spark解释器

[ 
    { 
    "Classification": "zeppelin-env", 
    "Properties": { 

    }, 
    "Configurations": [ 
     { 
     "Classification": "export", 
     "Properties": { 
     "ZEPPELIN_NOTEBOOK_STORAGE":"org.apache.zeppelin.notebook.repo.S3NotebookRepo", 
      "ZEPPELIN_NOTEBOOK_S3_BUCKET":"hs-zeppelin-notebooks", 
      "ZEPPELIN_NOTEBOOK_USER":"user" 
     }, 
     "Configurations": [ 

     ] 
     } 
    ] 
    } 
] 

我粘贴此对象EMR的Stoftware配置页: enter image description here 我的问题是,如何/我在哪里可以配置星火解释直接在每次启动集群时无需从Zeppelin手动配置它?

回答

4

这是涉及到一点,你需要做两件事情:

  1. 编辑齐柏林的interpreter.json
  2. 重启解释

所以,你需要做的是什么编写一个shell脚本,然后向运行此shell脚本的EMR集群配置添加额外的步骤。

Zeppelin配置在json中,你可以使用jq(一个工具)来操作json。我不知道你想确切地改变什么,但这里是增加了(神秘失踪)DepInterpreter一个例子:

#!/bin/bash 

# 1 edit the Spark interpreter 
set -e 
cat /etc/zeppelin/conf/interpreter.json | jq '.interpreterSettings."2ANGGHHMQ".interpreterGroup |= .+ [{"class":"org.apache.zeppelin.spark.DepInterpreter", "name":"dep"}]' | sudo -u zeppelin tee /etc/zeppelin/conf/interpreter.json 


# Trigger restart of Spark interpreter 
curl -X PUT http://localhost:8890/api/interpreter/setting/restart/2ANGGHHMQ 

将这个shell脚本在S3存储桶。 然后开始你的EMR集群

--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://eu-west-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args=[s3://mybucket/script.sh] 
+0

非常感谢@ rdeboo。你能否详细说明什么是“2ANGGHHMQ”。你能否提供一个设置“spark.yarn.executor.memoryOverhead”为2048的例子,这是我的情况以及spark.executor.memory和spark.executor.cores – Rami

+1

@Rami这是一些内部密钥名称,用于标识相关部分在interpreter.json中。看起来很稳定(我看过很多不同版本的EMR实例)。但是当然不能保证这不会改变。无论如何,我认为AWS应该修复默认配置,以便我们都可以停止使用此解决方法。 – rdeboo

+0

这是伟大的工作!但在我的情况下需要一个关键的调整。使用其余API重新启动解释器似乎没有在interpreter.json中选择任何更改。 Zeppelin本身需要重新启动,至少这发生在EMR上。所以,而不是卷曲它的工作:sudo /usr/lib/zeppelin/bin/zeppelin-daemon.sh重新启动 –

相关问题