Red de conocimiento informático - Material del sitio web - Cómo almacenar archivos en hdfs en db2

Cómo almacenar archivos en hdfs en db2

HDFS es un sistema de archivos que almacena datos para ser procesados ​​por aplicaciones Hadoop. Es similar a los sistemas de archivos ordinarios de Unix y Linux. La diferencia es que implementa la idea del sistema de archivos GFS de Google. aplicable a Un sistema de archivos distribuido escalable para aplicaciones relacionadas con el procesamiento de datos distribuidos a gran escala. Tiene las siguientes ventajas:

1. En el almacenamiento distribuido, a menudo ocurren fallas en los nodos y HDFS puede monitorear continuamente, verificar errores, ser tolerante a fallas y recuperarse automáticamente

2. los archivos de almacenamiento distribuido son muy grandes, HDFS redefine el tamaño del bloque de cada E/S;

3. Para los negocios de motores de búsqueda, la mayoría de ellos solo agregarán nuevos datos al final del archivo. rara vez modifica los datos existentes. HDFS ha sido optimizado;

4. La API del sistema de archivos diseñada junto con la aplicación es de gran beneficio para la flexibilidad y aplicabilidad de todo el sistema

5. Agregue el mismo archivo en paralelo.

Aunque HDFS ha implementado tantas funciones, debido a que se implementó como un marco de código abierto, los desarrolladores de programas no necesitan comprender las operaciones de archivos subyacentes. Podemos usar un conjunto de herramientas de línea de comandos similares a. Comandos de archivos de Linux para operaciones de archivos.

Comandos básicos de archivo:

El formato es: hadoop fs -cmd

El nombre de cmd suele ser el mismo que el nombre del comando correspondiente en Unix. Por ejemplo, comando de lista de archivos: hadoop fs -ls

1. Agregar directorios y archivos

HDFS tiene un directorio de trabajo predeterminado/usuario/$USER, donde $USER es su nombre de usuario de inicio de sesión. . Sin embargo, el directorio no se creará automáticamente. Ahora usamos mkdir para crearlo. Yo uso chen como nombre de usuario.

hadoop fs -mkdir /user/chen

(el comando mkdir de hadoop creará automáticamente un directorio principal, similar al comando de Unix con -p)

Nosotros Ahora coloque en él un archivo del sistema de archivos local.

hadoop fs -put example.txt.

El último parámetro es un punto, lo que equivale a colocar el directorio de trabajo predeterminado, lo que equivale a hadoop fs -put example.txt. /user /chen

Después de colocar el archivo en HDFS, puede ejecutar un programa Hadoop para procesarlo.

2. Recuperar archivos

El comando get es lo opuesto al comando put. Copia archivos de HDFS al sistema de archivos local.

hadoop fs -get example.txt .

Copiar al directorio de trabajo actual local.

El otro es para mostrar datos, use cat

hadoop fs -cat example.txt

3. Eliminar archivos

comando rm.

hadoop fs -rm example.txt

También se puede usar para eliminar directorios vacíos

Leer y escribir HDFS mediante programación

Usar HDFS para brindarnos API proporcionada, también podemos acceder a ella.

La clase principal utilizada para las operaciones de archivos en Hadoop se encuentra en el paquete org.apache.hadoop.fs. Incluyendo apertura, lectura, escritura y cierre comunes.

El punto de partida de la API para los archivos Hadoop es la clase FileSystem, que es una clase abstracta que interactúa con el sistema de archivos. Obtenemos la instancia de FileSystem requerida llamando al método de fábrica FileSystem.get (Configuración conf). Interfaz FileSystem con objeto HDFS:

Configuración conf = new Configuration();

FileSystem hdfs = FileSystem.get(conf);//Obtener el objeto FileSystem de HDFS

Si queremos realizar la interacción entre HDFS y el sistema de archivos local, también necesitamos obtener el objeto FileSystem del sistema de archivos local

FileSystem local = FileSystem.getLocal(conf);// Obtenga el objeto FileSystem del sistema de archivos local

El siguiente código explica un ejemplo. Desarrollamos un programa PutMerge para fusionar archivos locales y colocarlos en HDFS. Debido a que los archivos grandes son más fáciles de procesar en HDFS. se utilizará a menudo en desarrollos futuros

[java] ver copia simple

import java.io.IOException

import org.apache.hadoop.conf. Configuración;

importar org.apache.hadoop.fs.FSDataInputStream;

importar org.apache.hadoop.fs.FSDataOutputStream; hadoop.fs.FileStatus;

importar org.apache.hadoop.fs.FileSystem

importar org.apache.hadoop.fs.Path

público; clase PutMerge {

public static void main(String[] args) throws IOException {

[java] ver copia simple

Configuración conf = nueva Configuración()

FileSystem hdfs =FileSystem.get(conf); //Obtener el objeto del sistema de archivos HDFS

FileSystem local = FileSystem.getLocal(conf); del sistema de archivos local

[java ] ver copia simple

Ruta inputDir = new Path(args[0]);//Establecer el directorio de entrada

Path hdfsFile = new Path(args[1]);// Establecer el directorio de salida

try{

FileStatus[] inputFiles = local.listStatus(inputDir);//El listStatus () El método de FileStatus obtiene una lista de archivos en un directorio

FSDataOutputStream out = hdfs.create(hdfsFile);//Generar flujo de salida HDFS

for(int i = 0; i < inputFiles.length; i ++){

System.out.println(inputFiles[i].getPath().getName()

<); p>[java] ver copia simple

FSDataInputStream in = local.open(inputFiles[i].getPath());//Abrir flujo de entrada local

byte[] buffer = nuevo byte[256];

int bytesRead = 0;

while((bytesRead = in.read(buffer))>0){

out. write(buffer,0,bytesRead);//Escribir a través de un bucle

}

in.close()

}

out.close();

}catch (IOException e) {

e.printStackTrace()

}

}