ClassNotFoundException при отправке задания yamr в удаленный кластер

1

У меня есть псевдораспределенный кластер, который работает как контейнер докеров

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 не делает различий.

  • 0
    Как вы упаковываете и используете свой Jar? Пробовали ли вы запускать задания, как показано в их разделе тестирования github.com/sequenceiq/docker-hadoop-ubuntu
  • 0
    @ Упио, да, я пробовал тестировать задания, и просто запустил эту работу как jar внутри контейнера - все хорошо :(
Теги:
docker
hadoop

1 ответ

0
Лучший ответ

Моя ошибка, я запускал скрипт, не упаковывая его в jar (из IDE), поэтому метод getJarByClas() не имеет смысла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню