2017-11-03 14 views
0

私は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の制限をバイパスできるようにすることです。だから、

+0

Mavenアセンブリで構築されたJARから 'com.matthewrbb.example.RawMapreduce'を実行していますか?もしそうなら、 'hive-exec'への依存の範囲が' '提供されているので、' 'hive-exec'がアセンブルされたJARにあるのかどうかわかりません。この場合、 ''を削除し、 'hadoop-client'を削除してみてください。 –

+0

@AlexandreDupriez、それについてのダイスはありません。 –

+0

一番上に私自身のパッケージ名を作成しました。mvn-installを実行すると、そのパッケージは結果の.jarファイルに作成されます。つまり、私は 'hive-extensions-1.0-SNAPSHOT.jar'を使用しています –

答えて

0

、より具体的には、私はいくつかの調整を行い、最終的にそれが判明しているclass VectorizedUDAFs探していたコンパイラにそれを絞り込ん、持っていないの.jar hive-execの私のバージョン....姿を行きます。実際には存在しなかったため、見つけられませんでした。

関連する問題