2014-10-22 3 views
2

У меня Windows 7, Java 8, Maven и Eclipse. Я создал проект Maven и использовал почти тот же код, что и here.Можно ли запускать задания Hadoop (например, образец WordCount) в локальном режиме на Windows без Cygwin?

Это просто простой образец слова. я пытаюсь запустить программу «драйвер» из Eclipse, я обеспечиваю аргументы командной строки (файл входного и выходного каталога) и получить следующее сообщение об ошибке:

Exception in thread "main" java.lang.NullPointerException at 
java.lang.ProcessBuilder.start(ProcessBuilder.java:1012) at 
org.apache.hadoop.util.Shell.runCommand(Shell.java:404)  at 
org.apache.hadoop.util.Shell.run(Shell.java:379) at 
org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589) at 
org.apache.hadoop.util.Shell.execCommand(Shell.java:678) at 
org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at 
org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at 
org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435) at 
org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:277) at 
org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125) at 
org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:344) at 
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1268) at 
org.apache.hadoop.mapreduce.Job$10.run(Job.java:1265) at 
java.security.AccessController.doPrivileged(Native Method) at 
javax.security.auth.Subject.doAs(Subject.java:422) at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) at 
org.apache.hadoop.mapreduce.Job.submit(Job.java:1265) at 
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1286) at 
misc.projects.hadoop.exercises.WordCountDriverApp.main(WordCountDriverApp.java:29) 

неисправной линии (WordCountDriverApp.java:29) содержит команду для запуска задания:

job.waitForCompletion(true)

Я хочу, чтобы заставить его работать, и поэтому я хочу, чтобы понять что-то:

должен ли я предоставить какие-либо HDFS-site.xml, yarn- site.xml, ... все это, если я хочу только локальный режим (без какого-либо кластера)? У меня нет этих файлов конфигурации XML. Насколько я помню, по умолчанию все нормально для локального режима, возможно, я ошибаюсь.

Возможно ли вообще под Windows (для запуска каких-либо заданий Hadoop), или целая вещь Hadoop - это только Linux?

P.S .: Hadoop зависимость является следующее:

<dependency> 
    <groupId>org.apache.hadoop</groupId> 
    <artifactId>hadoop-client</artifactId> 
    <version>2.2.0</version> 
    <scope>provided</scope> 
</dependency> 

ответ

4

Hadoop работает на Windows, это возможно, но вы будете расти белые волосы, если вы попытаетесь вытащить его самостоятельно.

Для начала все операции с файловой системой в Windows Hadoop маршрутизируются либо через NativeIO, если они доступны, либо через winutils, если NativeIO не загружен. В вашем случае это заняло путь winutils. Вы можете сделать NativeIO доступным, если вы проинструктируете Eclipse, где его найти. См. How to add native library to “java.library.path” with Eclipse launch (instead of overriding it), вам нужно добавить местоположение этого контейнера целевого объекта проекта, в котором вы найдете файл hadoop.dll, в котором размещается NativeIO. Но даже после этого вам все равно понадобится wintils для запуска контейнера. Файл winutils.exe будет находиться в том же месте (обычная цель/bin), но код ищет его на основе% HADOOP_HOME%, поэтому вам нужно будет определить , что. И он будет идти вверх. Я намеренно пропустил подробности , как, чтобы настроить все это, потому что я не думаю, что вам нужно, а точнее, вы должны только, если вы понимаете, как это сделать.

Было бы намного проще, если вы возьмете готовое дистрибутив Hadoop для Windows, из которых есть ровно одно: HDP from Hortonworks, загрузите его, установите, настройте, а затем выполните против «кластера», ,

+0

Это не так уж плохо, просто чтобы заставить его работать, достаточно положить 'libwinutils.lib' /' winutils.exe' в 'C: \ hadoop \ bin'.Вам не нужно смешиваться с путями lib в Eclipse. Просто сложно скомпилировать двоичный файл один раз ;-) –

+0

'mvn clean install -DskipTests' должен построить' em fine ... при условии, что установлены VS2010 или VS2012 или Win SDK (один из них). Но, конечно же, для ветки git требуется https://github.com/apache/hadoop в разделе 2.2. слишком плохие они не могут быть получены через распространение mvn ... –

+0

Кстати, есть много ситуаций, когда Win SDK не будет установлен. – user3791111

4
  1. Скачать Hadoop 2.6.0 или 2.7.1 скомпилированные для Windows,
  2. Создать переменную окружения HADOOP_HOME, указывающие на распакованной директории
  3. Добавить% HADOOP_HOME% \ Bin в PATH окр вар

Источник: https://stackoverflow.com/a/27394808/543836

+0

Я нахожу это решение проще, чем выше! – Victor

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