在 Amazon EMR-4 上的 Tez 上运行 Pig
Posted
技术标签:
【中文标题】在 Amazon EMR-4 上的 Tez 上运行 Pig【英文标题】:Running Pig on Tez on Amazon EMR-4 【发布时间】:2016-04-15 12:13:05 【问题描述】:我正在尝试在亚马逊 emr 4.5.0 上的 tez 上运行 pig。该配置在没有 tez 的情况下工作,我只是想让它在 Tez 上工作。
为了(从命令行)创建集群,我们使用(TEZ_VERSION 定义为 0.5.2):
--bootstrap-actions Path=s3://support.elasticmapreduce/tez/bigtop/install-tez.rb,Args=[-v,$TEZ_VERSION,--tez-site,tez.lib.uris=s3://support.elasticmapreduce/tez/$TEZ_VERSION/tez-$TEZ_VERSION-minimal.tar.gz]
另外,我正在覆盖 PIG_CLASSPATH:
--configurations file://pig_tez_classification.json
包含:
[
"Classification": "hadoop-env",
"Properties":
,
"Configurations": [
"Classification": "export",
"Properties":
"PIG_CLASSPATH": "/etc/tez/conf"
,
"Configurations": [
]
]
]
需要 PIG_CLASSPATH 来防止此错误:
ERROR org.apache.pig.backend.hadoop.executionengine.tez.TezJob - Cannot submit DAG
org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration
需要 tez.lib.uris 覆盖以防止出现此错误:
ERROR org.apache.pig.backend.hadoop.executionengine.tez.TezJob (PigTezLauncher-0): Cannot submit DAG
java.io.FileNotFoundException: File does not exist: hdfs://ip-172-31-3-207.eu-west-1.compute.internal:8020/apps/tez/0.5.2/tez-0.5.2-minimal.tar.gz
安装脚本似乎将 tar.gz 文件写入 hdfs 中的正确位置,但是当我之后通过 ssh 登录时,该文件不存在。我认为在 EMR-4 中,引导操作在不同的时间运行,所以在 hdfs 可用之前?
毕竟,我仍然得到这个错误:
WARN org.apache.pig.backend.hadoop.executionengine.tez.TezJob - Exception while gathering stats
java.lang.NullPointerException
at org.apache.pig.tools.pigstats.tez.TezDAGStats.accumulateStats(TezDAGStats.java:191)
at org.apache.pig.tools.pigstats.tez.TezPigScriptStats.accumulateStats(TezPigScriptStats.java:180)
at org.apache.pig.backend.hadoop.executionengine.tez.TezJob.run(TezJob.java:194)
at org.apache.pig.backend.hadoop.executionengine.tez.TezLauncher$1.run(TezLauncher.java:167)
尝试使用 tez 版本 0.8.2 产生:
ERROR org.apache.pig.backend.hadoop.executionengine.tez.TezJob - Cannot submit DAG
org.apache.tez.dag.api.SessionNotRunning: TezSession has already shutdown
这似乎是由于使用的 tez 版本不同,因为它仍然打印出来:
INFO org.apache.pig.tools.pigstats.tez.TezPigScriptStats - Script Statistics:
HadoopVersion: 2.7.2-amzn-0
PigVersion: 0.14.0-amzn-0
TezVersion: 0.5.2
UserId: hadoop
那么有谁知道如何在亚马逊 emr(任何版本)上运行 pig on tez?
【问题讨论】:
【参考方案1】:我正在使用 emr-4.4.0 成功运行它。但是,我无法让 pig 与上传到 HDFS 的 tar.gz 一起正常工作。相反,我必须解压压缩包并上传所有单独的文件,然后将 tez.lib.uris 设置为 hdfs:///apps/tez-0.8.2,hdfs:///apps/tez-0.8.2/lib
【讨论】:
看起来亚马逊提供的 install-tez.rb 脚本(s3://support.elasticmapreduce/tez/bigtop/install-tez.rb)也解压了压缩包,但随后只上传了tar.gz 到 hdfs(查看 install_tez 函数)。我会试试你的版本和方法。以上是关于在 Amazon EMR-4 上的 Tez 上运行 Pig的主要内容,如果未能解决你的问题,请参考以下文章
AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令
带有 tez 的 aws emr 上的 Pig 脚本偶尔会因 OutOfMemoryException 而失败
EMR LinkageError 上的 Spark + Cassandra