Какие разрешения требуются для запуска командной строки Hive

#hive #hdfs #kerberos

#hive #hdfs #kerberos

Вопрос:

Я вижу проблему с запуском командной строки Hive. Когда я запускаю CLI на пограничном узле, я получаю следующую ошибку, касающуюся разрешений HDFS:

 c784gnj:~ # sudo hive
/usr/lib/hive/conf/hive-env.sh: line 5: /usr/lib/hive/lib/hive-hbase-handler-1.1.0-cdh5.5.2.jar,/usr/lib/hbase/hbase-common.jar,/usr/lib/hbase/lib/htrace-core4-4.0.1-incubating.jar,/usr/lib/hbase/lib/htrace-core-3.2.0-incubating.jar,/usr/lib/hbase/lib/htrace-core.jar,/usr/lib/hbase/hbase-hadoop2-compat.jar,/usr/lib/hbase/hbase-client.jar,/usr/lib/hbase/hbase-server.jar,/usr/lib/hbase/hbase-hadoop-compat.jar,/usr/lib/hbase/hbase-protocol.jar: No such file or directory
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
16/10/11 10:35:49 WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist

Logging initialized using configuration in jar:file:/usr/lib/hive/lib/hive-common-1.1.0-cdh5.5.2.jar!/hive-log4j.properties
Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=app1_K, access=WRITE, inode="/user":hdfs:supergroup:drwxr-xr-x
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java:257)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:238)
    at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:216)
  

Что hive пытается записать в каталог /user в HDFS?

Я уже вижу, что /user/hive создан:

 drwxrwxr-t   - hive          hive                0 2015-03-16 22:17 /user/hive
  

Как вы можете видеть, я поддерживаю аутентификацию kerberos в Hadoop.

Заранее спасибо!

Ответ №1:

В журнале указано, что вам необходимо установить разрешение для /user каталога HDFS для пользователя app1_K

Команда

hadoop fs -setfacl -m -R user:app1_K:rwx /user

Выполните эту команду как привилегированный пользователь из корзины Hadoop

Если вы получаете аналогичную ошибку разрешения в любом другом каталоге hdfs, вам необходимо предоставить разрешение для этого каталога.

Обратитесь к ссылке ниже для получения дополнительной информации.

https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html#ACLs_Access_Control_Lists

Ответ №2:

Вместо того, чтобы полностью отключать права доступа к HDFS, как предложил @Kumar, вы можете просто создать домашний каталог HDFS для каждого нового пользователя в системе, чтобы задания Hive / Spark / Pig / Sqoop имели допустимое местоположение для создания временных файлов…

В кластере с использованием Kerberized:

 kinit hdfs@MY.REALM
hdfs dfs -mkdir /user/app1_k
hdfs dfs -chown app1_k:app1_k /user/app1_k
  

В противном случае:

 export HADOOP_USER_NAME=hdfs
hdfs dfs -mkdir /user/app1_k
hdfs dfs -chown app1_k:app1_k /user/app1_k
  

Комментарии:

1. У пользователя уже есть домашний каталог, так как я могу использовать hbase / spark hadoop fs с помощью этого пользователя.