У меня есть псевдораспределенный кластер, который работает как контейнер докеров
docker run -d -p 50070:50070 -p 9000:9000 -p 8032:8032 -p 8088:8088 --name had00p sequenceiq/hadoop-docker:2.6.0 /etc/bootstrap.sh -d
Его конфигурация здесь: https://github.com/sequenceiq/docker-hadoop-ubuntu/
Я могу успешно справиться с hdfs, получить доступ к ui, но застрял с подачей задания из java, я получил
КлассNotFoundException: класс com.github.mikhailerofeev.hadoop.Script $ MyMapper не найден
Здесь пример кода:
@Override
public Configuration getConf() {
String host = BOOT_TO_DOCKER_IP;
int nameNodeHdfsPort = 9000;
int yarnPort = 8032;
String yarnAddr = host + ":" + yarnPort;
String hdfsAddr = "hdfs://" + host + ":" + nameNodeHdfsPort + "/";
Configuration configutation = new Configuration();
configutation.set("yarn.resourcemanager.address", yarnAddr);
configutation.set("mapreduce.framework.name", "yarn");
configutation.set("fs.default.name", hdfsAddr);
return configutation;
}
private void simpleMr(String inputPath) throws IOException {
JobConf conf = new JobConf(getConf(), Script.class);
conf.setJobName("fun");
conf.setJarByClass(MyMapper.class);
conf.setMapperClass(MyMapper.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, inputPath);
String tmpMRreturn = "/user/m-erofeev/map-test.data";
Path returnPath = new Path(tmpMRreturn);
FileOutputFormat.setOutputPath(conf, returnPath);
AccessUtils.execAsRootUnsafe(() -> {
FileSystem fs = FileSystem.get(getConf());
if (fs.exists(returnPath)) {
fs.delete(returnPath, true);
}
});
AccessUtils.execAsRootUnsafe(() -> {
RunningJob runningJob = JobClient.runJob(conf);
runningJob.waitForCompletion();
});
}
Здесь AccessUtils.execAsRootUnsafe - обертывание вокруг UserGroupInformation, оно отлично работает с hdf.
Где я ошибаюсь?
upd: Я понимаю, что он должен потерпеть неудачу из-за использования java 7 java 7, но я java 8 и планирую проверить это позже. Но я ожидал другого сообщения об ошибке в этом случае... Обновление upd2 к java7 не делает различий.
Моя ошибка, я запускал скрипт, не упаковывая его в jar (из IDE), поэтому метод getJarByClas() не имеет смысла.