一篇文章搞懂HDFS MapFile是什么

2023-12-08 09:38

本文主要是介绍一篇文章搞懂HDFS MapFile是什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系

解答

MapFile 概述

MapFile 是排过序的 SequenceFile,由两部分构成,分别是 data 和 index。

index 作为文件的数据索引,主要记录了每个 Record 的 key 值,以及该 Record 在文件中的偏移位置。

在 MapFile 被访问的时候,索引文件会先被加载到内存,通过 index 映射关系可迅速定位到指定 Record 所在文件位置。

因此,相对于 SequenceFile 而言, MapFile 的检索效率更高,缺点是会消耗一部分内存来存储 index数据。

MapFile 写操作实现步骤

  1. 设置 Configuration
  2. 获取 FileSystem
  3. 设置文件输出路径
  4. MapFile.Writer()创建 MapFile.Writer写入
  5. 调用 MapFile.Writer.append追加写入
  6. 关闭流

代码示例

package com.shockang.study.bigdata.hdfs.mapfile;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.MapFile;
import org.apache.hadoop.io.Text;import java.net.URI;public class MapFileWriter {private static final Configuration configuration = new Configuration();private static final String url = "hdfs://node1:8020";public static void main(String[] args) throws Exception {FileSystem fs = FileSystem.get(URI.create(url), configuration);Path outPath = new Path("MyMapFile.map");Text key = new Text();key.set("MyMapKey");Text value = new Text();value.set("MyMapValue");MapFile.Writer writer = new MapFile.Writer(configuration, fs, outPath.toString(), Text.class, Text.class);writer.append(key, value);IOUtils.closeStream(writer);}
}

MapFile 读操作实现步骤

  1. 设置 Configuration
  2. 获取 FileSystem
  3. 设置文件输入路径
  4. MapFile.Reader() 创建读取类 MapFile.Reader
  5. 获取 Key 与 Value 的 class
  6. 读取
  7. 关闭流

代码示例

package com.shockang.study.bigdata.hdfs.mapfile;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.MapFile;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.util.ReflectionUtils;import java.net.URI;public class MapFileReader {private static final Configuration conf = new Configuration();private static final String url = "hdfs://node1:8020";public static void main(String[] args) throws Exception {FileSystem fs = FileSystem.get(URI.create(url), conf);Path inPath = new Path("MyMapFile.map");MapFile.Reader reader = new MapFile.Reader(fs, inPath.toString(), conf);Writable keyClass = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);Writable valueClass = (Writable) ReflectionUtils.newInstance(reader.getValueClass(), conf);while (reader.next((WritableComparable) keyClass, valueClass)) {System.out.println(keyClass);System.out.println(valueClass);}IOUtils.closeStream(reader);}
}

这篇关于一篇文章搞懂HDFS MapFile是什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

一文彻底搞懂Java 中的 SPI 是什么

《一文彻底搞懂Java中的SPI是什么》:本文主要介绍Java中的SPI是什么,本篇文章将通过经典题目、实战解析和面试官视角,帮助你从容应对“SPI”相关问题,赢得技术面试的加分项,需要的朋... 目录一、面试主题概述二、高频面试题汇总三、重点题目详解✅ 面试题1:Java 的 SPI 是什么?如何实现一个

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

HDFS—存储优化(纠删码)

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