数据传承:多元环境下的HDFS文件上传与配置调优探索

2024-04-18 00:20

本文主要是介绍数据传承:多元环境下的HDFS文件上传与配置调优探索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 主要内容
  • 代码1部分
  • 代码2部分
  • 代码3部分


主要内容

完成windows上传文件到hdfs以及linux上传文件(集群中的节点、非集群中的节点)到hdfs文件的功能。尝试在程序中可以通过configuration对象配置分块大小,副本数等属性,观察不同配置文件对程序执行结果的影响。
例如:linux上传/usr/test文件夹的内容到hdfs的/myusr文件夹中。
【选择尝试】输出/myusr/test下的文件内容,输出信息:路径、文件名、所有者、是否是文件,块文件大小和块存储信息


代码1部分

该代码作用是 设置属性+本地文件上传到hdfs的文件中

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;public class testwinhdfs {public static void main(String[] args) throws Exception {Configuration conf = new Configuration();
//根据运行需要设置或不设置属性conf.set("fs.defaultFS", "hdfs://192.168.222.171:9000");System.out.println(conf.get("fs.defaultFS"));conf.set("dfs.replication","1");conf.set("dfs.blocksize","64M");FileSystem fs=FileSystem.get(conf);
//根据运行需要选择正确的文件路径fs.copyFromLocalFile(new Path("/usr/test/wr.txt"),new Path("/user"));fs.close();}
}

代码2部分

代码作用是:创建一些方法,创建目录,子目录,删除目录,修改文件名

import java.util.Arrays;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;public class localwrdir {
static	Configuration conf;
static	FileSystem fs;
public static void main(String args[]) throws Exception{getinit();//testcreatedir();//testmksubdir();//testdeldir();//testrenamedir();showall();//依次调用其他的方法 //例如:testcreatedir(); 
}public static void getinit() throws Exception{conf = new Configuration();//可以根据访问hdfs的要求设置fs.defaultFSfs = FileSystem.get(conf);}public static void testcreatedir() throws Exception {//创建目录Path p = new Path("E:/dst2");fs.mkdirs(p);fs.close();}public static void testmksubdir()throws Exception{//创建子目录Path p = new Path("E:/dst2/subdir");fs.mkdirs(p);fs.close();}public static void testdeldir()throws Exception{//删除目录及子目录Path p = new Path("E:/dst2");//第二个参数为是否级联(递归)删除,false为否,如果文件夹不为空则抛出异常IOExceptionfs.delete(p,true);fs.close();		}public static void testrenamedir()throws Exception{//修改文件夹名字Path p = new Path("E:/dst1");Path p2 = new Path("E:/mynewfolder");fs.rename(p, p2);}public static void showall()throws Exception{//显示文件元数据信息Path p = new Path("E:/mynewfolder");RemoteIterator<LocatedFileStatus> locatedStatus = fs.listLocatedStatus(p);//使用FileSystem对象的listLocatedStatus方法获取路径p下所有文件的状态迭代器//istFiles(p, true);while(locatedStatus.hasNext()){ //循环遍历所有文件状态LocatedFileStatus next = locatedStatus.next(); //获取下一个文件的状态BlockLocation[] blockLocations = next.getBlockLocations(); // 获取文件的块位置信息long blockSize = next.getBlockSize();//文件块的大小Path path = next.getPath();//文件的路径String name = path.getName();//文件的名称Path suffix = path.suffix("E:/mynewfolder/");String sufstring = suffix.toString();//带有后缀的路径转换为字符串String pathstring = path.toString();//文件路径转换为字符串String groupstr = next.getGroup();//获取文件所属的用户组boolean isfile = next.isFile();//检查当前状态是否为文件String owner = next.getOwner();//获取文件的所有者System.out.println(sufstring+":-------------- "+pathstring+"\t\t"+name+"\t"+owner+"\t"+isfile+"\t"+blockSize/1024/1024+"\t"+Arrays.toString(blockLocations));			}}
}

代码3部分

import java.util.Arrays;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;public class linuxwrdir {static Configuration conf= new Configuration();static FileSystem fs;public static void main(String[] args) throws Exception {//由于configuration自动加载core-site.xml,hdfs-site.xml因此在linux上执行可以不需要设置URIconf.set("dfs.replication","3");conf.set("dfs.blocksize","64M"); //附加添加设置探究fs= FileSystem.get(conf);//hdfs上创建目录Path p1 = new Path("/myusr/");fs.mkdirs(p1);Path plocal=new Path("/usr/test"); //将linux下的文件夹plocal上传到hdfsfs.copyFromLocalFile(plocal, p1);	     showall();fs.close();}public static void showall()throws Exception{Path p = new Path("/myusr/test/");RemoteIterator<LocatedFileStatus> locatedStatus = fs.listLocatedStatus(p);System.out.println("—————————locatedstatus——————————");while(locatedStatus.hasNext()){LocatedFileStatus next = locatedStatus.next();BlockLocation[] blockLocations = next.getBlockLocations();long blockSize = next.getBlockSize();Path path = next.getPath();String name = path.getName();//Path suffix = path.suffix("/usr/dst/");//String sufstring = suffix.toString();String pathstring = path.toString();String groupstr = next.getGroup();boolean isfile = next.isFile();String owner = next.getOwner();System.out.println(pathstring+"\t"+name+"\t"+owner+"\t"+isfile+"\t"+blockSize/1024/1024+"\t"+Arrays.toString(blockLocations));				}System.out.println("——————————status————");FileStatus[] listStatus = fs.listStatus(p);for (int i = 0; i < listStatus.length; i++) {String filename = listStatus[i].getPath().getName();long len = listStatus[i].getLen();boolean directory = listStatus[i].isDirectory();System.out.println(filename+"\t"+len+"\t"+directory);}}
}

代码打包
在这里插入图片描述

文件下加入文件:(按照要求,创建一些文件或文件夹,最好有超过128M或64M的文件,方便后面查看结果)
在这里插入图片描述

然后就是jar命令运行,和上面一样:
Hadoop jar jar包名 包名.类名
成功后,
打开浏览器
找50070
在这里插入图片描述

找到输出文件路径:
发现文件全部上传,且分块数量和块大小和代码设定一致,探究成功!
在这里插入图片描述
至此,全部完成!

这篇关于数据传承:多元环境下的HDFS文件上传与配置调优探索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/913275

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模