zoukankan      html  css  js  c++  java
  • HDFS文件系统简单的Java读写操作

    package com.cn.hadoop.hdfs;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IOUtils;
    import org.junit.Before;
    import org.junit.Test;
    
    public class HdfsApi {
    
        // 定义一个fileSystem的变量,用的是Hadoop的包
        FileSystem fileSystem = null;
        
        // 添加一个注解
        @Before
        public void getfileSystem() throws IOException, InterruptedException, URISyntaxException{
            
            // 获取一个具体的文件系统对象
            fileSystem = FileSystem.get(
                // 创建一下HDFS文件系统的访问路径,就是Hadoop配置文件中的core-sit.xml中的HDFS文件系统的所在机器
                    new URI("hdfs://linux.centos.one:8020"),    
                // 创建一个Hadoop的配置文件的类
                    new  Configuration(),
                // 就是Linux启动的用户名
                    "hadoop");
        }
        
        /**
         *  从HDFS文件系统下载文件
         *      首先编写一个输入流,将内容输入到本地文件缓存。
         *      然后编写一个输出流,将内容输出到本地磁盘。
         */  
        /**  
         * @throws IOException 
         * @throws IllegalArgumentException 
         */
        @Test
        public void testDownload() throws IllegalArgumentException, IOException{
            
            // 构建一个输入流,将需要下载的文件写入到客户端的内存中
            FSDataInputStream in = fileSystem.open(new Path("/user/beifeng/mapreduce/wordcount/input/wc.input"));
            
            // 构建一个输出流,将需要下载的文件从内存中写入到本地磁盘
            FileOutputStream out = new FileOutputStream("D://11111111111111111111111111111111111111.txt");
            
            /**
             * 参数说明:
             *     in 
             *         代表输入流,读取HDFS文件系统的文件到本机内存中
             *     out
             *         代表输出流,将本机内存中的文件写入到本地磁盘中
             *     4096
             *         缓冲区大小
             *     true    
             *         自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流
             *         
             *         手动关闭输入输出流:
             *             IOUtils.closeStream(in);
             *            IOUtils.closeStream(out);
             */
            IOUtils.copyBytes(in, out, 4096, true);
            
        }
        
        /**
         * 上传文件到HDFS文件系统
         * @throws IOException 
         * @throws IllegalArgumentException 
         */
        @Test
        public void testUpload() throws IllegalArgumentException, IOException{
            
            // 构建一个输入流,将本机需要上传的文件写入到内存中
            FileInputStream in = new FileInputStream("D:\settings.xml");
            
            // 构建一个输出流,将客户端内存的数据写入到HDFS文件系统指定的路径中
            FSDataOutputStream out = fileSystem.create(new Path("/input/sting.xml"), true);
            
            /*
             *    参数说明:
             *     in 
             *         代表输入流,读取HDFS文件系统的文件到本机内存中
             *     out
             *         代表输出流,将本机内存中的文件写入到本地磁盘中
             *     4096
             *         缓冲区大小
             *     true    
             *         自动关闭流,如果不使用自动关闭的话需要手动关闭输入输出流
             *         
             *         手动关闭输入输出流:
             *             IOUtils.closeStream(in);
             *            IOUtils.closeStream(out);
             */
            IOUtils.copyBytes(in, out, 4096, true);
            
        }
        
        /**
         * 测试创建一个目录
         *     bin/hdsf dfs -mkdir [-p] /dir
         * @throws IOException 
         * @throws IllegalArgumentException 
         */
        @Test
        public void testMakeDir() throws IllegalArgumentException, IOException{
            
            boolean isSuccess = fileSystem.mkdirs(new Path("/testMK"));
            
            System.out.println(isSuccess);
            
        }
        
        /**
         * 测试删除目录/文件:
         * @throws IOException 
         * @throws IllegalArgumentException 
         *         
         */
        @Test
        public void testDel() throws IllegalArgumentException, IOException{
            System.out.println(
                    // 返回的是一个boolean类型的值
            fileSystem.delete(
                    // 指定要删除的目录
                        new Path("/testMK"), 
                    // 是否使用递归删除
                        true
                    ));
        }
    }
  • 相关阅读:
    js中获取页面被卷去的高度等一些属性
    【转】js中cookie的使用详细分析
    2017-3-16 Tsql基础编程 存储过程 触发器 级联删除
    采用ajax请求返回得到json数据,取出具体项却为undefined
    读书笔记-你不知道的JavaScript(上) 【转自 http://muyunyun.cn/】
    AJAX 三级联动
    winform 打印控件
    winform 之MDI容器
    ajax完整版
    【2017-7-17】动软代码生成器 数据库连接 配置失败 解决方法
  • 原文地址:https://www.cnblogs.com/name-hanlin/p/7768305.html
Copyright © 2011-2022 走看看