J’essaie de spécifier le répertoire de base pour les fichiers HDFS dans mon hdfs-site.xml
sous Windows 7 (Hadoop 2.7.1 que j’ai construit à partir du code source, en utilisant Java SDK 1.8.0_45 et Windows SDK 7.1). Je ne peux pas comprendre comment fournir un chemin qui spécifie un lecteur.
Mon hdfs-site.xml
ressemble à ceci:
dfs.replication 1 hadoop.tmp.dir XXX
et j’ai essayé différentes valeurs pour XXX
, que j’ai testées avec hdfs namenode -format
, toutes conduisant à l’une de ces 2 erreurs:
XXX=D:/tmp/hdp
: 15/07/10 23:38:33 ERROR namenode.NameNode: Failed to start namenode. java.lang.IllegalArgumentException: URI has an authority component at java.io.File.(File.java:423) at org.apache.hadoop.hdfs.server.namenode.NNStorage.getStorageDirectory(NNStorage.java:329)
15/07/10 23:38:33 ERROR namenode.NameNode: Failed to start namenode. java.lang.IllegalArgumentException: URI has an authority component at java.io.File.(File.java:423) at org.apache.hadoop.hdfs.server.namenode.NNStorage.getStorageDirectory(NNStorage.java:329)
XXX=D:\tmp\hdp
: ERROR common.Util: Syntax error in URI file://D:\tmp\hdp/dfs/name
Autres variantes qui ont donné des erreurs similaires: file:///D:/tmp/hdp
(de http://hortonworks.com/community/forums/topic/hadoop-configuration-files-issues/ ), file://D:/tmp/hdp
, D:\\tmp\\hdp
Et si j’utilise /D/tmp/hdp
il ne /D/tmp/hdp
pas, mais va dans un dossier D
sur mon lecteur actuel.
Je suis à court d’idées, de suggestions? (NB: en plus d’utiliser Cygwin, ce qui n’est pas une option pour moi)
Vous pouvez spécifier une spécification de lecteur dans hadoop.tmp.dir
dans core-site.xml en ajoutant un “/” devant le chemin d’access absolu et en utilisant “/” comme séparateur de chemin au lieu de “\” pour tous les éléments du chemin. Par exemple, si le chemin absolu souhaité est D: \ tmp \ hdp, alors cela ressemblerait à ceci:
hadoop.tmp.dir /D:/tmp/hdp
La raison pour laquelle cela fonctionne est que les valeurs par défaut pour la plupart des répertoires HDFS sont configurées pour être file://${hadoop.tmp.dir}/suffix
. Voir les définitions par défaut de dfs.namenode.name.dir
, dfs.datanode.data.dir
et dfs.namenode.checkpoint.dir
ici:
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
En substituant la valeur ci-dessus à hadoop.tmp.dir
, vous hadoop.tmp.dir
un file:
valide file:
URI avec une spécification de lecteur et aucune autorisation, ce qui satisfait aux exigences de la configuration HDFS. Il est important d’utiliser ‘/’ au lieu de ‘\’, car un caractère nu “\” non codé n’est pas valide dans la syntaxe de l’URL.
http://www.ietf.org/rfc/rfc1738.txt
Si vous préférez ne pas utiliser ce comportement de substitution, il est également possible de remplacer toutes les propriétés de configuration qui utilisent hadoop.tmp.dir
dans votre fichier hdfs-site.xml. Chaque valeur doit être un file:
complet file:
URI. Par exemple:
dfs.namenode.name.dir file:///D:/tmp/hdp/dfs/name dfs.datanode.data.dir file:///D:/tmp/hdp/dfs/data dfs.namenode.checkpoint.dir file:///D:/tmp/hdp/dfs/namesecondary
Vous pourriez trouver cela plus lisible dans l’ensemble.