大数据技术之Hadoop :我是恁爹

就如上图中的技术分类,大数据技术主要解决的就是海量数据的存储和计算问题

这两个问题的解决方案最先被 Google 被提出,用于解决 Google 搜索引擎海量的网页存储和索引的构建。对应的技术就是日后被人所熟知的 HDFSMapReduce

不关注大数据的可能对这两个名词比较陌生,但是Hadoop大家一定都听说过吧。HDFS 和 MapReduce 就是 Hadoop 项目中的两个核心组件,一个用于解决海量数据存储问题,一个用来解决海量数据计算问题

HDFS:我解决了存储

HDFS 全称为分布式文件系统,没错,只要是涉及到分布式,任何一个大问题都能分成多个小问题一一解决,所以大数据技术的本质的也是分而治之

HDFS 的分而治之就是将一个大文件切分成多个数据块分布在不同服务器上存储,如下图

DataNodes 就是用来存储这些数据块的服务器集群,物理表现就是一群 JVM 进程。NameNode 是用来管理一个大文件被分了多少块、分别存在哪个服务器,方便查找定位。

HDFS 整体思想比较容易理解,但实现起来并不简单,背后还要考虑很多问题,例如文件如何分片、如何保证数据不丢失、某个服务器故障怎么办、如何实现数据的扩展性等等。

如果对这些实现细节感兴趣,请关注我,欢迎大家一起交流。

MapReduce:我解决了计算

存储问题解决了,计算问题是如何解决的?

试想一下,要计算一个大小为100G的文件中某个字符出现的次数,应该怎么做?

用一个计算节点读取分布在 HDFS 中的一个个数据块进行计算?那这个计算节点需要多大的内存?即便有这么大的内存,多久能计算完?

如果你是这样的想法,请跳出单机思维

看下 MapReduce 是怎么做的。

MapReduce 作为大规模计算框架,它的核心思想是这样的:既然一个大文件可以作为多个数据块存储在 HDFS 集群中,那何不将计算的程序直接传输到这些数据块所在的节点进行分布式计算?

以128M(HDFS 默认分割大小)为一个数据块,100G得有800个数据块。如果按照单机思维,最少要进行800次128M的传输。但如果把一个1M大小的程序传输800次,是不是比前者划算?这也是大数据计算中非常重要的一个思想:移动计算比移动数据更划算

而之所以叫 MapReduce,是因为 MapReduce 将计算分为了 Map 和 Reduce 两个阶段。开发人员在编码时只需要编写 Mapper 和 Reducer 的实现即可,不用关注程序的移动、计算结果的聚合等分布式编程工作

以统计字符出现次数的代码为例:

