J'exécute Spark sur Windows 7. Lorsque j'utilise Hive, l'erreur suivante apparaît.
The root scratch dir: /tmp/Hive on HDFS should be writable. Current permissions are: rw-rw-rw-
Les autorisations sont définies comme suit
C:\tmp>ls -la
total 20
drwxr-xr-x 1 ADMIN Administ 0 Dec 10 13:06 .
drwxr-xr-x 1 ADMIN Administ 28672 Dec 10 09:53 ..
drwxr-xr-x 2 ADMIN Administ 0 Dec 10 12:22 Hive
J'ai défini le "contrôle total" sur tous les utilisateurs de Windows-> Propriétés-> Sécurité-> Avancé.
Mais je vois toujours la même erreur. Toute aide s'il vous plaît? J'ai vérifié un tas de liens, certains disent que c'est un bogue sur Spark 1.5. Est-ce vrai?
Merci Aarthi
Tout d’abord, assurez-vous d’utiliser Winutils pour votre système d’exploitation. Ensuite, l'étape suivante est les autorisations.
Sous Windows, vous devez exécuter la commande suivante sur cmd:
D:\winutils\bin\winutils.exe chmod 777 D:\tmp\Hive
J'espère que vous avez déjà téléchargé winutils et que vous avez défini HADOOP_HOME.
Tout d’abord, vérifiez d’abord votre domaine informatique. Essayer
c:\work\hadoop-2.2\bin\winutils.exe ls c:/tmp/Hive
Si cette commande indique accès refusé ou FindFileOwnerAndPermission erreur (1789): la relation de confiance entre ce poste de travail et le domaine principal a échoué .
Cela signifie que le contrôleur de domaine de votre ordinateur n’est pas accessible. La raison peut-être que vous n’êtes pas sur le même réseau VPN que votre contrôleur de domaine système. Connectez-vous à un réseau privé virtuel et réessayez.
Maintenant, essayez la solution fournie par Viktor ou Nishu.
La solution suivante a fonctionné sous Windows pour moi:
C:\temp\hadoop\bin\winutils.exe chmod 777 \tmp\Hive
\tmp\Hive
n'est pas un répertoire local
Vous devez définir les autorisations de ce répertoire sur HDFS, et non sur votre système de fichiers local. /tmp
ne signifie pas C:\tmp
sauf si vous définissez fs.defaultFs
dans core-site.xml sur file://c:/
, ce qui est probablement une mauvaise idée.
Vérifiez-le en utilisant
hdfs dfs -ls /tmp
Réglez-le avec
hdfs dfs -chmod 777 /tmp/Hive
Erreur lors du démarrage de spark-Shell sur VM sous Windows: Erreur msg: le répertoire de travail racine:/tmp/Hive sur HDFS doit être accessible en écriture. Permission refusée
Solution: /Tmp/Hive est un répertoire temporaire. Seuls les fichiers temporaires sont conservés à cet emplacement Aucun problème, même si nous supprimons ce répertoire, sera créé lorsque Requis avec les autorisations appropriées.
Étape 1) Sous hdfs, supprimez le répertoire/tmp/Hive ==> "hdfs dfs -rm -r/tmp/Hive"
2) Au niveau du système d'exploitation également, supprimez le répertoire/tmp/Hive ==> rm -rf/tmp/Hive
Après cela, l’étincelle Shell a démarré et tout a bien fonctionné.
Problème résolu dans la version spark 2.0.2 (14 novembre 2016). Utilisez cette version . Version 2.1.0 La version du 28 décembre 2016 présente les mêmes problèmes.
J'ai aussi fait face à ce problème. Ce problème est lié au réseau. J'ai installé spark sur Windows 7 avec un domaine particulier.
Le nom de domaine peut être vérifié
Démarrer -> ordinateur -> clic droit -> Propriétés -> nom de l'ordinateur, paramètres de domaine et de groupe de travail -> cliquez sur modifier -> Nom de l'ordinateur (Onglet) -> Cliquez sur Modifier -> Nom de domaine.
Lorsque j'exécute la commande spark-Shell, cela fonctionne correctement, sans erreur.
Dans d'autres réseaux, j'ai reçu une erreur d'autorisation d'écriture . Pour éviter cette erreur, exécutez la commande spark sur le domaine spécifié dans le chemin ci-dessus.
Il y a un bug dans Spark Jira pour la même chose. Cela a été résolu il y a quelques jours. Voici le lien.
https://issues.Apache.org/jira/browse/SPARK-10528
Les commentaires ont toutes les options, mais aucune solution garantie.
C'est un processus simple en 4 étapes:
Pour Spark 2.0+:
Ajoutez ceci à votre code ( avant initialisation SparkSession):
if (getOS () == "windows") { System.setProperty ("hadoop.home.dir", "C: /Users//winutils-master/hadoop-2.7.1"); }
Ajoutez ceci à votre spark-session (vous pouvez le changer en C:/Temp
au lieu de Bureau).
. config ("Hive.exec.scratchdir", "C:/Utilisateurs // Bureau/tmphive")
Ouvrez cmd.exe et exécutez:
"chemin\de\hadoop-2.7.1\bin\winutils.exe" chmod 777 C:\Utilisateurs \\ Bureau\tmphive
La raison principale est que vous avez démarré l'étincelle dans un mauvais répertoire. créez des dossiers dans D: // tmp/Hive (donnez toutes les autorisations) et démarrez votre étincelle dans D: drive D:> spark-Shell
maintenant ça va marcher .. :)
Utilisez la dernière version de "winutils.exe" et essayez. https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe
La même erreur se produisait: "Le répertoire de travail racine:/tmp/Hive sur HDFS devrait être accessible en écriture. Les autorisations actuelles sont les suivantes: rw-rw-rw-" sous Windows 7. Voici ce que j'ai fait pour résoudre le problème:
Note: avec une version antérieure de winutils également, la commande chmod définissait l'autorisation requise sans erreur, mais spark s'est toujours plaint du fait que le dossier/tmp/Hive n'était pas accessible en écriture.
Utiliser la version correcte de winutils.exe a été efficace pour moi. Les winutils devraient provenir de la version de Hadoop pour laquelle Spark a été pré-construit.
Définissez la variable d’environnement HADOOP_HOME sur l’emplacement bin de winutils.exe. J'ai stocké winutils.exe avec les fichiers C:\Spark\bin. Alors maintenant, mes SPARK_HOME et HADOOP_HOME pointent vers le même emplacement C:\Spark
.
Maintenant que winultils a été ajouté au chemin, donnez les autorisations pour le dossier Hive en utilisant winutils.exe chmod 777 C:\tmp\Hive
Pouvez s'il vous plaît essayer de donner 777 permission au dossier/tmp/Hive parce que ce que je pense est que spark fonctionne en tant qu'utilisateur anonyme (qui viendra dans une autre catégorie d'utilisateurs) et que cette permission devrait être récursive . J'ai eu le même problème avec 1.5.1 version de spark pour Hive, et cela fonctionnait en donnant l'autorisation 777 en utilisant la commande ci-dessous sur linux
chmod -r 777 /tmp/Hive