2010-08-23 33 views
8

J'explore les options pour exécuter une application hadoop sur un système local.Est-il possible d'exécuter Hadoop en mode Pseudo-Distribué sans HDFS?

Comme pour de nombreuses applications, les premières versions devraient pouvoir fonctionner sur un seul nœud, à condition de pouvoir utiliser tous les cœurs de processeurs disponibles (Oui, cela concerne this question). La limitation actuelle est que sur nos systèmes de production nous avons Java 1.5 et en tant que tel, nous sommes liés à Hadoop 0.18.3 comme dernière version (Voir this question). Donc, malheureusement, nous ne pouvons pas encore utiliser this new feature.

La première option consiste simplement à exécuter hadoop en mode pseudo-distribué. Essentiellement: créez un cluster hadoop complet avec tout ce qui fonctionne sur exactement 1 nœud. L'inconvénient de cette forme est qu'elle utilise également un HDFS à part entière. Cela signifie que pour traiter les données d'entrée, cela doit d'abord être "téléchargé" sur le DFS ... qui est stocké localement. Cela prend donc plus de temps de transfert des données d'entrée et de sortie et utilise de l'espace disque supplémentaire. Je voudrais éviter ces deux choses pendant que nous restons sur une configuration à un seul nœud.

Alors je pensais: est-il possible de remplacer le paramètre "fs.hdfs.impl" et le changer de "org.apache.hadoop.dfs.DistributedFileSystem" en (par exemple) "org.apache.hadoop. fs.LocalFileSystem "? Si cela fonctionne, le cluster hadoop "local" (qui ne peut SEULEMENT contenir qu'un seul nœud) peut utiliser des fichiers existants sans aucune condition de stockage supplémentaire et il peut démarrer plus rapidement car il n'est pas nécessaire de télécharger les fichiers. Je m'attendrais à avoir encore un travail et un traqueur de tâches et peut-être aussi un namenode pour contrôler le tout.

Est-ce que quelqu'un a déjà essayé cela? Cela peut-il marcher ou cette idée est-elle trop éloignée de l'usage prévu?

Ou existe-t-il un meilleur moyen d'obtenir le même effet: Opération pseudo-distribuée sans HDFS?

Merci pour vos idées.


EDIT 2:

C'est la config j'ai créé pour Hadoop 0.18.3 conf/Hadoop-site.xml en utilisant la réponse fournie par bajafresh4life.

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 
    <property> 
    <name>fs.default.name</name> 
    <value>file:///</value> 
    </property> 

    <property> 
    <name>mapred.job.tracker</name> 
    <value>localhost:33301</value> 
    </property> 

    <property> 
    <name>mapred.job.tracker.http.address</name> 
    <value>localhost:33302</value> 
    <description> 
    The job tracker http server address and port the server will listen on. 
    If the port is 0 then the server will start on a free port. 
    </description> 
    </property> 

    <property> 
    <name>mapred.task.tracker.http.address</name> 
    <value>localhost:33303</value> 
    <description> 
    The task tracker http server address and port. 
    If the port is 0 then the server will start on a free port. 
    </description> 
    </property> 

</configuration> 

Répondre

6

Oui, c'est possible, bien que j'utilise 0.19.2. Je ne suis pas trop familier avec 0.18.3, mais je suis sûr que cela ne devrait pas faire de différence.

Assurez-vous que fs.default.name est réglé sur la valeur par défaut (ce qui est file:///), et mapred.job.tracker est mis au point à l'endroit où votre JobTracker est hébergé. Démarrez ensuite vos démons en utilisant bin/start-mapred.sh. Vous n'avez pas besoin de démarrer le namenode ou les datanodes. À ce stade, vous devriez pouvoir exécuter votre carte/réduire les travaux en utilisant bin/hadoop jar ...

Nous avons utilisé cette configuration pour exécuter Hadoop sur un petit groupe de machines à l'aide d'une appliance Netapp montée sur NFS.

+0

Oui, merci. Cela fonctionne très bien. Je posterai ma config après avoir fait d'autres tests. –