Установка fs.default.name в core-site.xml Устанавливает HDFS в безопасный режим
Я установил дистрибутив Cloudera CDH4 на одном компьютере в псевдораспределенном режиме и успешно проверил, что он работает правильно (например, может запускать программы MapReduce, вставлять данные на сервер Hive и т. Д.). Однако, если я случайноcore-site.xml
файл, чтобы иметьfs.default.name
установить имя машины, а неlocalhost
и перезапустите службу NameNode, HDFS перейдет в безопасный режим.
До сменыfs.default.name
Я запустил следующее, чтобы проверить состояние HDFS:
$ hadoop dfsadmin -report
...
Configured Capacity: 18503614464 (17.23 GB)
Present Capacity: 13794557952 (12.85 GB)
DFS Remaining: 13790785536 (12.84 GB)
DFS Used: 3772416 (3.60 MB)
DFS Used%: 0.03%
Under replicated blocks: 2
Blocks with corrupt replicas: 0
Missing blocks: 0
Затем я сделал модификациюcore-site.xml
(с именем машиныhadoop
):
fs.default.name
hdfs://hadoop:8020
Я перезапустил службу и перечитал отчет.
$ sudo service hadoop-hdfs-namenode restart
$ hadoop dfsadmin -report
...
Safe mode is ON
Configured Capacity: 0 (0 B)
Present Capacity: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used: 0 (0 B)
DFS Used%: NaN%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Интересно отметить, что я все еще могу выполнять некоторые команды HDFS. Например, я могу запустить
$ hadoop fs -ls /tmp
Тем не менее, если я пытаюсь прочитать файл с помощьюhadoop fs -cat
или попробуйте поместить файл в HDFS, мне сказали, что NameNode находится в безопасном режиме.
$ hadoop fs -put somefile .
put: Cannot create file/user/hadinstall/somefile._COPYING_. Name node is in safe mode.
Причина мне нужнаfs.default.name
быть установленным на имя машины, потому что мне нужно общаться с этой машиной через порт 8020 (порт NameNode по умолчанию). Еслиfs.default.name
осталосьlocalhost
то служба NameNode не будет прослушивать запросы на внешнее соединение.
Я в недоумении относительно того, почему это происходит, и буду признателен за любую помощь.