2017-10-06 14 views
1

J'ai créé un cluster de 3 noeuds Hadoop avec 1 nom de code et 2 datanode.Autorisation Hive refusée pour un utilisateur anonyme utilisant beeline shell

Je peux effectuer une requête de lecture/écriture à partir de Hive shell, mais pas beeline.

J'ai trouvé beaucoup de suggestions et de réponses à ce sujet.
Dans chaque suggestion, il a été mentionné pour donner la permission pour le userX pour chaque table individuelle.
Mais je ne sais pas comment définir l'autorisation pour un utilisateur anonyme une fois pour toutes. Pourquoi j'obtiens l'utilisateur anonyme en accédant aux données de beeline ou d'un programme de Java?

Je suis capable de lire les données du shell beeline et de la connexion Java JDBC.
Mais je ne peux pas insérer les données dans la table.

Ceci est ma connexion jdbc: jdbc: hive2: // hadoop01: 10000.

Ci-dessous est l'erreur que je reçois tout sur demande d'insertion:

Autorisation refusée: user = anonyme, accès = écriture, inode = "/ user/ruche/entrepôt/test_log/.hive-staging_hive_2017-10- 07_06-54-36_347_6034469031019245441-1" : Hadoop: super-groupe: drwxr-xr-x

+1

Quelle est votre URL de connexion JDBC? Vous pouvez également ajouter une erreur réelle dans la question ci-dessus. – Shubhangi

+0

@Shubhangi J'ai édité mon message. J'ai inclus l'URL de connexion et le message d'erreur. – sachin

Répondre

3

syntaxe Beeline est

beeline -n username -u "url" 

Je suppose que vous manquez le nom d'utilisateur. En outre, nul autre que l'utilisateur Hadoop a accès en écriture à cette table de toute façon

Si vous ne disposez pas d'un contrôle total sur les autorisations de table, vous pouvez essayer de déplacer le répertoire de mise en scène avec le réglage hive.exec.stagingdir

+0

J'ai essayé de changer le répertoire de la mise en scène, mais alors la ruche commence à donner l'erreur 'Insérer la requête d'écrasement échouant avec l'erreur d'exécution, le code de retour 1 de org.apache.hadoop.hive.ql.exec.MoveTask' – sachin

+0

Probablement, encore, ' user = anonymous' n'a pas d'autorisations sur la table de destination –

0

Si aucune base de données est indiqué dans l'URL de connexion pour se connecter, comme

jdbc: hive2: // hadoop01: 10000/défaut

puis approximative se connecte à la base de données DEFA ULT, et lors de l'insertion des données dans la table - d'abord les données sont chargées dans une table temporaire dans la base de données par défaut, puis chargées dans la table réelle. Par conséquent, vous devez également autoriser l'utilisateur à accéder à la base de données DEFAULT, ou vous pouvez vous connecter aux bases de données auxquelles vous avez accès.

jdbc: hive2: // hadoop01: 10000/your_db