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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 【大数据开发技术】实验04-HDFS文件创建与写入

HDFS文件创建与写入

一、实验目标

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

二、实验要求

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

三、实验内容

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

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


四、实验步骤

  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的功能,但还有一些需要改进的地方。例如,可以添加参数校验功能,防止空指针异常;可以添加日志输出功能,方便查看程序运行情况。

运行结果

  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的功能,并且考虑了系统的可靠性和稳定性问题。但是,同样需要注意代码中的参数校验和日志输出等问题,以提高代码的健壮性和可维护性。运行结果

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
9月前
|
人工智能 DataWorks 大数据
大数据AI一体化开发再加速:DataWorks 支持GPU类型资源
大数据开发治理平台 DataWorks 的Serverless资源组支持GPU资源类型,以免运维、按需付费、弹性伸缩的Serverless架构,将大数据处理与AI开发能力无缝融合。面向大数据&AI协同开发场景,DataWorks提供了交互式开发和分析工具Notebook。开发者在创建个人开发环境时,可以选择GPU类型的资源作为Notebook运行环境,以支持进行高性能的计算工作。本教程将基于开源多模态大模型Qwen2-VL-2B-Instruct,介绍如何使用 DataWorks Notebook及LLaMA Factory训练框架完成文旅领域大模型的构建。
620 24
|
10月前
|
数据采集 机器学习/深度学习 DataWorks
DataWorks产品评测:大数据开发治理的深度体验
DataWorks产品评测:大数据开发治理的深度体验
450 1
|
消息中间件 Java 大数据
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
272 2
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
201 2
|
JSON 分布式计算 大数据
大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出
大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出
155 1
|
消息中间件 资源调度 大数据
大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器
大数据-112 Flink DataStreamAPI 程序输入源 DataSource 基于文件、集合、Kafka连接器
204 0
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
181 0
|
SQL 分布式计算 大数据
代码编码原则和规范大数据开发
此文档详细规定了SQL代码的编写规范,包括代码的清晰度,执行效率,以及注释的必要性。它强调所有SQL关键字需统一使用大写或小写,并禁止使用select *操作。此外,还规定了代码头部的信息模板,字段排列方式,INSERT, SELECT子句的格式,运算符的使用,CASE语句编写规则,查询嵌套规范,表别名定义,以及SQL注释的添加方法。这些规则有助于提升代码的可读性和可维护性。
266 0
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
471 0
|
8月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
885 70

热门文章

最新文章