当前位置: 首页 > news >正文

大数据

Map-Reduce和Hadoop逐渐称为面试热门。还有,容量的转换如下:

  • bit就是位,也叫比特位,是计算机表示数据最小的单位。
  • byte就是字节,1byte=8bit,1byte就是1B;
  • 一个字符=2字节;
  • 1KB=1024B
  • 字节B到GB是10^9

介绍他们之前,我们先来看看什么是哈希函数


img_f7ec28935271405e28d67f5982f6fabd.png

img_c5429b7c07168d3ccf89bca9f61db1cb.png

什么是Map-Reduce。map阶段是通过Hash函数将任务分开成若干的子任务,Hash函数可以是用户指定或者系统默认。Reduce阶段是分开处理,然后将子任务合并成结果。


img_3f265d24104625061a4a789aee1984fe.png

海量数据处理的关键:


img_8acbd066fa7b5d15edd447d40d82764c.png

案例1

img_22e948df43cbdf3c64bc80ec9a6bc75a.png

首先用最简单的解决方法,那就是将IP转化为整数然后排序:


img_40297c2f7f4b103e23bc477a1794832b.png

但是其实有更高更省空间的方法:


img_6a77e89eebf3652bbb4accfc3a02d02c.png

这种做法的解释是这样的:
因为所有的IP只会出现一次,所以可以考虑bitmap数据结构(在Java中就是二进制数组,byte[])。下面先说一个byte数组 的例子。

//只要知道数的取值范围,就可以用bytes数组排序。
//java并没有提供bit这种数据类型,即使最小的数据类型byte,也要
//占到8个bit.(以前从哪里看到过boolean值在不同的jvm实现下面可能是1bit,也可能是8bit)
public static void main(String[] args){
        boolean[] bytes = new boolean[101];
        int[] a = new int[]{76, 22, 11, 98, 93, 45, 65, 43, 76, 2};
        for(int i = 0; i < a.length; i++){
            bytes[a[i]] = true;
        }
        for(int i = 0; i < bytes.length; i++){
            if(bytes[i] == true)
                System.out.println(i);
        }
    }

IPV4中规定IP地址长度为32(按照TCP/IP参考模型划分),即有2^{32}个地址。
IPV6协议的地址长度为128位,全部可分配的地址数为2^{128}
申请一个长度为2^{32}的bit类型的数组,每个位置是一个bit,只可表示0或者1这两种状态,空间为512MB。每个IP地址转化为无符号整数K,数组下标0 ~ 2^{32-1}与k对应起来。如果k=1,就把bitmap[0] = 1;如果k=n,就把bitmap[n-1]=1。这样,能做到时间复杂度为O(n),空间复杂度很小。

案例2

img_0e89909ae72ec096d9528ad026c848e5.png

年龄都在0到200之间,所以只需要申请一个长度为200的数组,然后遇到年龄为k的,只需要在数组为k的数加1即可,最后倒出来。


img_7c4c5e19acfc11a9e80dbfd201ed9da3.png

案例3

img_025fe48b85b4d7c77cbbdd4d3a69c569.png

img_326f6fb4eadbfc5e769e249e404cffd5.png

img_d7ed3c52ae52fbbebb3a2e13ee26b2ac.png

案例4

img_79db133378f4070dc6023fa4356c303f.png

下图中的20亿其实为40亿


img_266d21f4e37dcd58b4857b66730c8b5b.png

img_e10b5ef87b149317bd5df24833baf7ad.png

img_d1c2f60f7fa5bd039094dc539b5a7328.png

img_7db55809dd8789b970034ccacfb861c0.png

img_b50c8467bccc1faabd873e2cc761e9df.png

案例5

img_5257a746acb7e33d26cb47292fb990f3.png

img_b5b1ef82b040de61b8f84189b5db72cb.png

案例6

img_273abf99c0cc5394afc95fbd303c95cf.png

img_58a61c1b73bdd77db5c1488747e42697.png

假设id通过哈希函数计算和的结果为
0~2^32
,这些key首尾相连构成环形分布。假设N=3台机器根据哈希函数也在环中,那么id为1的数据顺时针知道距离最近的机器,id1的所有删除、添加查询操作都在这上面。
img_7236fa172d5b53b5a72be7c192eac4e7.png

img_01c06974f5b8e85125b7c600d68a09dd.gif

img_3ee5ab4f783c32bd21efe1e7951e5ca4.png

假如添加机器m3,经过哈希函数计算m3的机器id在m1和m2中间。那么data1数据原来实在m2上操作的,现在变成m3上操作,并且将m2的data1的旧数据迁移到m3上。

相关文章:

  • TitleBar 的那些设置
  • FR 在数据库查询中使用模板参数
  • 07-文本属性和字体属性,超链接导航栏案例,background,
  • python数据结构转换格式化
  • 服务器连接不成功测试办法
  • 英语发音规则---N字母
  • python深坑集锦 -- super
  • 反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
  • Linux下面如何运行.sh文件
  • windows下 python中报错ImportError: No module named 'requests'
  • SDUT-3331_数据结构实验之链表八:Farey序列
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • 国内pip
  • citus实战系列之三平滑扩容
  • ET的Actor应用的场景
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 2017 年终总结 —— 在路上
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Nacos系列:Nacos的Java SDK使用
  • Python十分钟制作属于你自己的个性logo
  • Spring Boot MyBatis配置多种数据库
  • 动态魔术使用DBMS_SQL
  • 关于Flux,Vuex,Redux的思考
  • 解析带emoji和链接的聊天系统消息
  • 聚簇索引和非聚簇索引
  • 七牛云假注销小指南
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 鱼骨图 - 如何绘制?
  • ​flutter 代码混淆
  • #etcd#安装时出错
  • (2015)JS ES6 必知的十个 特性
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .Net 4.0并行库实用性演练
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET的微型Web框架 Nancy
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET开发者必备的11款免费工具
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET下的多线程编程—1-线程机制概述
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @javax.ws.rs Webservice注解
  • @ModelAttribute注解使用
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Angular] 笔记 6:ngStyle
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C++进阶篇]STL中vector的使用
  • [codevs] 1029 遍历问题
  • [DevOps云实践] 彻底删除AWS云资源
  • [Excel VBA]单元格区域引用方式的小结
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件