Obtenir la configuration hadoop dans Java util
J'écris un utilitaire Java qui doit accéder au DFS, j'ai donc besoin d'un objet Configuration
.
Quand j'en crée un simplement en utilisant
Configuration conf = new Configuration()
Il ne semble pas trouver le DFS et utilise simplement le système de fichiers local; printing
fs.getHomeDirectory()
Donne mon répertoire personnel local. J'ai essayé d'ajouter core-site.xml,mapred-site.xml,fil-site.xml, et hdfs-site.xml à la configuration en tant que ressources, mais cela ne change rien. Que dois-je faire pour l'obtenir pour ramasser le HDFS les paramètres?
Merci d'avoir lu
2 answers
La raison pour laquelle il pointe vers votre système de fichiers local est core-site.xml
et hdfs-site.xml
n'est pas ajouté correctement. Ci-dessous l'extrait de code vous aidera.
Configuration conf = new Configuration();
conf.addResource(new Path("file:///etc/hadoop/conf/core-site.xml")); // Replace with actual path
conf.addResource(new Path("file:///etc/hadoop/conf/hdfs-site.xml")); // Replace with actual path
Path pt = new Path("."); // HDFS Path
FileSystem fs = pt.getFileSystem(conf);
System.out.println("Home directory :"+fs.getHomeDirectory());
Mise à jour:
L'option ci-dessus aurait dû fonctionner, Il semble que certains problèmes dans le fichier de configuration ou le chemin. Vous avez une autre option au lieu d'ajouter des fichiers de configuration à l'aide de la méthode addResource, utilisez la méthode set. Ouvrez votre site principal.fichier XML et trouver la valeur de fs.defaultFS
. Utilisez la méthode set au lieu de la méthode addResource.
conf.set("fs.defaultFS","hdfs://<Namenode-Host>:<Port>"); // Refer you core-site.xml file and replace <Namenode-Host> and <Port> with your cluster namenode and Port (default port number should be `8020`).
Pour obtenir l'accès au système de Fichiers, vous devez utiliser la configuration et un système de fichiers comme indiqué ci-dessous
- Obtenir l'instance de configuration
-
Obtenir l'instance HDFS
Configuration configuration = new Configuration(); FileSystem hdfs = FileSystem.get(new URI("hdfs://"+HadoopLocation+":8020"), configuration);
Dans ce cas, HadoopLocation est l'emplacement dans lequel vous avez votre serveur hadoop (éventuellement Localhost)