数据传承:多元环境下的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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节