Hive添加JAR无法正常工作

时间:2015-09-23 13:13:42

标签: hive

我正在尝试导入包含引用字段的文件。我发现了csv-serde JAR并试图用它来取得最小的成功。

我从以下位置下载了JAR: https://github.com/ogrodnek/csv-serde

我在/ tmp目录中添加到我的HDFS系统。

当我尝试在Ambari中使用View to HIVE时,我设置了以下内容:

ADD JAR /tmp/csv-serde-1.1.2-0.11.0-all.jar;

这会引发文件不存在的错误:

  

H110无法提交声明。处理语句时出错:   /tmp/csv-serde-1.1.2-0.11.0-all.jar不存在[ERROR_STATUS]

然后我从终端呼叫hive尝试:

  

蜂房> ADD JAR /tmp/csv-serde-1.1.2-0.11.0-all.jar;

这成功了。然后我创建我的EXTERNAL TABLE,然后选择一些字段以确保它在CLI配置单元环境中是好的并且一切正常。

然后我从Ambari内部回到Hive View,当我在桌子上运行任何类型的操作时,我得到:

  

H110无法提交声明。编译语句时出错:   FAILED:RuntimeException   MetaException(消息:java.lang.ClassNotFoundException类   找不到com.bizo.hive.serde.csv.CSVSerde)[ERROR_STATUS]

当我尝试通过ODBC驱动器从MS SQL查询时,我也会收到同样的错误。

我已经在这个论坛上看了很多帖子,关于添加所谓的.jar以及这个和那个:

  

/ usr / lib中/蜂巢

在基本操作系统级别或HDFS文件系统中,该目录不会在我的群集上退出。我应该在何处以及如何将.jar文件放在hive CLI之外查询我的表格?

3 个答案:

答案 0 :(得分:0)

您需要将jar放在HDFS中的某个位置。许多人在HDFS中使用/ tmp,就像使用本地FS一样。例如:

hdfs dfs -put /tmp/csv-serde-1.1.2-0.11.0-all.jar /tmp

然后当你在Hive View中时,你会

ADD JAR hdfs://$HOSTNAME:$PORTNUM/tmp/csv-serde-1.1.2-0.11.0-all.jar;

这应该有效并允许您查询数据。

答案 1 :(得分:0)

尝试完整路径,例如:

ADD JAR hdfs://<host>/<port>/tmp/csv-serde-1.1.2-0.11.0-all.jar;

如果出于某种原因,Ambari查看器中正在播放的配置不同,并且未定义默认FS,则可以使用。

您提到的另一个选项 - 我相信只要它位于运行配置单元服务器的同一主机上,并且hive-site.xml指向它,那么将jar放入哪个目录并不重要。选择文件系统上的任何位置(例如,/ home / myname / jars)在配置单元服务器计算机上编辑hive-site.xml

<property>
  <name>hive.aux.jars.path</name>
  <value>/home/myname/jars</value>
</property>

并将csv-serde-1.1.2-0.11.0-all.jar复制到/ home / myname / jars(在本地fs上,而不是在hdfs上)。重启配置单元并尝试。在这种方法中,您根本不需要使用ADD JAR - jar将自动包含在hive服务器类路径中。

我读到但从未尝试过的另一个选项是将jar放在hive lib目录中。您也可以尝试,但请务必先重新启动配置单元。

关于ADD JAR的注意事项:ADD JAR命令和稍后使用它的查询必须在同一会话中执行。 Hive CLI中的命令位于单个会话中,因此可以正常运行。我不知道Ambari Hive视图如何管理会话。

答案 2 :(得分:0)

例如,如果jar存在于HDFS中:

hive>add jar hdfs:///tmp/csv-serde-1.1.2-0.11.0-all.jar;

确实返回了

converting to local hdfs:///tmp/csv-serde-1.1.2-0.11.0-all.jar
Added [/tmp/d6528831-4f3c-41e4-a4cf-121a63796a0f_resources/csv-serde-1.1.2-0.11.0-all.jar] to class path
Added resources: [hdfs:///tmp/csv-serde-1.1.2-0.11.0-all.jar]

示例,如果jar存在于本地文件系统中

hive>add jar file:///tmp/csv-serde-1.1.2-0.11.0-all.jar;

...