博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HDFS]HDFS优化-小文件合并.md
阅读量:5900 次
发布时间:2019-06-19

本文共 2538 字,大约阅读时间需要 8 分钟。

  hot3.png

hdfs优化-小文件合并

一.背景

hdfs的namenode存储元数据,包含fsimage(存储文件的owership和permissions,文件包含哪些blockid),block保存在哪个datanode,这些信息在启动后加载到内存,所以如果小文件特别多,则会对内存造成很大的压力。 解决方法:可以使用小文件合并的方式来解决此问题,优化hdfs的存储。这里的小文件指的是小于blocksize(hadoop2.x为128M)的文件。这里使用的SequenceFile方法来处理。

二.处理代码示例

这里使用的idea进行连接hadoop集群进行测试使用

package com.boyka.hdfs.smallfiles;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.apache.commons.compress.utils.IOUtils;import org.apache.commons.io.FileUtils;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FSDataOutputStream;import org.apache.hadoop.fs.FileStatus;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.SequenceFile;import org.apache.hadoop.io.Text;import org.junit.After;import org.junit.Before;import org.junit.Test;public class HdfsDemon {   FileSystem fs;   Configuration conf;   @Before   public void setup() throws IOException {      // 默认加载jar配置  core-site.xml  hdfs-site.xml拷贝到/src目录      System.setProperty("HADOOP_USER_NAME","root");      conf = new Configuration();      fs = FileSystem.get(conf);   }   @After   public void close() throws IOException {      fs.close();   }   /**    * 处理小文上传    * [[@throws](http://my.oschina.net/throws)](http://my.oschina.net/throws) Exception    */   [[@Test](http://my.oschina.net/azibug)](http://my.oschina.net/azibug)   public void seq() throws Exception {      Path path = new Path("/user/seq");      SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf, path, Text.class, Text.class);//存储到hdfs的path路径      File file = new File("/Users/mac/Documents/needfile/test");      for(File f : file.listFiles()) {         writer.append(new Text(f.getName()),new Text(FileUtils.readFileToString(f)));//内容类型为Text Text      }      writer.close();   }   /**    * 查看sequencefile,循环获取小文件的内容    * [[@throws](http://my.oschina.net/throws)](http://my.oschina.net/throws) IOException    */   @Test   public void catseq() throws IOException {      Path path = new Path("/user/seq");      SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);      Text key = new Text();      Text value = new Text();      while(reader.next(key, value)) {         System.out.println(key);         System.out.println(value);         System.out.println("--------------------");      }      reader.close();   }}

上传小文件之后:

上传小文件之后

读取小文件效果:

输入图片说明

转载于:https://my.oschina.net/u/947726/blog/714776

你可能感兴趣的文章
微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程
查看>>
【转】C++ 笔试面试题目
查看>>
同步和异步的区别
查看>>
[Leetcode] Search in Rotated Sorted Array
查看>>
委托、Lambda表达式、事件系列02,什么时候该用委托
查看>>
在ASP.NET MVC控制器中获取链接中的路由数据
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
LightOJ 1274 Beating the Dataset(期望)
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>
默认网关及route print
查看>>
Servlet如何处理一个请求?
查看>>
Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)...
查看>>
1497 取余运算
查看>>
容器平台选型的十大模式:Docker、DC/OS、K8S谁与当先?
查看>>
Windows 2003 IIS 不支持ASP的问题
查看>>
了解 JavaScript (2)- 需要了解的一些概念
查看>>
图像对比度理解
查看>>
【跃迁之路】【472天】程序员高效学习方法论探索系列(实验阶段229-2018.05.23)...
查看>>
响应式Tab选项卡
查看>>