2014-06-13 6 views
1

저는 Cassandra를 처음 사용하고 Eclipse에서 아래 프로그램을 사용하여 열과 수퍼 패밀리를 만들려고합니다 :스레드 "main"의 예외 java.lang.NoClassDefFoundError : org/apache/thrift/transport/TTransportException

내가 클래스 경로에있는 모든 헥터의 API를 항아리를 포함하고 난이 오류 원인을 모르는

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/transport/TTransportException 
    at me.prettyprint.cassandra.connection.factory.HThriftClientFactoryImpl.createClient(HThriftClientFactoryImpl.java:28) 
    at me.prettyprint.cassandra.connection.ConcurrentHClientPool.createClient(ConcurrentHClientPool.java:147) 
    at me.prettyprint.cassandra.connection.ConcurrentHClientPool.<init>(ConcurrentHClientPool.java:53) 
    at me.prettyprint.cassandra.connection.RoundRobinBalancingPolicy.createConnection(RoundRobinBalancingPolicy.java:67) 
    at me.prettyprint.cassandra.connection.HConnectionManager.<init>(HConnectionManager.java:67) 
    at me.prettyprint.cassandra.service.AbstractCluster.<init>(AbstractCluster.java:67) 
    at me.prettyprint.cassandra.service.ThriftCluster.<init>(ThriftCluster.java:21) 
    at me.prettyprint.hector.api.factory.HFactory.createCluster(HFactory.java:197) 
    at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:144) 
    at me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster(HFactory.java:133) 
    at HectorTutorial.main(HectorTutorial.java:27) 
Caused by: java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransportException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

:

import java.util.Arrays; 
import java.util.List; 

import me.prettyprint.cassandra.model.BasicColumnDefinition; 
import me.prettyprint.cassandra.model.BasicColumnFamilyDefinition; 
import me.prettyprint.cassandra.serializers.StringSerializer; 
import me.prettyprint.cassandra.service.ThriftCfDef; 
import me.prettyprint.hector.api.Cluster; 
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition; 
import me.prettyprint.hector.api.ddl.ColumnIndexType; 
import me.prettyprint.hector.api.ddl.ColumnType; 
import me.prettyprint.hector.api.ddl.ComparatorType; 
import me.prettyprint.hector.api.ddl.KeyspaceDefinition; 
import me.prettyprint.hector.api.exceptions.HectorException; 
import me.prettyprint.hector.api.factory.HFactory; 

public class HectorTutorial { 

    private static final String TEST_KEYSPACE = "TestKeyspace"; 
    private static final String TEST_CF= "TestColumnFamily"; 
    private static final String TEST_SUPER= "TestSuperColumn"; 

    private static StringSerializer stringSerializer = StringSerializer.get(); 

    public static void main(String[] args) throws Exception { 

     Cluster cluster = HFactory.getOrCreateCluster("TestCluster", "localhost:9160"); 

     try { 
      if (cluster.describeKeyspace(TEST_KEYSPACE) != null) { 
       cluster.dropKeyspace(TEST_KEYSPACE); 
      } 

      BasicColumnDefinition columnDefinition = new BasicColumnDefinition(); 
      columnDefinition.setName(stringSerializer.toByteBuffer("TestColumn")); 
      columnDefinition.setIndexName("TestColumn_idx "); 
      columnDefinition.setIndexType(ColumnIndexType.KEYS); 
      columnDefinition.setValidationClass(ComparatorType.LONGTYPE.getClassName()); 

      BasicColumnFamilyDefinition columnFamilyDefinition = new BasicColumnFamilyDefinition(); 
      columnFamilyDefinition.setKeyspaceName(TEST_KEYSPACE); 
      columnFamilyDefinition.setName(TEST_CF); 
      columnFamilyDefinition.addColumnDefinition(columnDefinition); 

      BasicColumnFamilyDefinition superCfDefinition = new BasicColumnFamilyDefinition(); 
      superCfDefinition.setKeyspaceName(TEST_KEYSPACE); 
      superCfDefinition.setName(TEST_SUPER); 
      superCfDefinition.setColumnType(ColumnType.SUPER); 

      ColumnFamilyDefinition cfDefStandard = new ThriftCfDef(columnFamilyDefinition); 
      ColumnFamilyDefinition cfDefSuper = new ThriftCfDef(superCfDefinition); 

      KeyspaceDefinition keyspaceDefinition = 
       HFactory.createKeyspaceDefinition(TEST_KEYSPACE , "org.apache.cassandra.locator.SimpleStrategy", 
        1, Arrays.asList(cfDefStandard, cfDefSuper)); 

      cluster.addKeyspace(keyspaceDefinition); 

      /* Below Code show your Keyspace Schema */ 

      List<KeyspaceDefinition> keyspaces = cluster.describeKeyspaces(); 
      for (KeyspaceDefinition kd : keyspaces) { 
       if (kd.getName().equals(TEST_KEYSPACE)) { 
        System.out.println("Name: " +kd.getName()); 
        System.out.println("RF: " +kd.getReplicationFactor()); 
        System.out.println("strategy class: " +kd.getStrategyClass()); 
        List<ColumnFamilyDefinition> cfDefs = kd.getCfDefs(); 
        for (ColumnFamilyDefinition def : cfDefs) { 
         System.out.println(" CF Type: " +def.getColumnType()); 
         System.out.println(" CF Name: " +def.getName()); 
         System.out.println(" CF Metadata: " +def.getColumnMetadata()); 
        }           
       } 
      }       
     } catch (HectorException he) { 
      he.printStackTrace(); 
     } 
     cluster.getConnectionManager().shutdown(); 
    } 
} 

나는 다음과 같은 예외가 프로그램을 실행하려고 . 누군가가 오류의 원인을 설명해 주시겠습니까?

+1

classpath에'libthrift- .jar'이 있습니까? – Ralf

+0

나는 이전에 t을 가지고 있지 않았다. 나는 클래스 패스에 놓았고 이제는 잘 작동한다. –

답변

1

일부 타사 라이브러리가 누락 된 것 같습니다 (이 경우 ThriftTTransportException 클래스를 포함한다고 생각합니다). 필요한 모든 라이브러리를 클래스 경로에도 추가하고 그 라이브러리가 도움이되는지 확인합시다.

0

설정에서 "실행/디버그 구성"을 확인하십시오. 사용중인 "메인 클래스"의 이름을 확인하십시오. 현재 수업의 이름을 선택하려면 클릭하십시오. 대다. 승인.