【大数据开发技术】实验04-HDFS文件创建与写入

news2025/6/26 4:54:44

文章目录

  • 一、实验目标
  • 二、实验要求
  • 三、实验内容
  • 四、实验步骤

一、实验目标

  1. 熟练掌握hadoop操作指令及HDFS命令行接口
  2. 掌握HDFS原理
  3. 熟练掌握HDFS的API使用方法
  4. 掌握单个本地文件写入到HDFS文件的方法
  5. 掌握多个本地文件批量写入到HDFS文件的方法

二、实验要求

  1. 给出主要实验步骤成功的效果截图。
  2. 要求分别在本地和集群测试,给出测试效果截图。
  3. 对本次实验工作进行全面的总结。
  4. 完成实验内容后,实验报告文件名显示学号姓名信息。

三、实验内容

  1. 使用FileSystem将单个本地文件写入到HDFS中当前不存在的文件,实现效果参考下图:
    1

  2. 使用FileSystem将本地文件追加到HDFS中当前存在的文件中,实现效果参考下图:
    2

四、实验步骤

  1. 使用FileSystem将单个本地文件写入到HDFS中当前不存在的文件

程序设计

package hadoop;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;

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 org.apache.hadoop.io.IOUtils;

public class WJW {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        args = new String[2];
        args[0] = "/home/zkpk/experiment/wjw01.txt";
        args[1] = "hdfs://master:9000/wjw02.txt";
        Configuration conf = new Configuration();
        BufferedInputStream in = null;
        FileSystem fs = null;
        FSDataOutputStream out = null;
        try{
            in = new BufferedInputStream(new FileInputStream(args[0]));
            fs = FileSystem.get(URI.create(args[1]), conf);
            out = fs.create(new Path(args[1]));
            IOUtils.copyBytes(in, out, 4096, false);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
            if(fs != null){
                try{
                    fs.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }

    }

}

程序分析

该代码实现了将本地文件上传到Hadoop分布式文件系统HDFS中的功能。代码结构简单明了,主要包括以下几个步骤:

  1. 定义参数args,参数args[0]表示本地文件路径,参数args[1]表示HDFS文件路径。

  2. 创建Configuration对象,用于读取Hadoop配置信息。

  3. 创建BufferedInputStream流,读取本地文件。

  4. 使用FileSystem.get()方法获取Hadoop分布式文件系统实例。

  5. 调用fs.create()方法,创建HDFS文件,并返回FSDataOutputStream对象用于向HDFS文件写入数据。

  6. 调用IOUtils.copyBytes()方法,将本地文件数据复制到HDFS文件中。

  7. 关闭流和Hadoop分布式文件系统实例。

该代码主要涉及以下几个重要知识点:

  1. Configuration对象:该对象用于读取Hadoop配置信息,如HDFS的地址、端口等信息。

  2. FileSystem对象:该对象用于操作Hadoop分布式文件系统,如创建文件、删除文件、读取文件等操作。

  3. BufferedInputStream流:该流用于读取本地文件数据。

  4. FSDataOutputStream对象:该对象用于向HDFS文件写入数据。

  5. IOUtils.copyBytes()方法:该方法用于将输入流中的数据复制到输出流中。

总体来说,该代码实现了将本地文件上传到HDFS的功能,但还有一些需要改进的地方。例如,可以添加参数校验功能,防止空指针异常;可以添加日志输出功能,方便查看程序运行情况。

运行结果

3

