Hadoop学习-块、网络拓扑、副本策略、机架感知
原文链接:https://www.toutiao.com/i6627682068203586062/
一、我们先看一个大数据的实例
进到官网
我们进入到里面有个"网站统计"
我们查看Demo
我们进入到这个页面
我们可以统计该网站的用户访问量
我们百度一个旅游网站(马蜂窝)
进入到官网
我们打开开发者工具(谷歌浏览器使用F12)我们选择Network
点击一个图片,开发者工具其中有一条内容表示我们点击的图片(选择这个链接,按图选择)
我们找到图片的链接
这个就是我们的地址
我们选择解码
我们进入到官网,选择解码
解码后的内容
里面有很多信息,比如X和Y是屏幕坐标等等
然后我们进入到友盟里,选择热点图
这个图和前面的链接结合起来,就可以分析出页面点击率(热点图)
二、Hadoop
HDFS是分布式文件系统,用来存储数据的。
两个角色:
Namenode负责管理文件的名称空间
Datanode负责存储数据,会定时向namenode进行汇报,是一个list。
补充概念:
(1) HDFS的块(block)
(2) 文件的分块(chunk)
(3) 网络拓扑
(4) 机架感知
1、HDFS的块(block)
磁盘是分数据块的,默认大小512B
磁盘:一个600B的文件,分成两个部分一个是512B,一个是88B。
512B存到1号分块中,88B存到2号分块中。下次如果有一个新的文件,是不会再补充到2号分块中,只会往后继续存放。
HDFS:抽象在磁盘之上,有上述磁盘类似的概念。
但有不同点:
(1) block默认大小,Hadoop1.x 64M Hadoop2.x 128M。
(2) HDFS:一个200M的文件,分成两个部分一个是128M,一个是72M。
128M存到1号分块中,72M存到2号分块中。下次如果有一个新的文件,是会补充到2号分块中(是逻辑理解上)。
HDFS分块大小为什么是128M?答案:最小化寻址时间
例子:假如我们的磁盘速率是100M/s,磁头寻址时间是10ms,在整个传输过程中,让寻址时间仅仅占传输时间的1%,传输的文件大小是100M。
100在2的N次方中离128最近。
2、文件的分块(chunk)
Chunk默认的大小和block是一样的。可以调整,建议和block一样。
3、网络拓扑
每个节点是有可能出现问题的,比如Server1这个节点突然断电了,那么就会存在丢失数据的情况。如何最大程度避免这个问题呢?
Hadoop选择备份数据,将BLK_1备份到多台机器上,比如三台机器上,一个机器出问题了,还有两个机器可以使用。
网络拓扑
在机架rack1上服务器节点r1n1和r1n4通信,通过网络是要消耗网络资源的,所以使用距离的概念来表示每台节点之间通信消耗网络带宽的计量单位。
那么r1n1至r1n4的距离是多少呢?
我们认为在一个机架上,一台节点到路由器有几根线距离就是几,比如r1n1至路由器距离就是1,r1n4至路由器距离就是1,那么r1n1和r1n4连接的是一台路由器,那么他们的距离就是2。
如果有不同机架
那么距离r1n1->r2n1就是4。
如果不同数据中心之间也是通过路由器/交换机做数据交的。
一般都有会说:跨节点距离是2、跨机架是4、跨数据中心是6。
4、副本放置策略
假设有一个块block,备份3份
(1) 第一块副本,如果客户端程序在集群的某一个节点,那么第一块副本就放在这个节点上;如果不在,就随机找一个节点放置
(2) 第二块副本,放在非第一块副本所在的机架,而是选择其它机架上的一个节点
(3) 第三块副本,放在第二块副本同机架不同节点
5、机架感知
如果不配置,Hadoop会认为所有节点在一个机架上
网上有个例子,用配置的方式告诉Hadoop节点的位置