2014-12-01 2 views
0

Эта программа создает sstables, которые будут использоваться вместе с sstableloader в cassandra. Но, когда я запускаю эту программу, она дает мне эту ошибку:При создании sstable в Cassandra я получаю ошибку «Не могу найти файл yaml»

Не удается найти cassandra.yaml Ошибка фатальной конфигурации; не удалось запустить сервер. См. Журнал для stacktrace.

Я запускаю Apache Cassandra v 2.1.2 на 32-разрядной машине ubuntu 12.04. Я нашел правдоподобное решение на сайте datastax, link here, но я не могу выполнить точное решение

У кого-нибудь есть идея, что делать дальше?

package com.cassandra; 

    import static org.apache.cassandra.utils.ByteBufferUtil.bytes; 
    import static org.apache.cassandra.utils.UUIDGen.decompose; 

    import java.io.BufferedReader; 
    import java.io.File; 
    import java.io.FileReader; 
    import java.nio.ByteBuffer; 
    import java.util.ArrayList; 
    import java.util.List; 
    import java.util.UUID; 

    import org.apache.cassandra.db.marshal.AbstractType; 
    import org.apache.cassandra.db.marshal.AsciiType; 
    import org.apache.cassandra.db.marshal.CompositeType; 
    import org.apache.cassandra.db.marshal.CompositeType.Builder; 
    import org.apache.cassandra.db.marshal.UUIDType; 
    import org.apache.cassandra.dht.Murmur3Partitioner; 
    import org.apache.cassandra.io.sstable.SSTableSimpleUnsortedWriter; 

    public class SStableBuilder { 

      static String csvfilename = "records.csv"; 

      public static void main(String[] args) { 

        try { 
         buildSStables(); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
      } 

      public static void buildSStables() throws Exception { 

        String keyspace = "samplekey"; 
        String table = "users"; 
        File directory = new File(keyspace + "/" + table); 

        if (!directory.exists()) { 
         directory.mkdirs(); 
       } 

        List<AbstractType<?>> compositeColumnValues = new ArrayList<AbstractType<?>>(); 
        compositeColumnValues.add(AsciiType.instance); 
        compositeColumnValues.add(AsciiType.instance); 
        CompositeType compositeColumn = CompositeType.getInstance(compositeColumnValues); 
        System.out.println("yahahahaha"); 
        SSTableSimpleUnsortedWriter bulkWriter = new SSTableSimpleUnsortedWriter(
           directory, new Murmur3Partitioner(), keyspace, table, 
           compositeColumn, null, 64); 

        // Create a single timestamp for each insert 
        long timestamp = System.currentTimeMillis() * 1000; 

        BufferedReader reader = new BufferedReader(new FileReader(csvfilename)); 
        String line; 
        int lineNumber = 1; 
        CsvEntry entry = new CsvEntry(); 

        while ((line = reader.readLine()) != null) { 

         if (entry.parse(line, lineNumber)) { 

           ByteBuffer uuid = ByteBuffer.wrap(decompose(entry.key)); 
           bulkWriter.newRow(uuid); 

           Builder builder = compositeColumn.builder(); 
           builder.add(bytes(entry.firstname)); 
           builder.add(bytes("firstname")); 
           bulkWriter.addColumn(builder.build(), bytes(entry.firstname), timestamp); 

           builder = compositeColumn.builder(); 
           builder.add(bytes(entry.firstname)); 
           builder.add(bytes("lastname")); 
           bulkWriter.addColumn(builder.build(), bytes(entry.lastname), timestamp); 

           builder = compositeColumn.builder(); 
           builder.add(bytes(entry.firstname)); 
           builder.add(bytes("password")); 
           bulkWriter.addColumn(builder.build(), bytes(entry.password), timestamp); 

           builder = compositeColumn.builder(); 
           builder.add(bytes(entry.firstname)); 
           builder.add(bytes("age")); 
           bulkWriter.addColumn(builder.build(), bytes(String.valueOf(entry.age)), timestamp); 

           builder = compositeColumn.builder(); 
           builder.add(bytes(entry.firstname)); 
           builder.add(bytes("email")); 
           bulkWriter.addColumn(builder.build(), bytes(entry.email), timestamp); 



         } 
         lineNumber++; 
        } 

        reader.close(); 
        System.out.println("Success"); 
        bulkWriter.close(); 
        System.exit(0); 
      } 

      static class CsvEntry { 
        UUID key; 
        String firstname; 
        String lastname; 
        String password; 
        long age; 
        String email; 

        boolean parse(String line, int lineNumber) { 
         // Ghetto csv parsing 
         String[] columns = line.split(","); 
         if (columns.length != 6) { 
           System.out.println(String.format(
              "Invalid input '%s' at line %d of %s", line, 
              lineNumber, csvfilename)); 
           return false; 
         } 
         try { 
           key = UUID.fromString(columns[0].trim()); 
           firstname = columns[1].trim(); 
           lastname = columns[2].trim(); 
           password = columns[3].trim(); 
           age = Long.parseLong(columns[4].trim()); 
           email = columns[5].trim(); 
           return true; 
         } catch (NumberFormatException e) { 
           System.out.println(String.format(
              "Invalid number in input '%s' at line %d of %s", line, 
              lineNumber, csvfilename)); 
           return false; 
         } 
        } 
      } 

    } 

ответ

0

Этот конфиг загружается из URL, указанного системным свойством 'cassandra.config'. Вы можете установить это, указывая на ваш файл.

Если вы этого не задали, он ищет по умолчанию «cassandra.yaml» в качестве ресурса загрузчика класса. Вы можете сделать это успешно, убедившись, что ваш CLASSPATH содержит путь к каталогу с cassandra.yaml в нем.

https://github.com/apache/cassandra/blob/0ce9abd78c8712ad4fba28734214b18f617a2aac/src/java/org/apache/cassandra/config/YamlConfigurationLoader.java#L55-L68

+0

Я имел системное свойство 'cassandra.config' к месту YAML файла. Теперь он начал давать еще несколько ошибок, говоря, что это недопустимый файл yaml. Он не может определить некоторые переменные, упомянутые в файле yaml. – nEO

Смежные вопросы