一篇文章搞懂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

相关文章

六个案例搞懂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

HDFS—集群扩容及缩容

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

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig