Pregunta

Tengo que escribir los datos a Hadoop (HDFS) de fuentes externas como una caja de ventanas. Ahora he estado copiando los datos en el NameNode y el uso del HDFS ponen comando para ingerirlo en el clúster. En mi navegación del código no vi una API para hacer esto. Estoy esperando que alguien me puede demostrar que estoy equivocado y no hay una manera fácil de codificar los clientes externos contra HDFS.

¿Fue útil?

Solución

Instalar Cygwin, instale localmente Hadoop (sólo tiene el binario y configuraciones que apuntan a su NN - no hay necesidad de ejecutar realmente los servicios), ejecute hadoop fs -copyFromLocal /path/to/localfile /hdfs/path/

También puede utilizar el nuevo escritorio de Cloudera para cargar un archivo a través de la interfaz web, a pesar de que podría no ser una buena opción para los archivos gigantes.

También hay una superposición de WebDAV para HDFS, pero no sé qué tan estable / confiable que es.

Otros consejos

Hay una API en Java. Se puede utilizar mediante la inclusión del código de Hadoop en su proyecto. El JavaDoc es bastante útil en general, pero, por supuesto, usted tiene que saber, lo que busca * g * http://hadoop.apache.org/common/docs/

Para su problema particular, echar un vistazo a: http: //hadoop.apache. org / comunes / docs / / corriente API / org / apache / hadoop / fs / FileSystem.html (Esto se aplica a la última versión, consultar otros JavaDocs para diferentes versiones!)

Una llamada típica sería la siguiente: Filesystem.get(new JobConf()).create(new Path("however.file")); Que devuelve una corriente que puede manejar con JavaIO regular.

Para el problema de la carga de los datos que necesitaba para poner en HDFS, elijo la vuelta al problema.

En lugar de cargar los archivos en HDFS desde el servidor donde residían, escribí un mapa de Java / Reducir trabajo donde el asignador de leer el archivo desde el servidor de archivos (en este caso a través de https), a continuación, escribir directamente a HDFS ( a través de la Java API ) .

La lista de archivos se lee de la entrada. entonces tengo una los scripts de un archivo con la lista de archivos para comprobar, carga el archivo en HDFS (utilizando hadoop DFS -poner ), a continuación, iniciar el mapa / reducir el trabajo con un buen número de mapeadores.

Esto me da un excelente rendimiento de la transferencia, ya que varios archivos se leen / escriben al mismo tiempo.

Quizás no sea la respuesta que estabas buscando, pero es de esperar útiles de todos modos: -).

Acerca de 2 años después de mi última respuesta, ahora hay dos nuevas alternativas - Hoop / HttpFS y WebHDFS.

En cuanto aro, se anunció por primera vez en Cloudera de el blog y puede ser descargado desde un . He conseguido que esta versión para hablar correctamente a al menos Hadoop 0.20.1, es probable que pueda hablar con versiones ligeramente mayores también.

Si se está utilizando Hadoop 0.23.1, que en el momento de la escritura todavía no se libera, aro es en cambio parte de Hadoop como su propio componente, los HttpFS. Este trabajo fue realizado como parte de HDFS-2178. Hoop / HttpFS puede ser un indicador no sólo a HDFS, sino también a otros sistemas de archivos compatibles con Hadoop como Amazon S3.

Hoop / HttpFS funciona como su propio servicio independiente.

También hay WebHDFS cuales Se ejecuta como parte de los servicios NameNode y DataNode. También proporciona una API REST, que, si he entendido bien, es compatible con la API HttpFS. WebHDFS es parte de Hadoop 1.0 y una de sus principales características es que proporciona la localidad de datos -. Cuando estás haciendo una solicitud de lectura, se le redirige al componente WebHDFS en el DataNode donde residen los datos

¿Qué componente para elegir depende un poco en su configuración actual y lo que hay que tienes. Si necesita una interfaz REST HTTP para HDFS y ahora se está ejecutando una versión que no incluye WebHDFS, comenzando con el aro del repositorio GitHub parece la opción más fácil. Si está ejecutando una versión que incluye WebHDFS, me gustaría ir para que, a menos que necesite algunas de las características del aro tiene que carece WebHDFS (acceso a otros sistemas de archivos, la limitación de ancho de banda, etc.)

Parece que hay una página dedicada ahora para esto en http://wiki.apache.org/hadoop / MountableHDFS :

  

Estos proyectos (enumerados a continuación) permiten HDFS para ser montado (en la mayoría   sabores de Unix) como un sistema de archivos estándar utilizando el comando mount.   Una vez montado, el usuario puede operar en una instancia de hdfs usando   las utilidades estándar de Unix como 'ls', 'cd', 'cp', 'mkdir', 'encontrar',   'Grep', o usar las bibliotecas estándar POSIX como abierta, escribir, leer, cerca   de C, C ++, Python, Ruby, Perl, Java, golpe, etc.

Más tarde se describe estos proyectos

  
      
  • contrib / fusible-DFS está construido sobre el fusible, un poco de pegamento C, libhdfs y la hadoop-dev.jar
  •   
  • fusible-J-hdfs está construido sobre el fusible, fusible para Java, y el hadoop-dev.jar
  •   
  • hdfs-fusible - un proyecto de código de Google es muy similar a contrib / fusible-DFS
  •   
  • WebDAV - hdfs expuestos como un recurso WebDAV MAPR - contiene un código cerrado hdfs sistema de archivos compatible que admita la lectura / escritura   el acceso NFS
  •   
  • HDFS NFS proxy - exporta HDFS como NFS sin el uso de fusibles. Compatible con Kerberos y reordena escribe de modo que se escriben en hdfs   secuencialmente.
  •   

No he probado ninguno de estos, pero voy a actualizar la respuesta cuanto tenga la misma necesidad que el OP

Ahora también puede tratar de utilizar Talend, que incluye componentes para la integración de Hadoop.

puede probar HDFS de montaje en la máquina (lo llaman machine_X), donde se está ejecutando el código y machine_X debe tener conectividad InfiniBand con los HDFS Mira esto, https://wiki.apache.org/hadoop/MountableHDFS

También puede utilizar HadoopDrive ( http://hadoopdrive.effisoft.eu ). Es una extensión de shell de Windows.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top