【问题标题】:Hive Adding JAR Not WorkingHive 添加 JAR 不起作用
【发布时间】:2018-05-22 18:46:29
【问题描述】:

我正在尝试导入包含引用字段的文件。我发现了 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:

hive> 添加 JAR /tmp/csv-serde-1.1.2-0.11.0-all.jar;

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

然后我从 Ambari 中返回 Hive 视图,当我在表上运行任何类型的操作时,我得到:

H110 无法提交声明。编译语句时出错: 失败:运行时异常 MetaException(消息:java.lang.ClassNotFoundException 类 com.bizo.hive.serde.csv.CSVSerde 未找到)[ERROR_STATUS]

当我尝试通过 ODBC 驱动器从 MS SQL 查询此内容时,我也遇到了同样的错误。

我在这个论坛上查看了多篇关于添加某某 .jar 以及这个和那个到的帖子:

/usr/lib/hive

该目录不会在我的集群上以基本操作系统级别或 HDFS 文件系统存在。我应该将 .jar 文件放在哪里以及如何放置,以便我可以在 hive CLI 之外查询我的表?

【问题讨论】:

    标签: hive


    【解决方案1】:

    您需要将 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;
    

    这应该可以让您查询数据。

    【讨论】:

      【解决方案2】:

      尝试完整路径,例如:

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

      如果由于某种原因,在 Ambari 查看器中运行的配置不同并且未定义默认 FS,那么这可能会起作用。

      您提到的另一个选项 - 我相信您将 jar 放在哪个目录中并不重要,只要它位于运行配置单元服务器的同一主机上,并且 hive-site.xml 指向它。选择文件系统上的任何位置(例如,/home/myname/jars)在 hive 服务器机器上编辑 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 目录中。你也可以试试,但要确保先重启 hive。

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

      【讨论】:

        【解决方案3】:

        如果 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;
        

        ...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-01-22
          • 2021-02-05
          • 1970-01-01
          • 1970-01-01
          • 2013-09-25
          • 1970-01-01
          • 2020-10-01
          相关资源
          最近更新 更多