如何在AWS EMR上使用更新版本的镶木地板罐

时间:2015-11-16 19:33:03

标签: amazon-web-services hive emr

最新的EMR 4.1.0捆绑了Hive 1.0.0和Spark 1.5.0,而Hive 1.0.0使用parquet-hadoop-bundle-1.5.0.jar而Spark使用parquet-hadoop-1.7.0.jar

不幸的是版本镶木地板1.5.0无法读取由镶木地板1.7.0生成的文件。

我试图在Hive shell中使用add jar parquet-hive-bundle-1.7.0.jar但没有运气,Hive仍然使用其捆绑的旧Parquet jar。

然后我尝试用新罐子替换旧罐子,但即使使用sudo find / "*parquet*.jar"命令,我也找不到任何与木地板相关的罐子。

但是我将parquet-hive-bundle-1.7.0.jar复制到/usr/lib/hive/lib但是它没有用,Hive仍然使用旧的拼花瓶而无法读取我的镶木地板文件。通常这种方式适用于Cloudera发行版。

所以我的问题是,实木复合地板罐在哪里?如何用更新的版本替换它?

1 个答案:

答案 0 :(得分:0)

我通过将新的镶木地板jar位置添加到环境变量' HADOOP_CLASSPATH'来解决了这个问题。在环境或.profile或.bashrc文件

export HADOOP_CLASSPATH = / var / lib / hive / parquet-hadoop-bundle-1.9.0.jar:$ HADOOP_CLASSPATH

运行以下命令以获取配置单元命令位置

which hive

打开' hive'文件在/ usr / bin /(您的蜂巢位置)

vi /usr/bin/hive

您应该看到类似下面的内容。

备份hive文件,并在exec之前的末尾为HADOOP_CLASSPATH添加一个echo命令,如下所示。

<强>蜂房

#!/bin/bash

if [ -d "/usr/hdp/2.5.0.0-1245/atlas/hook/hive" ]; then
 if [ -z "${HADOOP_CLASSPATH}" ]; then
  export HADOOP_CLASSPATH=/usr/hdp/2.5.0.0-1245/atlas/hook/hive/*
 else
  export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/usr/hdp/2.5.0.0-1245/atlas/hook/hive/*
 fi
fi

...

if [ -z "${HADOOP_CLASSPATH}" ]; then
 export HADOOP_CLASSPATH=${HCATALOG_JAR_PATH}
else
 export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${HCATALOG_JAR_PATH}
fi

echo&#34; Classpath = $ HADOOP_CLASSPATH&#34;

exec "${HIVE_HOME}/bin/hive.distro" "$@"

运行hive命令以显示类路径。

一旦我们获得了实际的类路径,我们就知道在哪里添加新的jar文件以优先于旧的拼花瓶。

在这种情况下,如果我们设置HADOOP_CLASSPATH,则hive的类路径将以HADOOP_CLASSPATH中的值为前缀。

因此,在新的拼花瓶中添加HADOOP_CLASSPATH值可以解决问题。

我不知道这是否是正确的解决方案,但它的工作原理。