  1. 使用FileSystem将本地文件追加到HDFS中当前存在的文件中

程序设计

package hadoop;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;

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 org.apache.hadoop.io.IOUtils;

public class WJW01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        args = new String[2];
        args[0] = "/home/zkpk/experiment/wjw01.txt";
        args[1] = "hdfs://master:9000/wjw02.txt";
        Configuration conf = new Configuration();
        conf.set("fs.client.block.write.replace-datanode-on-failure.enable", "true");
        conf.set("fs.client.block.write.replace-datanode-on-failure.policy", "Never");
        BufferedInputStream in = null;
        FileSystem fs = null;
        FSDataOutputStream out = null;
        try{
            in = new BufferedInputStream(new FileInputStream(args[0]));
            fs = FileSystem.get(URI.create(args[1]), conf);
            out = fs.append(new Path(args[1]));
            IOUtils.copyBytes(in, out, 4096, false);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
            if(fs != null){
                try{
                    fs.close();
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }

    }

}

程序分析

该代码实现了将本地文件追加上传到Hadoop分布式文件系统HDFS中的功能。代码结构与上传文件功能类似,主要包括以下几个步骤:

  1. 定义参数args,参数args[0]表示本地文件路径,参数args[1]表示HDFS文件路径。

  2. 创建Configuration对象,用于读取Hadoop配置信息。

  3. 设置配置信息:设置“fs.client.block.write.replace-datanode-on-failure.enable”为“true”,表示在数据节点故障时启用块写入数据节点更换机制;设置“fs.client.block.write.replace-datanode-on-failure.policy”为“Never”,表示块写入数据节点故障时不替换数据节点。

  4. 创建BufferedInputStream流,读取本地文件。

  5. 使用FileSystem.get()方法获取Hadoop分布式文件系统实例。

  6. 调用fs.append()方法,获取FSDataOutputStream对象用于向HDFS文件追加数据。

  7. 调用IOUtils.copyBytes()方法,将本地文件数据复制追加到HDFS文件中。

