美文网首页
java远程操作HDFS

java远程操作HDFS

作者: 臻霏 | 来源:发表于2019-06-01 23:09 被阅读0次

java远程操作hadoop的分布式文件系统hdfs

需要导入的hadoop的jar包
hadoop解压包中有所需的jar包
hadoop-2.5.2/share/hadoop/common/hadoop-common-2.5.2.jar
hadoop-2.5.2/share/hadoop/common/lib/*.jar(lib下的全部jar包)
hadoop-2.5.2/share/hadoop/hdfs/hadoop-hdfs-2.5.2.jar

如果是集群内部用eclipse中的java程序访问hdfs的话,可以直接写代码操作,如果是远程操作的话需要配置hdfs-site.xml文件,关闭权限检查,不配置的话会报错Permission denied

hdfs-site.xml
<name>dfs.permissions.enabled</name>
<value>false</value>


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

/**
 * java远程或本地操作hdfs文件系统(eclipse)
 * @author root
 *
 */
public class HDFSFile {

    public static void main(String [] args) throws IOException {
        /**
         * java读取hdfs文件信息
         */
        /* 方法一 */
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
        URL url = new URL("hdfs://master:9000/hello.txt");
        InputStream in = url.openStream();
        IOUtils.copyBytes(in,System.out,4096,true);//in是输入流,System.out是标准输出,4096是指定缓存区大小,true是读完后把输入流自动关闭
        
        /* 方法二 */
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://master:9000");
        FileSystem filesystem = FileSystem.get(conf);
    
        boolean success = filesystem.mkdirs(new Path("/test"));
        System.out.println(success);
        
        // 判断文件夹是否存在
        success = filesystem.exists(new Path("/hello.txt"));
        System.out.println(success);
        
        // 删除文件夹或文件
        success = filesystem.delete(new Path("/test"),true);
        System.out.println(success);
        // true --> now   false --> delete home
        
        success = filesystem.exists(new Path("/test"));
        System.out.println(success);
        
        // 向hdfs文件中写入数据
        FSDataOutputStream out = filesystem.create(new Path("/test.data"),true);
        FileInputStream in = new FileInputStream("/root/a.txt");
        
        byte [] buf = new byte[4096];
        int len = in.read(buf);
        while (len != -1) {
            out.write(buf,0,len);
            len = in.read(buf);
        }
        in.close();
        out.close();
        
        // 查看文件hdfs文件目录
        FileStatus[] fs = filesystem.listStatus(new Path("/"));
        for(FileStatus status :fs) {
            System.out.println(status.getPath());
            System.out.println(status.getPermission());
            System.out.println(status.getReplication());//copy how much
        }
    }
}

相关文章

  • java远程操作HDFS

    java远程操作hadoop的分布式文件系统hdfs 需要导入的hadoop的jar包hadoop解压包中有所需的...

  • Hadoop HDFS文件操作API

    使用JAVA操作HDFS: 使用Shell操作HDFS: Usage: hadoop fs [generic op...

  • java操作HDFS

    操作步骤 IDEA + MAVEN 创建JAVA工程本地安装maven,IDEA配置maven并创建相应的mave...

  • java远程使用HDFS权限问题解决

    上次使用hdfs的时候解决了依赖包异常问题,但是因为hdfs的部署问题并没有完全调试通java远程调用。今天hdf...

  • 使用IO流操作HDFS

    除了可以使用系统API进行HDFS操作,还可以通过Java的IO流进行文件的上传和下载。适用于HDFS的自定义操作...

  • java api操作HDFS

    如果是使用maven的话,导入如下依赖即可,否则需要在解压好的hadoop文件夹下找到common文件夹和hdfs...

  • java api操作HDFS

    如果是使用maven的话,导入如下依赖即可,否则需要在解压好的hadoop文件夹下找到common文件夹和hdfs...

  • java api 操作hdfs

    引入pom 依赖。hadoop-client 版本对应 cdh版本

  • Java代码操作HDFS

    1. 创建文件夹示例 1.1 环境准备 java hadoop解压hadoop到本地,配置环境变量 1.2 新建m...

  • java api操作HDFS

    如果是使用maven的话,导入如下依赖即可,否则需要在解压好的hadoop文件夹下找到common文件夹和hdfs...

网友评论

      本文标题:java远程操作HDFS

      本文链接:https://www.haomeiwen.com/subject/lysztctx.html