2016-04-12 14 views
2

Java (Hadoop2) kullanılarak cassandra bağlanmaya çalışıyorum ama aşağıdaki hatayıCassandra bağlantı kurulamıyor: java.lang.NoSuchMethodError: com.google.common.util.concurrent.Futures.withFallback

atıyor
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) 
  • cassandra ortamı ayrıntıları inceleyin :: 127.0.0.1:9042 de test Kümesi bağlantılı

    • .
    • [cqlsh 5.0.1 | Cassandra 2.2.5 | CQL spec 3.3.1 | Ana protokol v4]
  • Kavanozlar kullanıyorum ::

    • cassandra-sürücü çekirdek 3.0.0.jar
    • guava-19.0.jar
    • netty-all- 4.1.0.CR7.jar

denedim diğer kavanozları (guava> = 16.01, netty-all-4,0 ..., cassandra-sürücü çekirdek-2.2.0). ama her zaman az ya da çok benzer bir hata atıyor.

bağlantı kurmak için kullanılacak kod parçacığı aşağıya bakın:

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(); 

    } 

Ben çünkü bazı versiyonu çatışma olabileceğini düşünüyorum, ama doğru sürümünü bulamadı. Diğer benzer iletileri kontrol ettiniz ve çözümleri denediniz (farklı kavanozlar kullanarak) ancak sorunu çözemediler Herhangi bir yardım çok takdir edilecektir.

+0

Kullanmakta olduğunuz yapı aracını (örn. Maven), yağ küpü oluşturuyor musunuz ve YARN kullanıyor musunuz, hadoop sürümü, Cassandra versiyonu gibi daha fazla bilgi verir misiniz? –

+0

Futures.withFallback, Guava 14.0'da tanıtıldı. Hadoop işleriniz daha eski bir sürüm kullanıyor olmalıdır. – adutra

cevap

0

Evet. Haklısınız. Bu sorun, sürüm çakışması nedeniyle oluşur. guava Kavanoz'u kullanmanızı ve diğer gereksiz Kavanozları kullanmanızı tavsiye edeceğim. Ayrıca lütfen this answer'a bir göz atın, size yardımcı olabilir.

+0

Hadoop Sürüm: Hadoop 2.5.0-cdh5.3.8, Cassandra sürümü: [cqlsh 5.0.1 | Cassandra 2.2.5 | CQL spec 3.3.1 | Yerel protokol v4]. Kümemde 8 düğüm var. Cassandra'yı sadece düğümden birine kurdum (bağımsız), yapılandırılmamış. Aslında kassandra'yı kümelemede yapılandırmam gerekip gerekmediğinden emin değilim, bu yüzden java kavanozunu 'hadoop jar jarname classname' –

+0

kullanarak tüm jarları başvurulan kitaplıkta sağladım, sonra jar'ı oluşturdum ve belirli düğüm. 'Java-jar jarname' komutunu kullanarak çalıştırdığımda, şimdi çalışıyor. Ama 'hadoop jar jarname classname' kullanarak çalıştırmaya çalışırken istisna atıyor. –

+0

Gereksiz kavanoz kaldırdınız mı? –

İlgili konular