Ответ 1
Я решил эту проблему временно, отключив разрешение dfs. Добавляя ниже код свойства в conf/hdfs-site.xml
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
Я новичок в распределенной файловой системе hasoop, я сделал полную установку hadoop single node на моем компьютере. Но после этого, когда я собираюсь загрузить данные в hdfs, выдается сообщение об ошибке Permission Denied
.
Сообщение с терминала с командой:
[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input
put: /usr/local/input-data (Permission denied)
[email protected]:/usr/local/hadoop$
После использования sudo и добавления huduser в sudouser:
[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe
put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x
[email protected]:/usr/local/hadoop$
Я решил эту проблему временно, отключив разрешение dfs. Добавляя ниже код свойства в conf/hdfs-site.xml
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
У меня была схожая ситуация, и вот мой подход, который несколько отличается:
HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /
Что вы на самом деле делаете, так это чтение локального файла в соответствии с вашими локальными разрешениями, но при размещении файла на HDFS вы аутентифицированы как пользователь hdfs
. Вы можете сделать это с помощью другого идентификатора (остерегайтесь конфигурации реальных конфигураций, но это обычно не так).
Преимущества:
sudo
.Здесь вы испытываете две отдельные проблемы:
[email protected]:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied)
Здесь пользователь hduser
не имеет доступа к локальному каталогу /usr/local/input-data
. То есть ваши локальные разрешения слишком ограничительны. Вы должны изменить его.
[email protected]:/usr/local/hadoop$ sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x
Здесь пользователь root
(поскольку вы используете sudo) не имеет доступа к каталогу HDFS /input
. Как вы можете видеть: hduser:supergroup:rwxr-xr-x
говорит, что только hduser
имеет доступ на запись. Hadoop на самом деле не уважает root
как специального пользователя.
Чтобы исправить это, я предлагаю вам изменить разрешения для локальных данных:
sudo chmod -R og+rx /usr/local/input-data/
Затем попробуйте выполнить команду put
как hduser.
Запустите оболочку как hduser (от root) и запустите команду
sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input
[обновление]
Также обратите внимание, что пользователь hdfs
является суперпользователем и имеет все привилегии r/w.
Я решил эту проблему, выполнив следующие шаги
su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit