【问题标题】:Run a Unix shell command on every EMR / Yarn node在每个 EMR / Yarn 节点上运行 Unix shell 命令
【发布时间】:2018-02-02 08:36:04
【问题描述】:

我想在 Amazon EMR 集群中的每个节点上安装一个 Python 模块。看起来这样做的明显方法是 ssh 到每个节点并在命令行中安装它。我将 YARN 视为在集群中的每个节点上运行相同 JAR 文件的一种方式,但 YARN 的“jar”命令似乎在本地系统上运行。

【问题讨论】:

    标签: hadoop hadoop-yarn emr


    【解决方案1】:

    您可以使用bootstrap 在每个 EMR 节点上安装第 3 方软件,同时启动集群。

    如果您使用的是命令行,则可以将保存在 s3 中的 shell 脚本作为引导操作的一部分传递。

    aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
    --use-default-roles --ec2-attributes KeyName=myKey \
    --applications Name=Hue Name=Hive Name=Pig \
    --instance-count 5 --instance-type m3.xlarge \
    --bootstrap-action Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    

    如果您使用的是网页界面

    • 创建 shell 脚本以下载必要的软件
    • 转到advanced options,作为General Cluster Settings 的一部分,您可以指定引导操作
    • 每次克隆集群时,都会保留这些操作,并确保在启动集群时完成引导。

    【讨论】:

    • 事实证明,这是亚马逊推荐的方法。它非常适合初始启动,但不适用于即时添加新功能。感谢详细的aws emr 命令。
    【解决方案2】:

    这是在创建 EMR 集群之后在所有节点上运行脚本的一种潜在方法。

    yarn node -list 2>/dev/null \
        | sed -n "s/^\(ip[^:]*\):.*/\1/p" \
        | xargs -t -I{} \
        ssh -i ~/.ssh/yourkey.pem hadoop@{} \
        "pip install package"
    

    关于这里发生的事情的几点说明:

    • yarn node -list 步骤列出了所有节点(使用 --states 选项来限制这一点)
    • sed 步骤解析该列表以仅获取节点名称
    • 如果需要,将-o StrictHostKeyChecking=no 添加到 ssh 以禁用主机密钥检查
    • 如果需要,将 -P n 添加到 xargs 以将其一次限制为 n 节点
    • 这要求当前节点上存在 SSH 私钥

    【讨论】:

    • 我还测试了所有工作节点的 scp。纱线节点-list 2>/dev/null \ | sed -n "s/^(ip[^:]*):.*/\1/p" \ | xargs -t -I{} \ scp -i ~/yourkey.pem ~/your-folder/* hadoop@{}:/home/hadoop/your-folder/
    【解决方案3】:

    YARN 有一个名为 Distributed-shell 的代码示例,可以完成您所说的工作。但它有点重,你可以使用puppet,它可以在集群中安装和配置软件。当然也可以运行unix shell命令或者安装python模块。

    更多详情请见http://puppetlabs.com

    【讨论】:

    • 嗨。您能否提供一个指向分发外壳的指针,以便我接受您的回答?谢谢。
    • 这里是source codeexample
    【解决方案4】:

    这非常难看,但我使用一对 run-if 引导操作和 instance.isMaster=trueinstance.isMaster=false 在所有节点上运行我的命令:

    --bootstrap-action \
    Path=s3://elasticmapreduce/bootstrap-actions/run-if,Args=["instance.isMaster=true","sudo pip install sklearn"] \ 
    Path=s3://elasticmapreduce/bootstrap-actions/run-if,Args=["instance.isMaster=false","sudo pip install sklearn"] 
    

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2015-01-15
      • 2014-12-28
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      相关资源
      最近更新 更多