2010-08-23 13 views
8

Estoy explorando las opciones para ejecutar una aplicación hadoop en un sistema local.¿Es posible ejecutar Hadoop en una operación Pseudo Distribuida sin HDFS?

Como en muchas aplicaciones, las primeras versiones deberían poder ejecutarse en un solo nodo, siempre que podamos usar todos los núcleos de CPU disponibles (Sí, esto está relacionado con this question). La limitación actual es que en nuestros sistemas de producción tenemos Java 1.5 y, como tal, estamos obligados a Hadoop 0.18.3 como la última versión (Ver this question). Desafortunadamente, no podemos usar this new feature todavía.

La primera opción es simplemente ejecutar hadoop en modo pseudo distribuido. Esencialmente: crea un cluster hadoop completo con todo funcionando exactamente en 1 nodo.

El "inconveniente" de este formulario es que también utiliza un HDFS de pleno derecho. Esto significa que para procesar los datos de entrada, primero debe "cargarse" en el DFS ... que se almacena localmente. Por lo tanto, esto requiere un tiempo de transferencia adicional de los datos de entrada y salida, y utiliza espacio de disco adicional. Me gustaría evitar ambos mientras permanecemos en una configuración de nodo único.

Así que estaba pensando: ¿Es posible anular la configuración "fs.hdfs.impl" y cambiarla de "org.apache.hadoop.dfs.DistributedFileSystem" en (por ejemplo) "org.apache.hadoop". fs.LocalFileSystem "?

Si esto funciona, el clúster de hadoop "local" (que SÓLO puede constar de UN nodo) puede usar archivos existentes sin requisitos de almacenamiento adicionales y puede comenzar más rápido porque no hay necesidad de cargar los archivos. Esperaría todavía tener un rastreador de tareas y tareas y quizás también un namenode para controlar todo.

¿Alguien ha intentado esto antes? ¿Puede funcionar o esta idea está demasiado lejos del uso previsto?

¿O existe una forma mejor de obtener el mismo efecto: operación pseudo Distribuida sin HDFS?

Gracias por su comprensión.


EDIT 2:

Esta es la configuración que creé para hadoop 0.18.3 conf/hadoop-site.xml usando la respuesta proporcionada por 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> 

Respuesta

6

Sí, esto es posible, aunque estoy usando 0.19.2. No estoy muy familiarizado con 0.18.3, pero estoy bastante seguro de que no debería marcar la diferencia.

Sólo asegúrese de que fs.default.name se establece en el valor por defecto (que es file:///), y mapred.job.tracker se establece en el punto donde se aloja su JobTracker. Luego, inicie sus daemons usando bin/start-mapred.sh. No necesita iniciar el namenode o los nodos de datos. En este punto, debería poder ejecutar su mapa/reducir trabajos usando bin/hadoop jar ...

Hemos utilizado esta configuración para ejecutar Hadoop en un pequeño grupo de máquinas usando un dispositivo Netapp montado sobre NFS.

+0

Sí, gracias. Eso funciona genial Voy a publicar mi configuración después de haber hecho algunas pruebas adicionales. –

Cuestiones relacionadas