首页 > 编程语言 > 详细

Hadoop基础---HDFS的Java客户端编写

时间:2020-02-15 15:48:20      阅读:77      评论:0      收藏:0      [点我收藏+]

一:导入jar包

(一)定义用户依赖库

技术分享图片

技术分享图片

(二)导入 hdfs基础jar包

技术分享图片

(三)导入hdfs基础jar包所依赖的库 

技术分享图片

(四)导入公共jar包 

技术分享图片

(五)导入公共jar包所需lib库

技术分享图片

(六):创建类

技术分享图片

二:实现下载文件

(一)要访问hdfs,需要获取FileSystem类(必须是org.apache.hadoop.fs包下)的实例对象

import org.apache.hadoop.fs.FileSystem;

技术分享图片

其中FileSystem类是抽象类,要获取对象,需要调用静态方法:

FileSystem fs = FileSystem.get(conf);

(二)FileSystem实例化需要用到配置信息Configuration类

import org.apache.hadoop.conf.Configuration;
Configuration conf = new Configuration();    

注意:配置类需要core-site.xml和hdfs-site.xml文件,才可以解析hdfs://链接

技术分享图片

(三)获取hdfs系统文件路径,打开hdfs输入流

    Path f = new Path("hdfs://hadoopH1:9000/jdk-7u80-linux-x64.tar.gz"); //指定路径
    FSDataInputStream in = fs.open(f); //打开hdfs输入流

(四)打开本地文件输出流,利用IOUtils将输入流数据拷贝到输出流

    FileOutputStream out = new FileOutputStream("/home/hadoop/Download/jdk.tar.gz");    //打开文件输出流,输入文件路径
    IOUtils.copy(in, out);

(五)使用fs.copyToLocalFile(src, dst);下载

(六):全部代码实现

1.全部代码

package cn.hadoop.hdfs;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HdfsBase {

    public static void main(String[] args) throws IOException {
        
        //要访问hdfs,需要获取FileSystem类(必须是org.apache.hadoop.fs包下)的实例对象
        Configuration conf = new Configuration();    
        FileSystem fs = FileSystem.get(conf);    //fs对象就是HDFS的客户端,用fs就可以读文件,写文件,查看文件...
        
        //下载文件
        Path f = new Path("hdfs://hadoopH1:9000/jdk-7u80-linux-x64.tar.gz");    //指定路径
        FSDataInputStream in = fs.open(f);    //打开hdfs输入流
        
        FileOutputStream out = new FileOutputStream("E:\\jdk.tar.gz");    //打开文件输出流,输入文件路径
        IOUtils.copy(in, out);
        //上传数据到hdfs文件系统
    }

}

2.代码运行

技术分享图片

三:实现文件上传

(一)代码实现

    public void upload() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoopH1:9000/");
        FileSystem fs = FileSystem.get(conf);
        
        Path f = new Path("hdfs://hadoopH1:9000/Day01/linux-2.6.tar.gz");
        FSDataOutputStream out = fs.create(f);
        
        FileInputStream in = new FileInputStream("E:\\源码\\linux-2.6.19.tar.gz");
        IOUtils.copy(in, out);    //上传数据
    }

(二)处理权限问题

技术分享图片

因为windows下是使用ssyfj这个文件名进行的文件上传,而实际上Hadoop下文件拥有用户组是supergroup,用户是hadoop

技术分享图片

1.设置用户名为hadoop(在运行配置中):------程序中配置

技术分享图片 

-DHADOOP_USER_NAME=hadoop

2.使用FileSystem.get参数配置

技术分享图片

 

 

    public void upload2() throws IOException, InterruptedException, URISyntaxException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoopH1:9000/");
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoopH1:9000/"),conf,"hadoop");
        
        fs.copyFromLocalFile(new Path("E:\\源码\\linux-2.6.19.tar.gz"), new Path("hdfs://hadoopH1:9000/Day01/linux2.6.taz"));
    }

3.在Hadoop HDFS文件系统中配置目录的权限(任何人都可读可写)------HDFS配置

技术分享图片

(三)运行结果显示

技术分享图片

四:创建目录

    public void mkdir() throws IOException, InterruptedException, URISyntaxException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoopH1:9000/");
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoopH1:9000/"),conf,"hadoop");
        
        fs.mkdirs(new Path("/new/dir/"));
    }

技术分享图片

五:目录/文件删除

    public void rm() throws IOException, InterruptedException, URISyntaxException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoopH1:9000/");
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoopH1:9000/"),conf,"hadoop");
        
        fs.delete(new Path("/new"), true);    //可以设置是否递归删除
    }

技术分享图片

六:查看、移动、重命名....

Hadoop基础---HDFS的Java客户端编写

原文:https://www.cnblogs.com/ssyfj/p/12310997.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!