Ответ 1
Краткий обзор:
-
hadoop
bash script в(path)/bin/hadoop
на самом деле имеет ошибку. script предполагает, что ни один из файлов/путей, в которых нуждаются пользователи, будет содержать пробелы. Что ж, для Windows все они будут иметь место где-то, так как в "Program Files" есть пробел.
Подробнее
Это сложный вопрос... Я столкнулся с той же проблемой, и мне потребовалось некоторое время, чтобы исправить.
Во-первых, проблема: установка переменных среды через скрипты может быть отрывочной, когда пробелы задействованы в путях/именах файлов (что происходит довольно часто в системах non * nix в наши дни).
Далее, есть вероятные два места, где вам нужно исправить проблему:
-
В
(path)/conf/hadoop-env.sh
script вы должны установитьJAVA_HOME
script, и ДОЛЖНО выглядеть примерно так:export JAVA_HOME=/cygdrive/c/"Program Files"/Java/jdk1.7.0_06
(Обратите внимание, что в "Программных файлах" есть кавычки, так что он распознается как один элемент. Вы не можете использовать escape-символ
\
, потому что cygwin делает некоторую оплодотворение Windows для путей UNIX, поэтому\
не может действовать как побег. -
В вашем
(path)/bin/hadoop
script строка 320, вероятно, написана примерно так:JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
Вам нужно будет изменить его, вместо этого скажите:
JAVA_PLATFORM=`CLASSPATH="${CLASSPATH}" "${JAVA}" -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
Обратите внимание, что я добавил кавычки вокруг переменных окружения
${CLASSPATH}
и${JAVA}
. Помещая кавычки вокруг него, вы говорите, что "весь набор символов, указанных этой переменной, должен считаться одним строковым объектом".
ОК, теперь, если вы хотите понять, почему это происходит и что происходит, проблема в том, что ваш JDK, скорее всего, хранится в разделе "Program Files" или, возможно, в разделе "Program Files (x86)", оба из которых имеют пробелы в пути. Все другие переменные среды, которые нужны Hadoop, не зависят ни от чего в рамках "Программных файлов". Итак, почему вы видите только одну ошибку, помеченную. Все остальные переменные среды, которые не имеют котировок, просто не имеют пробелов внутри них.