我正在使用 script-runner.jar 运行 AWS EMR Pig 作业,如下所述:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-script.html
现在,我想连接 Netflix 的 Lipstick 来监控我的脚本。我设置了服务器,并在此处的 wiki 中:https://github.com/Netflix/Lipstick/wiki/Getting-Started我不太清楚如何执行最后一步:
hadoop jar lipstick-console-[version].jar -Dlipstick.server.url=http://$LIPSTICK_URL
我应该用这个替换 script-runner.jar 吗?
此外,在遵循 wiki 中的构建过程后,我最终得到了 3 个不同的控制台 jar:
lipstick-console-0.6-SNAPSHOT.jar
lipstick-console-0.6-SNAPSHOT-withHadoop.jar
lipstick-console-0.6-SNAPSHOT-withPig.jar
后两个jar的作用是什么?
更新:
我认为我正在取得进步,但它似乎仍然不起作用。
我按照说明设置了 pig.notification.listener 参数 here和口红服务器网址。在 EMR 中有不止一种方法可以做到这一点。由于我使用的是 ruby API,因此我必须指定一个步骤
hadoop_jar_step: jar: 's3://elasticmapreduce/libs/script-runner/script-runner.jar' properties: - pig.notification.listener.arg: com.netflix.lipstick.listeners.LipstickPPNL - lipstick.server.url: http://pig_server_url
接下来,我将
lipstick-console-0.6-SNAPSHOT.jar
添加到 hadoop 类路径中。为此,我必须创建一个引导操作,如下所示:bootstrap_actions: - name: copy_lipstick_jar script_bootstrap_action: path: #s3 path to bootstrap_lipstick.sh
bootstrap_lipstick.sh 的内容在哪里
#!/bin/bash hadoop fs -copyToLocal s3n://wp-data-west-2/load_code/java/lipstick-console-0.6-SNAPSHOT.jar /home/hadoop/lib/
引导操作将口红 jar 复制到集群节点,并且 /home/hadoop/lib/
已经在 hadoop 类路径中(EMR 负责)。
它仍然不起作用,但我想我遗漏了一些非常小的东西......感谢任何想法。
谢谢!
最佳答案
目前,Lipstick 的主类是 Pig 主类的直接替代品。这是一种黑客攻击(远非理想),可以访问优化前后脚本的逻辑和物理计划,否则根本无法访问。因此,不幸的是,仅将 LipstickPPNL 类注册为 Pig 的 PPNL 是行不通的。您必须像运行 Pig 一样运行 Lipstick Main。
我没有尝试在 EMR 上运行口红,但看起来您需要使用自定义 jar 步骤,而不是脚本步骤。请在此处查看文档:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-launch-custom-jar-cli.html
jar 名称将是 lipstick-console-0.6-SNAPSHOT-withHadoop.jar
。它包含运行 Lipstick 所需的所有依赖项。此外,还需要设置 lipstick.server.url
。
或者,您可以查看 https://www.mortardata.com/它在 EMR 上运行并内置了口红集成功能。
关于hadoop - 在 AWS EMR 上用 Lipstick 运行 Pig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230891/