2016-04-12 5 views
2

私は、Java(Hadoop2)を使用してカサンドラに接続しようとしていますが、それは以下のエラーカサンドラに接続できません:java.lang.NoSuchMethodErrorの:com.google.common.util.concurrent.Futures.withFallback

を投げています
Connecting to IP Address 127.0.0.1:9042... 
16/04/12 10:35:13 INFO core.NettyUtil: Found Netty's native epoll  transport in the classpath, using it 
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.withFallback(Lcom/google/common /util/concurrent/ListenableFuture;Lcom/google/common/util/concurrent /FutureFallback;Ljava/util/concurrent/Executor;)Lcom/google/common/util/concurrent/ListenableFuture; 
    at com.datastax.driver.core.Connection.initAsync(Connection.java:177) 
    at com.datastax.driver.core.Connection$Factory.open(Connection.java:731) 
    at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:251) 
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:199) 
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77) 
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1414) 
    at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:393) 
    at cassandra.CassandraConnector.connect(CassandraConnector.java:42) 
    at cassandra.Main.main(Main.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 
  • カサンドラ環境の詳細をご覧ください::

    127.0.0.1:9042でテストクラスタに接続され
    • [cqlsh 5.0.1 |カサンドラ2.2.5 | CQL仕様3.3.1 |ネイティブプロトコルV4]私は使用しています
  • ジャー::

    • カサンドラ・ドライバ・コア-3.0.0.jar
    • グアバ-19.0.jar
    • ネッティー-オール4.1.0.CR7.jar

私は...他のjarファイル(グアバ> = 16.01、ネッティー-すべて-4.0を試してみました、 cassandra-driver-core-2.2.0)である。常にそれは多かれ少なかれ似たようなエラーを投げている。

接続を確立するために使用されるコードスニペットの下に参照してください。

public void connect(final String node, final int port) 

    { 

     this.cluster = Cluster.builder().addContactPoint(node).withPort(port) 
      .build(); 

     final Metadata metadata = cluster.getMetadata(); 
     ProtocolVersion myCurrentVersion = cluster.getConfiguration() 
      .getProtocolOptions() 
      .getProtocolVersion(); 
     System.out.println(myCurrentVersion); 

     out.printf("Connected to cluster: %s\n", metadata.getClusterName()); 

     for (final Host host : metadata.getAllHosts()) 

      { 

      out.printf("Datacenter: %s; Host: %s; Rack: %s\n", 

      host.getDatacenter(), host.getAddress(), host.getRack()); 

      } 

     session = cluster.connect(); 

    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

      final CassandraConnector client = new CassandraConnector(); 

      final String ipAddress = args.length > 0 ? args[0] : "127.0.0.1"; 

      final int port = args.length > 1 ? Integer.parseInt(args[1]) : 9042; 

      out.println("Connecting to IP Address " + ipAddress + ":" + port + "..."); 

      client.connect(ipAddress, port); 

      client.close(); 

    } 

私はそれがあるため、いくつかのバージョンの競合があるかもしれないと思いますが、正しいバージョンを見つけることができません。 他の同様の投稿をチェックして、解決策を試しました(別のジャーを使用しています)が、問題を解決できませんでした 何か助けが高く評価されます。

+0

あなたが使用しているビルドツール(例えば、maven)のような、hadoopのバージョン、Cassandraのバージョンのような、より多くの情報を与えてください。太い瓶を作り、YARNを使用していますか? –

+0

Futures.withFallbackはGuava 14.0で導入されました。 Hadoopジョブは古いバージョンを使用している必要があります。 – adutra

答えて

0

はい。正しくありません。この問題は、バージョンの競合が原因で発生します。 guavaを使用することをお勧めします。他の不要なJARを取り除きます。 this answerもご覧ください。

+0

Hadoopバージョン:Hadoop 2.5.0-cdh5.3.8、Cassandraバージョン:[cqlsh 5.0.1 |カサンドラ2.2.5 | CQL仕様3.3.1 |ネイティブプロトコルv4]。私のクラスタには8つのノードがあります。私はノード(スタンドアロン)のうちの1つにのみcassandraをインストールしましたが、設定されていません。実際に私は、私が 'hadoop jar jarname classname'を使ってjava jarを実行できるように、クラスタ内でcassandraを設定する必要があるかどうかはわかりません。 –

+0

参照されたライブラリのすべてのjarファイルをjarファイルとして作成し、特定のノード。コマンド 'java -jar jarname'を使用して実行すると、現在動作しています。しかし、私は 'hadoop jar jarname classname'を使って実行しようとしているときに例外をスローしています。 –

+0

不要なjarファイルを削除しましたか? –