当我尝试从 Hue Pig UI 启动 Pig 脚本作业时,进程会启动一个作业,然后进度条会在那里停留 1-3 分钟,最终变成红色,唯一的输出是:“请初始化 HIVE_HOME。”
我尝试运行的我的 Pig 脚本是HDP 安装手册中的 Pig 验证中的脚本。
Pig 脚本:
A = 使用 PigStorage(':') 加载'passwd';
B = foreach A 生成 \$0 作为 id;将 B 存储到 '/tmp/id.out' 中;
我正在尝试让 Hortonworks Data Platform 的 Hue 版本(根据他们的网站为 v2.3 )中的 Pig 脚本 UI 工作。我正在手动执行此操作,使用 yum 安装我需要的软件包并手动设置配置。我正在使用 CentOS 6.4 在 Amazon AWS 机器上工作。我正在关注此安装文档。
最初我认为我需要启动并运行 Oozie 才能从 Hue 执行 Pig Job,但是在跟踪 Hue 日志时,我看到它在执行 Pig 脚本时正在启动 WebHCat,因此我安装并验证了 WebHCat 正在运行到 http://$WebHCat.server.full.hostname:50111/templeton/v1/status 并验证我收到了非错误响应。因此,我完全相信 WebHCat 工作正常。我还必须注意,由于 core-site.xml 中的配置允许 Hue 用户在运行作业时冒充 hdfs 用户,Hue 用户正在运行 WebHCat 服务器,这是我之前遇到的一个错误试图在 Hue UI 中运行 Pig 脚本。
到目前为止,我已经在实际 Pig程序文件中的代码块中找到了错误。有问题的代码块是:
# CLASSPATH initially contains $PIG_CONF_DIR
CLASSPATH="${PIG_CONF_DIR}"
CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
if [ "$includeHCatalog" == "true" ]; then
# need to provide the hcatalog jar file path as well as
# the location of the hive jars on which hcatalog depends
hiveMetaStoreJar=hive-metastore-*.jar
thriftJar=libthrift-*.jar
hiveExecJar=hive-exec-*.jar
fbJar=libfb303-*.jar
jdoECJar=jdo*-api-*.jar
slfJar=slf4j-api-*.jar
hbaseHiveJar=hive-hbase-handler-*.jar
if [ "$HIVE_HOME" == "" ]; then
if [ -d "/usr/lib/hive" ]; then
HIVE_HOME=/usr/lib/hive
else
echo "Please initialize HIVE_HOME"
exit -1
fi
fi
这个代码块导致问题的事实非常令人困惑,而且我自己无法追踪错误。
我知道这个 if-else 子句: if [ -d "/usr/lib/hive" ]; 然后 HIVE_HOME=/usr/lib/hive else echo "Please initialize HIVE_HOME" exit -1 fi 是错误的根源,但我不明白为什么它没有识别出安装 Hive 的那个 lib 目录确实存在.
这就是我卡住的地方。我知道“/usr/lib/hive”存在,因为我已验证该目录存在于运行 Hue、WebHCat 和 Pig 的机器上。我不知道如何调试这里出了什么问题。我考虑过手动设置 HIVE_HOME,但这可能没有实际意义,因为 Pig 没有识别出该目录存在于文件系统中,因此如果它稍后在代码中尝试访问该路径会出错。
在这一点上,我可能会遗漏一些明显的东西,但我将非常感谢我能得到的任何帮助。