IDEA opera HDFS de forma remota

HDFS de gestión remota de IDEA

configuración del entorno local

ventanas
  1. descomprimir en disco local

  2. Configurar variables de entorno

  3. Agregar winutils.exe y hadoop.dll

    Hadoop en sí mismo no es compatible con Windows. Si necesita usarlo por completo, debe mover los dos archivos winutils.exe y hadoop.dll al directorio %HADOOP_HOME%\bin.

  4. Modificar hadoop-env.cmd

    @rem 这个是注释的内容
    @rem 设置JAVA_HOME,使用PROGRA~1表示Program Files文件夹
    set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_311
    
  5. verificar

    hadoop version
    
Mac OS
  1. descomprimir descomprimir

    tar -zxvf hadoop-3.3.1-aarch64 -C /opt/softwares
    
  2. Configurar variables de entorno

    vim ~/.bash_profile
    
    export HADOOP_HOME=/opt/softwares/hadoop-3.3.1
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin
    
  3. verificar

    hadoop version
    

IDEA crea un proyecto Maven

archivo pom
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>3.3.1</version>
    </dependency>
</dependencies>

Objeto del sistema de archivos API

@Test
public void testGetFileSystem() throws IOException {
    //创建配置对象,用于加载配置信息(四个默认的配置文件:core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml)
    Configuration conf = new Configuration();
    //修改fs.defaultFS属性的值
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    //使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统
    FileSystem fs = FileSystem.get(conf);
    System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
}

Carga de archivo API

@Test
public void testFileUpload() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);
    //将本地的一个文件D:/file1,上传到HDFS上 /file1
    //1. 使用Path描述两个文件
    Path localPath = new Path("D:/file1");
    Path hdfsPath = new Path("/file1");
    //2.调用上传方法
    fs.copyFromLocalFile(localPath,hdfsPath);
    //3.关闭
    fs.close();
    System.out.println("上传成功");
}

Descarga de archivos API

@Test
public void testFileDownload() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
    FileSystem fs = FileSystem.get(conf);
    //从HDFS上下载一个文件/file1,下载到本地 D:/file2
    //1. 使用Path描述两个文件
    Path hdfsfile = new Path("/file1");
    Path local = new Path("D:/file2");
    //2. 调用下载方法进行下载
    fs.copyToLocalFile(hdfsfile,local);
    fs.close();
    System.out.println("下载成功");
}

Directorio de creación de API

@Test
public void testMkdir() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);

    //1. 测试创建目录,描述一个目录
    Path hdfsfile = new Path("/dir1");
    //2. 调用创建目录的方法
    fs.mkdirs(hdfsfile);
    fs.close();
    System.out.println("创建成功");
}

Directorio de eliminación de API

@Test
public void testDelete() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);

    //1. 测试删除目录,描述一个目录
    Path hdfsfile = new Path("/dir1");
    //2. 调用创建目录的方法
    fs.delete(hdfsfile,true);
    fs.close();
    System.out.println("删除成功");
}

Cambio de nombre de API

@Test
public void testRename() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);

    //1. 测试重命名,将file1改为file01
    Path oldName = new Path("/file1");
    Path newName = new Path("/file01");
    //2.调用重命名方法
    fs.rename(oldName,newName);
    fs.close();
    System.out.println("命名成功");
}

Cargar archivos IOUtil

@Test
public void putFile() throws IOException, URISyntaxException {	
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    //1 连接HDFS 文件系统	
    Configuration conf=new Configuration();		
    //获得文件系统
    FileSystem fs=FileSystem.get(new URI("hdfs://182.168.10.101:9820"),conf);
    // 创建输入流,读取输入文件		
    FileInputStream input=new FileInputStream(new File("c://a.txt"));
    // 创建输出流
    FSDataOutputStream out=fs.create(new Path("/gg.txt"));
    //IO的流拷贝
    IOUtils.copyBytes(input, out, conf);
    //关闭资源
    IOUtils.closeStream(input);
    IOUtils.closeStream(out);
    System.out.println("上传完毕");
}

Archivo de descarga de IOUtil

@Test
public void getFile() throws IOException, URISyntaxException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    // 1 连接HDFS 文件系统
    Configuration conf = new Configuration();
    // 获得文件系统
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:9820"), conf);
    // 获取输入流 从HDFS上读取
    FSDataInputStream  input=fs.open(new Path("/gg.txt"));
    // 获取输出流
    FileOutputStream out=new FileOutputStream(new File("c://gg.txt"));
    //流拷贝
    IOUtils.copyBytes(input, out, conf);
    //关闭流
    IOUtils.closeStream(input);
    IOUtils.closeStream(out);		
    System.out.println("下载完成");
}

Estado de la documentación de la API

@Test
public void testFileStatus() throws IOException {
    // 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
    System.setProperty("HADOOP_USER_NAME", "root");
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
    FileSystem fs = FileSystem.get(conf);
    //1. 描述你要读取的文件 /file02
    Path path = new Path("/file02");
    //获取文件的状态信息
    RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);
    while(it.hasNext()){
        // 取出对象
        LocatedFileStatus status = it.next();
        System.out.println("name:"+status.getPath());
        //获取位置
        BlockLocation[] locate = status.getBlockLocations();
        for(BlockLocation bl:locate){
            System.out.println("当前块的所有副本位置:"+Arrays.toString(bl.getHosts()));
            System.out.println("当前块大小:"+bl.getLength());
            System.out.println("当前块的副本的ip地址信息:"+Arrays.toString(bl.getNames()));
        }
        System.out.println("系统的块大小:"+status.getBlockSize());
        System.out.println("文件总长度:"+status.getLen());
    }
}

Para obtener contenido más emocionante de big data, bienvenido a buscar " Qianfeng Education " en la estación B o escanear el código para obtener un conjunto completo de materiales   

[Educación de Qianfeng] Un conjunto completo de tutoriales sobre el desarrollo de big data, el video de aprendizaje de big data más completo de la historia

 

Supongo que te gusta

Origin blog.csdn.net/longz_org_cn/article/details/131548148
Recomendado
Clasificación