Question

Je dois écrire des données pour Hadoop (HDFS) à partir de sources externes, comme une boîte de fenêtres. En ce moment je suis copier les données sur la NameNode et en utilisant la commande de HDFS de mettre à ingérer dans le cluster. Dans mon navigation du code, je ne vois pas une API pour le faire. J'espère que quelqu'un peut me montrer que je me trompe et il est un moyen facile de coder des clients externes contre HDFS.

Était-ce utile?

La solution

Installer Cygwin, installez Hadoop localement (vous avez juste besoin binaire et configs qui pointent à votre NN - pas besoin d'exécuter effectivement les services), exécutez hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

Vous pouvez également utiliser le nouveau bureau Cloudera pour télécharger un fichier via l'interface Web, mais cela pourrait ne pas être une bonne option pour les fichiers géants.

Il y a aussi une superposition WebDAV pour HDFS, mais je ne sais pas comment stable / fiable est.

Autres conseils

Il y a une API en Java. Vous pouvez l'utiliser en incluant le code Hadoop dans votre projet. Le JavaDoc est très utile en général, mais bien sûr, vous devez savoir, ce que vous cherchez * g * http://hadoop.apache.org/common/docs/

Pour votre problème particulier, un coup d'oeil à: http: //hadoop.apache. org / common / docs / courant / api / org / apache / Hadoop / fs / FileSystem.html (Cela s'applique à la dernière version, consultez d'autres JavaDocs pour les versions différentes!)

Un appel typique serait: Filesystem.get(new JobConf()).create(new Path("however.file")); Ce qui vous renvoie un flux que vous pouvez manipuler avec JavaIO régulièrement.

Pour le problème de charger les données que je devais mettre en HDFS, je choisis de tourner le problème autour.

Au lieu de télécharger les fichiers HDFS du serveur où ils sont, je l'ai écrit Java Map / Reduce travail où le mappeur lire le fichier à partir du serveur de fichiers (dans ce cas via https), puis écrire directement à HDFS ( via le de) .

La liste des fichiers est lu à partir de l'entrée. J'ai alors un script externe qui renseigne un fichier avec la liste des fichiers à Fetch, télécharge le fichier dans HDFS (en utilisant Hadoop DSF -Mettre ), puis commencer à la carte / réduire l'emploi avec un nombre décent de cartographes.

Cela me donne d'excellentes performances de transfert, puisque plusieurs fichiers sont lus / écrits en même temps.

Peut-être pas la réponse que vous cherchez, mais nous espérons utile quand même: -.)

Environ 2 ans après ma dernière réponse, il y a maintenant deux nouvelles alternatives - Hoop / HttpFS et WebHDFS.

En ce qui concerne Hoop, il a été annoncé dans Cloudera de Blog et peut être téléchargé à partir d'un github . J'ai réussi à obtenir cette version pour parler avec succès au moins Hadoop 0.20.1, il peut parler probablement des versions légèrement plus âgés.

Si vous utilisez Hadoop 0.23.1 qui, au moment de l'écriture est toujours pas sorti, Hoop est une partie de la place Hadoop comme son propre composant, les HttpFS. Ce travail a été fait dans le cadre de HDFS-2178 . Hoop / HttpFS peut être un proxy non seulement à HDFS, mais aussi à d'autres systèmes de fichiers Hadoop compatibles comme Amazon S3.

Hoop / HttpFS exécute comme son propre service autonome.

Il y a aussi WebHDFS qui fonctionne dans le cadre des services NameNode et DataNode. Il fournit également une API REST qui, si je comprends bien, est compatible avec l'API HttpFS. WebHDFS fait partie de Hadoop 1.0 et l'une de ses principales caractéristiques est qu'il fournit la localité des données -. Lorsque vous faites une demande de lecture, vous serez redirigé vers le composant WebHDFS sur le DataNode où se trouvent les données

Quel composant à choisir dépend un peu de votre configuration actuelle et ce qui doit vous. Si vous avez besoin d'une interface REST HTTP HDFS maintenant et que vous utilisez une version qui ne comprend pas WebHDFS, en commençant par Hoop du dépôt GitHub semble être l'option la plus facile. Si vous utilisez une version qui inclut WebHDFS, je pencherais pour que si vous avez besoin des fonctionnalités Hoop qui WebHDFS manque (l'accès à d'autres systèmes de fichiers, la limitation de la bande passante, etc.)

Il semble qu'il y ait une page dédiée maintenant à cette http://wiki.apache.org/hadoop / MountableHDFS :

  

Ces projets (énumérés ci-dessous) permettent de monter HDFS (sur la plupart   saveurs d'Unix) comme un système de fichiers standard en utilisant la commande mount.   Une fois monté, l'utilisateur peut opérer sur une instance de hdfs utilisant   standard Unix tels que 'ls', 'cd', 'cp', 'mkdir', 'trouver',   « Grep », ou utiliser des bibliothèques standard Posix comme ouvert, écrire, lire, à proximité   de C, C ++, Python, Ruby, Perl, Java, bash, etc.

Plus tard, il décrit ces projets

  
      
  • contrib / fusible dfs est construit sur le fusible, de la colle C, libhdfs et le hadoop-dev.jar
  •   
  • fusible-J-hdfs est construit sur le fusible, le fusible pour java, et le hadoop-dev.jar
  •   
  • hdfs-fusible - un projet de code Google est très similaire à contrib / fusible DSF
  •   
  • webdav - hdfs exposés en tant que ressource webdav Mapr - contient une source fermée HDFS système de fichiers compatible qui prend en charge lecture / écriture   accès NFS
  •   
  • HDFS NFS Proxy - exporte HDFS comme NFS sans utiliser de fusible. Prise en charge Kerberos et re-commandes écrit si elles sont écrites à HDFS   séquentiellement.
  •   

Je ne l'ai pas essayé toutes ces choses, mais je vais mettre à jour la réponse dès que j'ai le même besoin que l'OP

Vous pouvez aussi utiliser Talend, qui comprend des composants pour l'intégration Hadoop.

vous pouvez monter HDFS sur votre machine (appeler machine_X) où vous exécutez votre code et machine_X devez disposer d'une connectivité InfiniBand avec les HDFS Check this out, https://wiki.apache.org/hadoop/MountableHDFS

Vous pouvez également utiliser HadoopDrive ( http://hadoopdrive.effisoft.eu ). Il est une extension du shell Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top