我有一个脚本通过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,以便在群集准备好后自动设置?提前谢谢!
答案 0 :(得分:2)
在安装或配置任何应用程序之前运行引导操作,因此使用引导操作自行配置应用程序并不是非常简单,因为像/ etc / zeppelin / conf这样的目录在当时甚至不存在引导操作运行。
相反,您应该使用配置API,如下所述:http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html
特别是,对于这种情况,您可能希望使用" export" " zeppelin-env"的分类配置分类。