2012-06-30 3 views
29

J'écris un script shell pour mettre les données dans hadoop dès qu'elles sont générées. Je peux ssh à mon noeud maître, copier les fichiers dans un dossier là-bas et les mettre dans hadoop. Je suis à la recherche d'une commande shell pour se débarrasser de la copie du fichier sur le disque local sur le nœud maître. pour mieux expliquer ce que je dois, ici-bas vous pouvez trouver ce que j'ai jusqu'à présent:mettre un fichier distant dans hadoop sans le copier sur le disque local

1) Copiez le fichier sur le nœud maître disque local:

scp test.txt [email protected]:/folderName/ 

J'ai déjà configuré la connexion SSH à l'aide des touches. Donc, aucun mot de passe n'est nécessaire pour cela.

2) Je peux utiliser ssh pour exécuter à distance la Hadoop commande mis:

ssh [email protected] "hadoop dfs -put /folderName/test.txt hadoopFolderName/" 

ce que je cherche est de savoir comment tuyau/combiner ces deux étapes en une seule et sauter la copie locale du fichier sur Le disque local de masterNode.

grâce

En d'autres termes, je veux plusieurs tuyaux commande d'une manière que je peux

+0

Le problème de tuyauterie est résolu. Cependant, la performance de la tuyauterie est beaucoup plus lente que de copier les fichiers d'abord sur le disque local du nœud maître, puis de les copier dans Hadoop. Une idée? – reza

Répondre

35

Try this (non testé):

cat test.txt | ssh [email protected] "hadoop dfs -put - hadoopFoldername/" 

J'ai utilisé des astuces similaires à copier répertoires autour de:

tar cf - . | ssh remote "(cd /destination && tar xvf -)" 

Cela envoie la sortie de local- tar dans l'entrée de la télécommande tar.

+0

non cela ne fonctionne pas. pour 2 raisons: 1) hadoop dfs -put/dev/stdin n'existe pas 2) mes fichiers sont au format binaire. en fait c'est test.bin plutôt que test.txt – reza

+2

Le binaire n'aurait pas d'importance - 'ssh' ne déforme pas le contenu de 8 bits. Essayez '-' à la place de'/dev/stdin'? – sarnold

+0

alors dans ce cas, le seul problème est que hadoop dfs -put/dev/stdin ne fonctionne pas.En fait, je viens d'essayer et il échoue :( – reza

2

Hadoop fournit deux interfaces REST. Vérifiez Hoop et WebHDFS. Vous devriez être capable de copier le fichier sans copier le fichier sur le master en les utilisant depuis des environnements non-Hadoop.

+0

Le lien WebHDFS ne fonctionne PAS – serup

+0

cela devrait fonctionner: https://hadoop.apache.org/docs/r1.0.4/webhdfs.html#File+and+Directory+Operations – Babu

8

Le noeud sur lequel vous avez généré les données est-il capable d'atteindre chacun de vos nœuds de cluster (le nœud de nom et tous les datanodes).

Si vous avez la connectivité de données, vous pouvez simplement exécuter la Hadoop fs -Mettre commande de la machine sur laquelle les données sont générées (en supposant que vous avez les fichiers binaires de Hadoop installés là aussi):

#> hadoop fs -fs masternode:8020 -put test.bin hadoopFolderName/ 
+0

Malheureusement, le nœud sur lequel je crée les données n'a pas d'accès direct au cluster hoop. – reza

+0

Savez-vous quelle est l'installation minimum de hadoop requise? –

0

(non testé Depuis le noeud où vous créez vos données a accès à internet, alors peut-être que vous pourriez installer le logiciel nœud client hadoop, puis l'ajouter au cluster - après hadoop fs -put normal, puis déconnectez et retirez votre noeud temporaire - le système hadoop devrait ensuite faire automatiquement la réplication de vos fichiers blocs à l'intérieur de votre cl hadoop uster

Questions connexes