如何在EMR中引导期间配置Zeppelin-env.sh

时间:2016-04-27 18:57:16

标签: amazon-web-services emr aws-cli apache-zeppelin

我有一个脚本通过CLI启动带有Spark和Zeppelin的EMR,以及安装Anaconda python的引导操作。

import inspect                                                                                                                             

def froze_it(cls):                                                                                                                      

    def frozensetattr(self, key, value):                                                                                                   
        if not hasattr(self, key) and inspect.stack()[1][3] != "__init__":                                                                 
            print("Class {} is frozen. Cannot set {} = {}"                                                                                 
                  .format(cls.__name__, key, value))                                                                                       
        else:                                                                                                                              
            self.__dict__[key] = value                                                                                                     

    cls.__setattr__ = frozensetattr                                                                                                        
    return cls                                                                                                                             

@froze_it                                                                                                                                  
class A:                                                                                                                                   
    def __init__(self):                                                                                                                    
        self._a = 0                                                                                                                        

a = A()                                                                                                                                    
a._a = 1                                                                                                                                   
a._b = 2 # error

我尝试在引导操作期间配置zeppelin-env.sh,以便将笔记本存储到s3存储桶中。我有第二个脚本要向文件插入三行,但它不起作用。

aws emr create-cluster --applications Name=Hadoop Name=Hive Name=Spark \
Name=Zeppelin-Sandbox \
...... \
--bootstrap-actions \
'[{"Path":"s3://mybucket/python_config.sh","Name":"Python_Config"},\
{"Path":"s3://mybucket/export_var.sh","Name":"Export_Variables"}]'

然后我尝试添加另一个引导操作来通过yum而不是应用程序命令“Name = Zeppelin-Sandbox”安装zeppelin。

#!/bin/bash
echo 'export ZEPPELIN_NOTEBOOK_S3_BUCKET=mybucket' | sudo tee -a /etc/zeppelin/conf.dist/zeppelin-env.sh
echo 'export ZEPPELIN_NOTEBOOK_S3_USER=zeppelin' | sudo tee -a /etc/zeppelin/conf.dist/zeppelin-env.sh
echo 'export ZEPPELIN_NOTEBOOK_STORAGE=org.apache.zeppelin.notebook.repo.S3NotebookRepo' | sudo tee -a /etc/zeppelin/conf.dist/zeppelin-env.sh

然后启动脚本因Bootstrapping失败而失败,因为引导操作返回了非零错误代码。

有没有其他方法可以在引导期间将配置插入zeppelin-env.sh,以便在群集准备好后自动设置?提前谢谢!

1 个答案:

答案 0 :(得分:2)

在安装或配置任何应用程序之前运行引导操作,因此使用引导操作自行配置应用程序并不是非常简单,因为像/ etc / zeppelin / conf这样的目录在当时甚至不存在引导操作运行。

相反,您应该使用配置API,如下所述:http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html

特别是,对于这种情况,您可能希望使用" export" " zeppelin-env"的分类配置分类。