import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class PutMerge {
private InputStream in = null;
private OutputStream out = null;
private String localPath;
private String hdfsPath;
public PutMerge(String localPath, String hdfsPath) {
this.localPath = localPath;
this.hdfsPath = hdfsPath;
}
public void start() throws Exception {
File file = new File(localPath);
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(hdfsPath), conf);
out = fs.create(new Path(hdfsPath));
work(file);
close();
}
/*
* 1.根据用户定义的参数设置本地目录和HDFS的目标文件
*
* 2.创建一个输出流写入到HDFS文件
*
* 3.遍历本地目录中的每个文件,打开文件,并读取文件内容,将文件的内容写到HDFS文件中。
*/
private void work(File file) throws Exception {
if (file.isFile()) {
int byteRead = 0;
byte[] buffer = new byte[256];
while ((byteRead = in.read(buffer)) > 0) {
out.write(buffer, 0, byteRead);
}
} else if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
in = new BufferedInputStream(new FileInputStream(files[i]));
int byteRead = 0;
byte[] buffer = new byte[256];
while ((byteRead = in.read(buffer)) > 0) {
out.write(buffer, 0, byteRead);
}
} else {
work(files[i]);
}
}
}
}
private void close() throws IOException {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
if (args.length < 2) {
System.out.println("Usage:\n\t " + PutMerge.class.getName()
+ " [LocalPath] [HDFSPath]");
System.exit(1);
}
new PutMerge(args[0], args[1]).start();
}
}相关推荐
hudi系列-小文件优化
hudi使用mvcc来实现数据的读写一致性和并发控制,基于timeline实现对事务和表服务的管理,会产生大量比较小的数据文件和元数据文件。大量小文件会对存储和查询性能产生不利影响,包括增加文件系统的开销、文件管理的复杂性以及查询性能的下降。对于namenode而言,当整个集群中文件数到了几千万,就已经会变得很不稳定了。
hdfs小文件合并和hdfs高可用方案
由于HDFS会在NameNode中存储元数据,而元数据是存在于内存中,所以HDFS是不适合用来存储小文件的。针对存在的问题,在HDFS可以进行小文件合并的操作。
多个小文件合并成一个文件
描述了如何将多个小文件合并为一个文件,并进行索引的过程
合并HDFS和本地文件系统中的小文件
众所周知,HDFS中过多的小文件,会给NameNode造成很大的压力,所谓的小文件,是指远远小于文件块大小的文件。 在使用HDFS的过程中,应尽量避免生成过多的小文件。 本文以TextFile为例,介绍一下从本地–>HDFS、HDFS–>本地、以及HDFS–>HDFS的文件上传下载移动过程中,对小文件的合并方法 将本地的小文件合并,上传到HDFS 假设存放...
合并本地文件到HDFS文件中
下面的MergeTest 程序,用于合并本地多个文件,并把合并后的新文件放入HDFS,这个程序在实际工作中会经常用到。 第一步:开发java程序 packagecom.hadoop.hdfs.test; importjava.io.IOException; importorg.apache.hadoop.conf.Configuration; importor
本地文件合并后传至HDFS文件
代码如下: package hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.Fi
将存储在本地的大量分散的小文件,合并并保存在hdfs文件系统中。
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apach
java本地文件合并传人hdfs_将存储在本地的大量分散的小文件,合并并保存在hdfs文件系统中...
import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URI;import org.a...
分布式文件系统HDFS
Hadoop-HDFS 存储模型:字节 文件线性切割成块(Block):偏移量 offset (byte) Block分散存储在集群节点中 单一文件Block大小一致,文件与 文件可以不一致 Block可以设置副本数,副本分散在不同节点中 副本数不要超过节点数量 文件上传可以设置Block大小和副本数 已上传的文件Block副本数可以调整,大小不变 只支持一次写入多次读取,同一时刻只有一个写入者 ...
0455-如何在Hadoop中处理小文件-续
Fayson的github: https://github.com/fayson/cdhproject 推荐关注微信公众号:“Hadoop实操”,ID:gh_c4c535955d0f,或者扫描文末二维码。 Fayson在前面的文章《0403-如何在Hadoop中处理小文件》和《0405-如何使用Impala合并小文件》中介绍了什么是Hadoop中的小文件,以及常见的处理方法。这里Fayson...
如何在hive中处理小文件
转:https://mp.weixin.qq.com/s/xw6MjNvpI97m0aygyW1HaA
如何在Hadoop中处理小文件-续
Fayson在前面的文章《如何在Hadoop中处理小文件》和《如何使用Impala合并小文件》中介绍了什么是Hadoop中的小文件,以及常见的处理方法。这里Fayson再补充一篇文章进行说明。 HDFS中太多的小文件往往会带来性能下降以及扩展性受限问题,为了避免这个问题,我们一般需要控制每个文件尽可能的接近HDFS block大小比如256MB,或者是block size的几倍。 ...
Hadoop 教程 - Hadoop调优之HDFS存储优化
HDFS(Hadoop Distributed File System)作为Hadoop的核心组件之一,负责存储海量数据。优化HDFS存储不仅可以提升存储效率,还能增强数据的可靠性和访问速度。
从零开始学习Hadoop--第3章 HDFS分布式文件系统
1.文件系统从头说 文件系统的作用就是永久存储数据。计算机可以存储数据的地方是内存,硬盘,优盘,SD卡等等。如果计算机断电关机,存放在内存里的数据就没有了,而存放在硬盘优盘SD卡这些上的数据会仍然存在。硬盘优盘SD卡上的数据是以文件的形式存在,文件系统就是文件的组织和处理。总之,凡是断电之后不会消失的数据,就必须由文件系统存储和管理。 从用户的角度来说,文件系统需要提供文件的创建,删除
HDFS基础使用
主要介绍hadoop中HDFS的架构,以及常用shell命令。
HDFS存储与架构
HDFS存储模型 以字节形式存储 文件线性切割成块(Block):偏移量 offset (byte) Block分散存储在集群节点中 单一文件Block大小一致,文件与文件可以不一致 Block可以设置副本数,副本无序分散在不同节点中 副本数不要超过节点数量 文件上传可以设置Block大小和副本数(资源不够开辟的进程) 已上传的文件Block副本数可以调整,大小不变(2.x 128MB 3 bl...
海量小文件问题综述和解决攻略(一)
衡量存储系统性能主要有两个关键指标,即IOPS和数据吞吐量。IOPS (Input/Output Per Second) 即每秒的输入输出量 (或读写次数) ,是衡量存储系统性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(OnlineTransaction Processing),IOPS是关键衡量指标。
2265




被折叠的 条评论
为什么被折叠?



