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 simpleFSDataInputStream 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()
}
}