Hadoop学习篇(二)——HDFS编程操作2

news/2024/5/20 1:15:58 标签: hadoop, java, hdfs, linux, 大数据

上篇链接:

Hadoop学习篇(二)——HDFS编程操作1

Hadoop学习篇(二)——HDFS编程操作2

说明:如涉及到侵权,请及时联系我,并在第一时间删除文章。

2.3.2 编程操作

HDFS的编程操作,实际上就是用高级语言模拟HDFS的命令行操作,从而做到机器代替人工的大量处理。

我们的编程操作主要进行模拟的有:

  • 判断文件是否存在
  • 实现ls命令
  • 实现cat命令
  • 写入HDFS
  • HDFS文件的下载与上传
2.3.2.4 写入HDFS

写入文件到HDFS通过创建FSDataOutputStream数据输出流,将写入内容转换为二进制形式放入流中,写入文件。

java">import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.IOException;

public class HadoopOp {
    
    private static Configuration conf;
    private static FileSystem fs;
    
    public static void main(String[] args) {
        conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        fs = FileSystem.get(conf);
        writeFile();
        fs.close();
    }
    
    public static void writeFile(Configuration conf, FileSystem fs, String filePath, String content) {
        try {
            byte[] buff = content.getBytes(); // 写入文件内容转换为字节数组
            FSDataOutputStream fsDataOutputStream = fs.create(new Path(filePath));
            fsDataOutputStream.write(buff, 0, buff.length);	// 写入文件内容
            fsDataOutputStream.close();
        } catch (IOExpection e) {
            e.printStackTrace();
        } finally {
            System.out.println(content + "\n已写入\n" + filePath);
        }
    }
}

运行结果:
在这里插入图片描述
查看HDFS上创建的文件内容:
在这里插入图片描述
在进行HDFS写入文件内容的编程操作时,应注意两点:1、如果文件不存在,程序会自动创建;2、对于已存在文件的写入,这种写操作是覆盖写,和Java读写本地文件不同的是,HDFS没有提供追加写的相关API,这里我们可以自己通过修改变成逻辑,来实现追加写入。

2.3.2.5 HDFS文件的下载与上传
java">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 java.io.*;

public class HadoopOp {
    
    private static Configuration conf;
    private static FileSystem fs;
    
    public static void main(String[] args) {
        conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9000");
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        fs = FileSystem.get(conf);
        System.out.println("----------------------------------------------------------------");
        putFile(conf, fs, "/usr/local/Cellar/hadoop/Exp/wanghe/wanghe1.txt", "/wanghe/text/wanghe1.txt");
        System.out.println("----------------------------------------------------------------");
        getFile(conf, fs, "/usr/local/Cellar/hadoop/Exp/wanghe/wanghe2.txt", "/wanghe/text/wanghe2.txt");
        fs.close();
    }
    
    public static void putFile(Configuration conf, FileSystem fs, String localFile, String hdfsPath) {
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(localFile));
            FSDataOutputStream fileOutputStream = fs.create(new Path(hdfsPath));
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len = fileInputStream.read()) != -1) {
                fileOutputStream.write(bytes, 0, len);
            }
            fileInputStream.close();
            fileOutputStream.close();
            System.out.println("本地文件:" + localFile + "\n已写入HDFS:" + hdfsPath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void getFile(Configuration conf, FileSystem fs, String localFile, String hdfsPath) {
        try {
            FSDataInputStream fsDataInputStream = fs.create(new Path(hdfsPath));
            File file = new File(localFile);
            if (!file.isExists()) {
                file.createNewFile();
            }
            FileOutputStream fileOutputStream = new FileOutputStream(file, true);	// 追加写入文件
            byte[] b = new byte[1024];
            int len = 0;
            while ((len = fileInputStream.read(b)) != -1) {
                fileOutputStream.write(bytes, 0, len);
            }
            fsDataInputStream.close();
            fileOutputStream.close();
            System.out.println("HDFS文件:" + hdfsPath + "\n已下载到本地:" + localFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

运行结果为:
在这里插入图片描述
我们查看下载至本地文件内容与源文件内容:
在这里插入图片描述
我们查看上传至HDFS文件内容与源文件内容:
在这里插入图片描述


http://www.niftyadmin.cn/n/939688.html

相关文章

FMS的集群方法

转自:http://blog.sina.com.cn/s/blog_58b3d5d60100cnrs.html fms的集群方法有三种: 显式或隐式代理,和反向代理集群。 下面是显式或隐式代理: 边缘服务器是由配置文件的值定义的.有显式和隐式(也被称为匿名)代理方法,截取和收集用户连接到源服务器应用程…

转:Java学习路线图,专为新手定制的Java学习计划建议

转自:http://tieba.baidu.com/f?kz692446591 怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME&#xf…

数字图像处理MATLAB学习笔记(一)

数字图像处理MATLAB学习笔记(一) 灰度转换与空间滤波 本节主要使用Matlab语言进行灰度转换与空间滤波的使用 并对相关数学原理进行总结 1. Intensity Transformer Function(灰度转换函数) 这里Matlab语言中提供有多个灰度转换函数可使用。 灰度转换…

Ubuntu 更新后崩溃:Mount of root filesystem failed

问题: 版本是9.10,一次更新后,重启,进不了系统。黑屏提示:Mount of root filesystem failed. A maintenance shell will now started…. 解决办法: 1、在光驱插入Ubuntu安装盘,选择“试用…

数字图像处理MATLAB学习笔记(二)

数字图像处理MATLAB学习笔记(二) Filtering in the Frequency Domain频域处理 主要通过Matlab语言学习傅立叶变换下的频域处理和实践 1. The 2-D Discrete Fourier Transform(2-D DFT)二维离散傅里叶变换 1.1 DFT和IDFT 其中满足的条件:…

spring2.5整合quartz几步走

spring2.5整合quartz几步走&#xff1a; 需要加包&#xff1a;quartz-all-1.6.0.jar、commons-collections.jar、jta.jar 1、增加schedulingContext.xml 内容如下&#xff1a; <?xml version"1.0" encoding"GBK"?> <beans xmlns"http://ww…

数字图像处理MATLAB学习笔记(三)

数字图像处理MATLAB学习笔记&#xff08;三&#xff09; Image Restoration and Reconstruction 图像复原 1. A Model of the Image Degradation/Restoration Process Image Degradation Process&#xff1a;对图像进行退化和噪声添加处理。 Input&#xff1a;Imgae&#xf…

ATM 点到点配置

ATM 点到点配置 很多爱好网络的人员&#xff0c;对ATM都感觉到陌生&#xff0c;因为没有ATM交换机&#xff0c;而无法进行实验&#xff0c;DynamipsGUI也能进行ATM的实验&#xff0c;下面是通过这个软件进行的ATM配置&#xff0c;希望能帮助大家来学习ATM。 在此实验中路由器RA…