Все мои файлы конфигурации Hadoop находятся по следующим адресам:
./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
Чтобы задать переменную HADOOP_HOME, нужно ли использовать точечную нотацию или ~?
HADOOP_HOME = "./.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
или
HADOOP_HOME = " ~/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
решение1
Во-первых, назначения оболочки делаютнетразрешить пробел до или после знака равенства. Оба ваших предложения на самом деле попытаются выполнить команду, буквально называемую HADOOP_HOME
.
Относительный — не очень хорошая идея, поскольку относительные пути относительны к текущему рабочему каталогу, а не к домашнему. Так что если вы попали cd
в ~/Documents
, то это будет означать ~/Documents/.linuxbrew/…
. Совсем не то, что вам нужно.
Второй вариант тоже не работает из-за того, как работают кавычки. Расширение ~
— это то, что оболочка должна делать — обычно она не должна превращаться в переменную окружения. Но, заключив его в кавычки, вы предотвратили это расширение. Вам нужно убрать часть ~/
из кавычек или использовать альтернативное использование $HOME
(которое будет расширяться внутри двойных кавычек. Так что любой из этих вариантов должен работать (по крайней мере, если $HOME
задан ваш домашний каталог, что почти всегда так):
HADOOP_HOME="$HOME/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
HADOOP_HOME=~/".linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/"
Лично мне первый вариант кажется более удобным для чтения. Есть и третий вариант — здесь вам на самом деле не нужны никакие кавычки; в имени нет никаких специальных символов. Так что это тоже нормально (и прекрасно читается):
HADOOP_HOME=~/.linuxbrew/Cellar/hadoop/2.7.3/libexec/etc/hadoop/
Не забудьте также экспортировать переменную ( export HADOOP_HOME
).