Мы пытаемся запустить простую запись/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-адреса, как
- Mater: xxx100
- Child1: xxx101
- Child2: xxx102
- Child3: xxx103
Мы havethe follwing установка в CDH
Cluster (CDH 5.8.2)
- Accumulo 1,6 (Tracer не установлен, Garbage Collector в ребенка2, магистр Master, монитор в child3, планшетный сервер в Master)
- Hbase
- HDFS (мастер как имя узла, все 3 ребенка, как DataNode)
- Кафки
- Спарк
- ПРЯЖИ (MR2 в комплекте)
- Zookeeper
Спасибо вам за советы! Я могу запустить это, когда я помещал жир Jar в определенную папку, упомянутую в документации Accumulo :) –