5

我试图建立一个 Maven 项目,该项目将包含我想在 Hive 查询中使用的用户定义函数 (UDF)。我从一个不包含源文件的 Maven 项目和以下 POM 开始:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>exp</groupId>
    <artifactId>HiveUdfTestProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>0.14.0</version>
        </dependency>
    </dependencies>
</project>

当我尝试构建项目时,出现以下错误:

未能在项目 HiveUdfTestProject 上执行目标:无法解析项目 exp:HiveUdfTestProject:jar:1.0-SNAPSHOT 的依赖项:无法解析以下工件:org.apache.calcite:calcite-core:jar:0.9.2-incubating- SNAPSHOT, org.apache.calcite:calcite-avatica:jar:0.9.2-incubating-SNAPSHOT: 找不到工件 org.apache.calcite:calcite-core:jar:0.9.2-incubating-SNAPSHOT -> [帮助 1 ]

4

3 回答 3

3

我在 maven 中央存储库中找到了 hive-exec 0.14.0 依赖项所需的 calcite -core-incubating jar (但不是 incubating-snapshot 版本)。

从 maven central 添加 calcite-core 消除了原来的错误,并引入了我在 ConJars 上找到的新的缺失依赖项“pentaho-aggdesigner-algorithm

添加conjars 存储库和 pentaho 依赖项使新的缺失依赖项出现“org.apache.calcite:calcite-avatica:jar:0.9.2-incubating-SNAPSHOT”,其孵化(但不是快照)依赖项在 maven 中央存储库中可用.

将 calcite-avatica 依赖添加到 POM 中,最终成功构建了空项目。

这是制作用于 Hive UDF 构建的项目所需的最终 POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>exp</groupId>
    <artifactId>HiveUdfTestProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <repositories>
        <repository>
            <id>conjars.org</id>
            <url>http://conjars.org/repo</url>
        </repository>
    </repositories>
    <dependencies>
        <!-- From Maven Central -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>0.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.calcite</groupId>
            <artifactId>calcite-core</artifactId>
            <version>0.9.2-incubating</version>
        </dependency>
        <dependency>
            <groupId>org.apache.calcite</groupId>
            <artifactId>calcite-avatica</artifactId>
            <version>0.9.2-incubating</version>
        </dependency>

        <!-- From conjars -->
        <dependency>
            <groupId>org.pentaho</groupId>
            <artifactId>pentaho-aggdesigner-algorithm</artifactId>
            <version>5.1.3-jhyde</version>
        </dependency>
    </dependencies>
</project>

建立空项目后,我尝试将 POM 设置集成到更大的现有 Maven 项目中,并看到有关 calcite-core 的错误,专门寻找快照版本。为了解决这个问题,我将 hive-exec 依赖项更改为如下所示:

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>0.14.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.calcite</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
于 2014-12-30T17:45:01.730 回答
2

我明确地将 calcite-core 和 calcite-avatica 项目包含为依赖项,并且我的项目(其中还包括 Hive 14 依赖项)不再因“工件无法解析错误”而失败

   <dependency>
           <groupId>org.apache.calcite</groupId>
           <artifactId>calcite-core</artifactId>
           <version>1.0.0-incubating</version>
   </dependency>
   <dependency>
           <groupId>org.apache.calcite</groupId>
           <artifactId>calcite-avatica</artifactId>
           <version>1.0.0-incubating</version>
   </dependency>

据我所知,这是 Hive 14 的一个未解决问题。有关更多信息,请参阅https://issues.apache.org/jira/browse/HIVE-8906

于 2015-03-06T20:37:26.393 回答
0

我通过将以下依赖项添加到 /ql/pom.xml org.pentaho pentaho-aggdesigner-algorithm 5.1.3-jhyde 解决了同样的问题

<dependency>
  <groupId>eigenbase</groupId>
  <artifactId>eigenbase-properties</artifactId>
  <version>1.1.4</version>
</dependency>

<dependency>
  <groupId>net.hydromatic</groupId>
  <artifactId>linq4j</artifactId>
  <version>0.4</version>
</dependency>

和下面的存储库到 /pom.xml 在存储库下

<repository>
      <id>conjars</id>
      <name>Concurrent Conjars repository</name>
      <url>http://conjars.org/repo</url>
      <layout>default</layout>
    </repository>
于 2015-08-25T17:12:05.350 回答