public class WordCount {public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {word.set(itr.nextToken());context.write(word, one);}}}public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();if (otherArgs.length < 2) {System.err.println("Usage: wordcount <in> [<in>...] <out>");System.exit(2);}Job job = Job.getInstance(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);for (int i = 0; i < otherArgs.length - 1; ++i) {FileInputFormat.addInputPath(job, new Path(otherArgs[i]));}FileOutputFormat.setOutputPath(job,new Path(otherArgs[otherArgs.length - 1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}

main方法执行后,最终会将 Mapper 和 Reducer 的实现作为计算任务分发到数据所在的节点。这样,每个计算任务只用计算128M的数据,800个计算任务同时计算就达到了并行计算的效果,从而实现海量数据的快速计算。

并行计算大概是这样:

在这里插入图片描述

每个节点都会先执行 Map 任务(TokenizerMapper) ,将字符出现的次数设置为1,并输出为map(key,value)格式。然后执行 Reduce 任务 (IntSumReducer)将相同字符(key)的次数相加,最后将各节点的结果聚合。

总之,MapReduce 解决了海量数据计算的问题,提供 Map 和 Reduce 这样简单的编程模型,也简化了开发人员对大数据计算的编程难度。

MapReduce 是如何进行任务分发的、计算结果是如何聚合的?如果对这些实现细节感兴趣,请关注我,欢迎大家一起交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13238.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ATAT-mcsqs生成准随机结构(SQS)更新

通常使用第一性原理计算某些多元素占据原胞中同一位置的结构会优先考虑使用准随机结构&#xff08;special quasirandom structure&#xff0c;SQS&#xff09;来进行模拟建模。此篇教程意在整理一个较为简便的操作流程&#xff0c;以供参考。 合金理论自动化工具包(ATAT)1是一…

人际交往中,想要有好人缘,需做到“三要”,做到一个,也是好事

人际交往中&#xff0c;想要有好人缘&#xff0c;需做到“三要”&#xff0c;做到一个&#xff0c;也是好事 在这个世上&#xff0c;每个人都是一座孤岛&#xff0c;但通过人际交往这座桥梁&#xff0c;我们能够彼此相连&#xff0c;共同编织出一张温暖的社会网络。 好人缘&a…

政务数据治理专栏开搞!

写在前面 忙忙碌碌干了一年政务数据治理的工作&#xff0c;从法人数据到自然人&#xff0c;从交通到地理信息等等&#xff0c;突发想法开一个专栏讲一讲政务数据遇到的问题&#xff0c;以及治理的成效&#xff0c;或许有朋友爱看。 政务数据&#xff0c;又称之为政务数据资源&a…

Linux最深刻理解页表于物理内存

目录 物理内存管理 页表设计 物理内存管理 如果磁盘上的内容加载到物理内存上&#xff0c;每次io都会按照4kb的方式进行加载(可能不同版本系统有些区别)。所以我们的物理内存上的内容也是4个字节进行管理的。 而每个页框都需要我们进行管理。所以自然物理内存就会对页框进行先…

一键高效管理:苹果手机如何一键删除照片

在我们的日常生活中&#xff0c;苹果手机不仅是沟通的工具&#xff0c;更是捕捉和保存生活瞬间的重要设备。随着时间的推移&#xff0c;数以千计的照片积累在设备中&#xff0c;这不仅占用了大量的存储空间&#xff0c;也可能影响设备的性能。本文将详细介绍苹果手机如何一键删…

C++:类和对象(二)

C&#xff1a;类和对象&#xff08;二&#xff09; 类的默认成员函数构造函数析构函数拷贝构造函数 类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类&#xff0c;我们不写的情况下编译器会默认生成以下6个…

机器学习(基础2)

特征工程 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 特征工程API 实例化…

ts中的元组概念解释(tuple)

用于定义数组每个元素的类型 元组 (Tuple) 是⼀种特殊的数组类型&#xff0c;可以存储固定数量的元素&#xff0c;并且每个元素的类型是已知的且可以不同。元组⽤于精确描述⼀组值的类型&#xff0c; ? 表示可选元素 1&#xff0c;正常写法 let list1 :[string,number] li…

Rust,删除cargo安装的可执行文件

列出安装的文件列表 cargo install --list 删除 rm /Users/ry/.cargo/bin/fancy

数据库中生成主键的方式及其优缺点

数据库中生成主键的方式及其优缺点 一、自动增长(AUTO_INCREMENT) 使用方法&#xff1a;设置auto_increment 实现数据表自增&#xff1b; 优点&#xff1a; 简单易用&#xff1a;自增主键是一种简单的方式&#xff0c;只需在数据库表中设置自增属性即可&#xff0c;无需在代…

linux进程管理

进程和线程的关系 以下介绍为linux环境 进程是操作系统中一个运行中的程序&#xff0c;是资源分配和调度的基本单位。每个进程有自己独立的内存空间、文件描述符、堆栈等系统资源 线程&#xff08;Thread&#xff09; 是 CPU 调度的最小单位&#xff0c;是进程中的一个执行流…

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

Vue2+ElementUI:用计算属性实现搜索框功能

前言&#xff1a; 本文代码使用vue2element UI。 输入框搜索的功能&#xff0c;可以在前端通过计算属性过滤实现&#xff0c;也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤&#xff0c;后附完整代码&#xff0c;代码中提供的是死数据&#xff0c;可…

JAVA学习日记(十二)查找算法

一、基本查找、二分查找 略 二、分块查找 将数组分块&#xff0c;每一个块中最大值小于后一个块中的最小值&#xff1a;块内无序&#xff0c;块间有序。 块&#xff1a;创建一个块类 按照规则划分好块之后&#xff0c;对要查询的值设计方法进行查询。 import java.util.…

多线程小知识

一. CAS CAS (Compare and Swap, 比较并交换) 是一种无锁编程技术, 用于实现多线程环境下对共享资源的线程安全访问. CAS 的核心思想是: 只有当内存中的值与预期值相匹配时, 才会将内存中的值更新为新值. 寄存器1中存放原值, 寄存器2中存放新值. 现在要将内存中的原值更新为新…

C++基础(12.红黑树实现)

目录 红黑树的概念&#xff1a; 红黑树规则&#xff1a; 红黑树如何确保最长路径不超过最短路径的2倍的&#xff1f; 红黑树的效率&#xff1a; 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1&#xff1a;变色 情况2&#xff1a;单旋变色&#xff1a; 情况3&…

代码随想录算法训练营第二十天|39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力扣题目&#xff1a;39.组合总和&#xff09;| 回溯法精讲&#xff01;_哔哩哔哩…

机器学习基础02_特征工程

目录 一、概念 二、API 三、DictVectorize字典列表特征提取 四、CountVectorize文本特征提取 五、TF-IDF文本1特征词的重要程度特征提取 六、无量纲化预处理 1、MinMaxScaler 归一化 2、StandardScaler 标准化 七、特征降维 1、特征选择 VarianceThreshold 底方差…

得物App入选诚信案例,10万正品样品库夯实高品质消费

近日&#xff0c;以“加强企业诚信建设 赋能经济社会发展”为主题的“2024年全国企业诚信建设大会”在烟台市召开。此次大会由中国企业联合会、中国企业家协会主办&#xff0c;山东省企业联合会、山东省企业家协会、烟台市企业联合会、烟台大学承办。大会期间&#xff0c;得物A…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…