2017-01-05 13 views
0

Мы пытаемся запустить простую запись/sacn из Accumulo (клиент jar 1.5.0) в автономной основной программе Java (Maven shade исполняемый файл), как показано ниже в мастер AWS EC2 (как описано ниже), используя замазкуAccuulo scan/write не работает в автономной основной программе Java в AWS EC2 master, используя Cloudera CDH 5.8.2

public class AccumuloQueryApp { 

     private static final Logger logger = LoggerFactory.getLogger(AccumuloQueryApp.class); 

     public static final String INSTANCE = "accumulo"; // miniInstance 
     public static final String ZOOKEEPERS = "ip-x-x-x-100:2181"; //localhost:28076 

     private static Connector conn; 

     static { 
     // Accumulo 
     Instance instance = new ZooKeeperInstance(INSTANCE, ZOOKEEPERS); 
     try { 
      conn = instance.getConnector("root", new PasswordToken("xxx")); 
     } catch (Exception e) { 
      logger.error("Connection", e); 
     } 
     } 

     public static void main(String[] args) throws TableNotFoundException, AccumuloException, AccumuloSecurityException, TableExistsException { 
     System.out.println("connection with : " + conn.whoami()); 

     BatchWriter writer = conn.createBatchWriter("test", ofBatchWriter()); 

     for (int i = 0; i < 10; i++) { 
      Mutation m1 = new Mutation(String.valueOf(i)); 
      m1.put("personal_info", "first_name", String.valueOf(i)); 
      m1.put("personal_info", "last_name", String.valueOf(i)); 
      m1.put("personal_info", "phone", "983065281" + i % 2); 
      m1.put("personal_info", "email", String.valueOf(i)); 
      m1.put("personal_info", "date_of_birth", String.valueOf(i)); 
      m1.put("department_info", "id", String.valueOf(i)); 
      m1.put("department_info", "short_name", String.valueOf(i)); 
      m1.put("department_info", "full_name", String.valueOf(i)); 
      m1.put("organization_info", "id", String.valueOf(i)); 
      m1.put("organization_info", "short_name", String.valueOf(i)); 
      m1.put("organization_info", "full_name", String.valueOf(i)); 

      writer.addMutation(m1); 
     } 
     writer.close(); 

     System.out.println("Writing complete ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"); 

     Scanner scanner = conn.createScanner("test", new Authorizations()); 
     System.out.println("Step 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"); 
     scanner.setRange(new Range("3", "7")); 
     System.out.println("Step 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"); 
     scanner.forEach(e -> System.out.println("Key: " + e.getKey() + ", Value: " + e.getValue())); 
     System.out.println("Step 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"); 
     scanner.close(); 
     } 

     public static BatchWriterConfig ofBatchWriter() { 
     //Batch Writer Properties 
     final int MAX_LATENCY = 1; 
     final int MAX_MEMORY = 10000000; 
     final int MAX_WRITE_THREADS = 10; 
     final int TIMEOUT = 10; 

     BatchWriterConfig config = new BatchWriterConfig(); 
     config.setMaxLatency(MAX_LATENCY, TimeUnit.MINUTES); 
     config.setMaxMemory(MAX_MEMORY); 
     config.setMaxWriteThreads(MAX_WRITE_THREADS); 
     config.setTimeout(TIMEOUT, TimeUnit.MINUTES); 

     return config; 
     } 
    } 

Connection правильно установлен, но создавая BatchWriter он получает сообщение об ошибке, и он пытается в цикле с той же ошибкой

[impl.ThriftScanner] DEBUG: Error getting transport to ip-x-x-x-100:10011 : NotServingTabletException(extent:TKeyExtent(table:21 30, endRow:21 30 3C, prevEndRow:null)) 

Когда мы запустим тот же код (запись в Accumulo и чтение из Accumulo) ins ide Spark и подчиняться кластеру YANK, он работает отлично. Мы изо всех сил пытаемся понять это, но понятия не имеем. См. Окружающую среду, как описано ниже.

Cloudera CDH 5.8.2 на AWS environmentemnts (4 экземпляра EC2 как один мастер и 3 ребенка).

Рассмотрим частные IP-адреса, как

  1. Mater: xxx100
  2. Child1: xxx101
  3. Child2: xxx102
  4. Child3: xxx103

Мы havethe follwing установка в CDH

Cluster (CDH 5.8.2)

  1. Accumulo 1,6 (Tracer не установлен, Garbage Collector в ребенка2, магистр Master, монитор в child3, планшетный сервер в Master)
  2. Hbase
  3. HDFS (мастер как имя узла, все 3 ребенка, как DataNode)
  4. Кафки
  5. Спарк
  6. ПРЯЖИ (MR2 в комплекте)
  7. Zookeeper

ответ

1

Хм, очень любопытно, что он работает с Spark-on-YARN, но как обычное приложение Java. Обычно это наоборот :)

Я бы удостоверился, что JARs на пути к классам автономного java-приложения соответствуют JAR-адресам, используемым заданием Spark-on-YARN, а также классу классов сервера Accumulo.

Если это не поможет, попробуйте увеличить уровень log4j до DEBUG или TRACE и посмотреть, не выкидывает ли вас что-либо. Если вам трудно понять, что говорит журнал, не стесняйтесь отправлять электронное письмо по адресу [email protected], и у вас определенно будет больше внимания к проблеме.

+0

Спасибо вам за советы! Я могу запустить это, когда я помещал жир Jar в определенную папку, упомянутую в документации Accumulo :) –