私はHive UDFとUDAFを使って作業しようとしていますが、今のところ、コマンドラインからmavenを使ってかなりうまく管理しています本質的に非常によく知っている誰かによって非常にうまくセットアップされているVMで。私はJavaに新しい(プロジェクトではなく、あまり言語)が、私は少なくとも私の現在の問題が何であるか見ることができます。私が知りませんが、それが起こっている理由とそれを修正する方法です。パッケージorg.apache.hadoop.hive.ql.exec.vectorが存在しません
そう...
私の問題は
mvn install
コンパイラを実行すると、それはすべてのクラスを見つけることができます
/org/apache/hadoop/hive/ql/exec
過ぎ任意のクラスを見つけることができない場合は、何らかの理由ということです'exec'フォルダには入れられますが、 'exec'にネストされたサブフォルダには何もありません。なぜこれが当てはまるのか分かりません。ここに私のPOMファイルがあります。
<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/maven-v4_0_0.xsd">
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.matthewrathbone.example.RawMapreduce</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<modelVersion>4.0.0</modelVersion>
<groupId>com.matthewrathbone.example</groupId>
<artifactId>hive-extensions</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>hive-extensions</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.0.0-mr1-cdh4.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>0.10.0-cdh4.3.1</version>
<scope>provided</scope>
</dependency>
<!-- TEST DEPENDENCIES -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-test</artifactId>
<version>2.0.0-mr1-cdh4.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
</project>
私が得る多くのエラーの1つの例は、タイトルにあります。 'ベクトル'は/org/apache/hadoop/hive/ql/exec
にあるフォルダーです。
私の知る限りでは、hive-exec.jar
ファイルはPOMファイルに依存関係として表示されるため、コンパイラがその中に含まれるすべてのクラスを見つけるのが難しい理由はわかりません(いくつか、前述のように)。
私がしようとしていることは、組み込みのUDAFを自分自身の一時関数として組み込んで、SELECT文内のサブクエリに対するHiveの制限をバイパスできるようにすることです。だから、
Mavenアセンブリで構築されたJARから 'com.matthewrbb.example.RawMapreduce'を実行していますか?もしそうなら、 'hive-exec'への依存の範囲が' '提供されているので、' 'hive-exec'がアセンブルされたJARにあるのかどうかわかりません。この場合、 ''を削除し、 'hadoop-client'を削除してみてください。 –
@AlexandreDupriez、それについてのダイスはありません。 –
一番上に私自身のパッケージ名を作成しました。mvn-installを実行すると、そのパッケージは結果の.jarファイルに作成されます。つまり、私は 'hive-extensions-1.0-SNAPSHOT.jar'を使用しています –