  8. 关闭流和Hadoop分布式文件系统实例。

需要注意的是,该代码使用了追加上传文件的方式,因此可以将本地文件的数据追加到HDFS文件的末尾,而不会影响原有的HDFS文件数据。同时,设置数据节点更换机制可以提高系统的可靠性和稳定性,避免数据节点故障导致数据丢失的情况。

总体来说,该代码实现了将本地文件追加上传到HDFS的功能,并且考虑了系统的可靠性和稳定性问题。但是,同样需要注意代码中的参数校验和日志输出等问题,以提高代码的健壮性和可维护性。

运行结果

4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【用unity实现100个游戏之12】unity制作一个俯视角2DRPG《类星露谷物语》资源收集游戏demo

文章目录 前言加快编辑器运行速度素材(1)场景人物(2)工具 一、人物移动和动画切换二、走路灰尘粒子效果探究实现 三、树木排序设计方法一方法二 四、绘制拿工具的角色动画五、砍树实现六、存储拾取物品引入Unity 的可序列化字典类 七、实现靠近收获物品自动吸附八、树木被砍掉的…

PMP考试备考:两个月时间足够吗?

PMP(Project Management Professional)认证是全球范围内最受认可的项目管理专业资格之一。对于想要提升项目管理技能和职业发展的人来说,PMP认证是一个重要的里程碑。然而,很多人担心备考时间不足以充分准备PMP考试。那么&#xf…

CFimagehost私人图床本地部署结合cpolar内网穿透实现公网访问

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

安防监控/视频云存储/视频智能分析:人员打架/扭打算法识别

随着社会压力激增,越来越多人们性格异常暴躁,一旦遇到摩擦与争执就很容易引起打架斗殴行为。配置TSINGSEE青犀人员打架识别算法的主要目的,是提高公共场所的安全性和减少危险事件的发生。通过使用打架识别算法,可以及时发现并识别…

Redis缓存与从数据取数据性能比较

Redis缓存与从数据取数据性能比较 为什么使用Redis 使用Redis缓存数据有多个原因,包括提高性能、降低数据库负载、减少响应时间和支持临时数据存储等。以下是一些主要原因以及Redis缓存的工作原理和好处: 1. 提高性能: 数据库查询通常是一…

APP推荐:安卓系统的开屏广告自动跳过助手

今天给大家推荐一款安卓系统的开屏广告自动跳过助手,感兴趣的朋友可以下载试试看! 一、软件简介 安卓系统的开屏广告自动跳过助手 自动跳过软件的实现,一般都是基于安卓的Accessibility“无障碍服务”实现。开启了无障碍服务的软件&#xf…

【大数据开发技术】实验03-Hadoop读取文件

文章目录 Hadoop读取文件一、实验目标二、实验要求三、实验内容四、实验步骤 Hadoop读取文件 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS原理掌握HDFS的API使用方法掌握通过URL类读取HDFS上的文件内容的方法掌握FileSystem读取HDFS上文件内容的方法 二、…

【STM32学习】I2C通信协议 | OLED屏

🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言:你只管努力,剩下的交给时间! 今天需要将代码烧录到开发板中,本喵默认大家都会创建工程,以及进行基本的…

黄金代理如何选择平台?窍门在这儿

作为一个黄金代理平台,什么才是最重要的呢?笔者认为以下三个方面是最重要的,一个是资质,第二个是口碑,第三个是平台的软件。这三者是成为黄金代理要考虑的最重要的三个因素,也直接关系大黄金代理的职业生涯…

大模型股票交易-挖掘新闻和情绪价值

埃隆马斯克 (Elon Musk) 的星际飞船于 2023 年 4 月 20 日升空后爆炸。想象一下,当时您正在观察股市,突然出现新闻,您会如何交易 TSLA 股票? 我希望您不要与我争论,您作为交易者(而不是投资者)要…

基于Kubernetes的Serverless PaaS稳定性建设万字总结

作者:许成铭(竞霄) 数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的 SLA 数字&#xff0c…

【Redis】第6讲 Redis的启动和关闭

前端运行方式 进入/usr/local/bin目录下查看是否有redis-server rootsue-virtual-machine:/opt/redis-5.0.4# cd /usr/local/bin/ 然后启动redis-server服务器 rootsue-virtual-machine:/usr/local/bin# redis-server 后台运行方式 前端运行的话,界面中输入任何…

MTR 网络连通性测试工具 基础入门 整理

MTR MTR的全称是 my traceroute,是一个集合了 ping 与 traceroute 功能的网络诊断工具,广泛应用于链路测试。相对于 traceroute 只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。因此,mtr能避免…

计算机网络 实验二 交换机的基本配置

实验二 交换机的基本配置 实验目的 • 掌握交换机的配置方式及切换命令; • 掌握交换机端口的基本配置; • 掌握交换机mac地址的查看与管理方法。 实验设备 以太网交换机一台服务器一台PC机五台配置电缆、网线若干 网络拓扑及IP地址分配 给计算…

AI写作生成器,文章生成器

AI写作生成器,也叫文章生成器。你是否常常为了创作大量文案而感到疲惫不堪?是否曾经为了一篇好的博客、一个广告文案或一封邮件而煞费苦心?AI写作生成器可以帮助你轻松解决这些问题,让文案创作变得如丝般顺滑。 147GPT批量文章生成…

Premiere Pro切换中文

安装了Premiere Pro突然发现界面语言是英文版的,首选项里也没有UI语言切换选项,怎么在不重装的情况下,将英文版Premiere Pro怎么切换成中文? 1、打开安装好的Premiere Pro,可以看到界面语言是英文版的; 2、进入pr后,新…

【Java 基础篇】Java网络编程实战:P2P文件共享详解

Java网络编程是现代软件开发中不可或缺的一部分,因为它允许不同计算机之间的数据传输和通信。在本篇博客中,我们将深入探讨Java中的P2P文件共享,包括什么是P2P文件共享、如何实现它以及一些相关的重要概念。 什么是P2P文件共享? …

Socket编程基础(1)

目录 预备知识 socket通信的本质 认识TCP协议和UDP协议 网络字节序 socket编程流程 socket编程时常见的函数 服务端绑定 整数IP和字符串IP 客户端套接字的创建和绑定 预备知识 理解源IP和目的IP 源IP指的是发送数据包的主机的IP地址,目的IP指的是接收数据包…

猫头虎博主的AI魔法课:一起探索CSDN AI工具集的奥秘!

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…