繁体   English   中英

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

[英]How to use a newer version of parquet jar on AWS 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外壳中使用add jar parquet-hive-bundle-1.7.0.jar ,但没有运气,Hive仍使用其捆绑的旧Parquet add jar parquet-hive-bundle-1.7.0.jar

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

但是,我将parquet-hive-bundle-1.7.0.jar到了/usr/lib/hive/lib但是它不起作用,Hive仍使用旧的Parquet jar,无法读取我的Parquet文件。 通常,这种方式适用于Cloudera发行版。

所以我的问题是,镶木地板在哪里?如何用新版本替换?

我通过在环境或.profile或.bashrc文件中的环境变量'HADOOP_CLASSPATH'中添加新的实木复合地板位置来解决了该问题

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

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

which 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

回声“ Classpath = $ HADOOP_CLASSPATH”

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

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

一旦获得了实际的类路径,我们就知道在何处添加新的jar文件,以优先于旧的镶木地板jar。

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

因此,将HADOOP_CLASSPATH值添加到新的实木复合地板罐中可以解决此问题。

我不知道这是否是正确的解决办法,但可以解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM