Hadoop mettre de la performance - fichier de grande taille (20 go)
Je suis en utilisant hdfs -mettre à la charge d'un grand de 20 go de fichiers dans hdfs. Actuellement, le processus s'exécute @ 4mins. Je suis en train d'améliorer le temps d'écriture de chargement de données dans hdfs. J'ai essayé en utilisant différentes tailles de bloc pour améliorer la vitesse d'écriture, mais a obtenu la ci-dessous les résultats:
512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;
Personne ne sait ce que le goulot d'étranglement pourrait être et d'autres options que je pourrais explorer pour améliorer les performances de l'-mis cmd?
Il est donc actuellement de 80 MO/s. Enquêter sur le disque et réseau I/O. votre disque/réseau afin de mieux? Quelle est votre configuration exacte? Une seule machine ou d'un cluster?
OriginalL'auteur Irvo | 2013-10-24
Vous devez vous connecter pour publier un commentaire.
20GB /4minute sort à environ 85 MO/sec. C'est assez débit raisonnable de s'attendre à partir d'un seul lecteur avec tous les frais généraux de la SF et de protocole de réseau. Je parie que constitue le goulot d'étranglement. Sans changer votre ingérer processus, vous n'allez pas être en mesure de faire cela comme par magie plus rapide.
Le problème de base est que de 20 go est une quantité décente de données et que les données à obtenir poussé dans HDFS comme un seul flux. Vous êtes limité par le disque I/O qui est assez boiteux donné que vous avez un grand nombre de disques dans un cluster Hadoop.. Vous avez du temps à se saturer une 10GigE réseau (et probablement un 1GigE, trop).
Changement de taille de bloc ne devrait pas changer ce comportement, comme vous l'avez vu. C'est toujours la même quantité de données à partir du disque dans HDFS.
Je vous suggère de diviser le fichier en 1 GO de fichiers et de les étaler sur plusieurs disques, puis poussez-la vers le haut avec
-put
en parallèle. Vous pourriez même envisager de la séparation de ces fichiers sur plusieurs nœuds si le réseau devient un goulet d'étranglement. Vous pouvez changer la façon dont vous recevez vos données pour rendre cela plus rapidement? Évident divisé le fichier et en le déplaçant autour de prendra du temps, trop.OriginalL'auteur Donald Miner
Cela dépend beaucoup sur les détails de votre configuration. D'abord, sachez que 20 GO en 4 minutes est 80MBps.
Le goulot d'étranglement est très probable que votre ordinateur local ou matérielle de sa connexion ethernet. Je doute de jouer avec la taille de bloc permettra d'améliorer votre débit par beaucoup.
Si votre machine locale est typique d'un disque dur 7200tr /min, son disque de tampon taux de transfert est d'environ 128MBps, ce qui signifie qu'il peut charger que 20BG fichier dans la mémoire en 2:35, en supposant que vous avez 20 go de libre. Cependant, vous n'êtes pas seulement de copier de la mémoire, vous êtes en streaming à partir de la mémoire de paquets réseau, il est donc compréhensible que vous pourriez encourir une charge supplémentaire pour le traitement de ces tâches.
Voir également l'article de wikipédia sur la vitesse du fil, qui met un fast ethernet à 100 mbit/s (~12 MO/s). Notez que dans ce cas, fast ethernet est un terme pour un groupe particulier de normes ethernet. Vous êtes clairement d'obtenir un taux plus rapide que cela. La vitesse du fil est une bonne mesure, car il tient compte de tous les facteurs sur votre machine locale.
Donc, nous allons décomposer les différentes étapes dans le processus de diffusion en local sur votre machine:
Sans en savoir plus sur votre machine locale, il est difficile de déterminer laquelle de ces composants est le goulot d'étranglement. Cependant, ce sont les endroits pour commencer à étudier le bitrate.
OriginalL'auteur Axel Magnuson
vous souhaiterez peut-être utiliser distcp
hadoop distcp -Ddfs.le bloc.taille=$[256*1024*1024] /chemin/vers/inputdata /chemin/vers/outputdata
pour effectuer la copie en parallèle
OriginalL'auteur ashok