[英]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.