热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从0到1构建大数据平台,如何规划集群硬件与软件

长按二维码关注大数据领域必关注的公众号一.大数据集群节点规划1.HDFS集群节点规划假如业务系统数据量每天增量 50T,保留周期为 30 天,那么 HDFS 存储 容量为 50T * 30 天 * 3

长按二维码关注

大数据领域必关注的公众号


一.大数据集群节点规划
1.HDFS集群节点规划

假如业务系统数据量每天增量 50T,保留周期为 30 天,那么 HDFS 存储 容量为 50T * 30 天 * 3 副本 * 2 倍(数据源+清晰加工) = 9000T = 8.79P 。


假如每个机器的磁盘是 4T * 10 = 40T, 每台机器的可用存储容量为 40T * 0.75 = 30T, 节点预估数量= 9000T 30 = 300 节点,所以 datanode 的节 点最小数量为 300 个。


2.YARN集群节点规划

根据任务量和性能评估 YARN 的节点数是很难的,难以评估,所以 NodeManager节点数可以和datanode节点数保持一致,如果算力负载过高, 根据实际情况再扩容即可。


3.HBase集群节点规划

HBase 节点规划:一般开始搭建是根据 HDFS 存储公式计算即可,如果从增加并发的考虑,一般一个 RegionSever 并发为 5000 ~2 万(优化后并发更高), 可以根据业务实际并发估计节点数量。


4.Kafka集群节点规划

Kafka 节点规划:一般开始搭建是根据类似 HDFS 存储公式计算,一般1个 broker 并发为 5 万(优化后并发更高),可以根据业务实际并发估计节点数量。


5.Zookeeper集群节点规划

Zookeeper 节点规划:集群开始搭建时3节点就够用了,如果发现 zookeeper 负载过高或有超时现象时可以考虑扩展到 5 节点。


6.大数据集群厂商选择

集群中的每个组件要做高可用,一般国企会用 CDH,互联网公司会用开源社区版演化自己平台。


二.大数据集群硬件规划
1.磁盘阵列概念

RAID:磁盘阵列(Redundant Arrays of Independent Disks,RAID),有"数块独立磁盘构成具有冗余能力的阵列”之意。


RAID0 是把多个(最少2个)硬盘合并成1个逻辑盘使用,数据读写时对各硬盘同时操作,不同硬盘写入不同数据,速度快。



RAID1是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。



Raid5是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中,“parity”部分存放的就是数据的奇偶校验信息,换句话说,Raid5技术实际上没有备份磁盘中的真实数据,而是当硬盘设备出现问题后,通过奇偶校验技术来尝试重建损坏的数据。Raid5这样的技术特性 “妥协”的兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。



Raid10是Raid1和Raid0的组合体,Raid10技术至少需要4块硬盘来组建,其中先分别两两制成Raid1磁盘阵列,以保证数据的安全性。然后再对两个Raid1磁盘按阵列实施Raid0技术,进一步提高硬盘设备的读写速度。



2.HDFS集群硬件规划

内存:NameNode 内存一般 100 万个 block 对应 1G 的堆内存,比如我们最大的一个集群的 block 达到了 9000 万,会占内容 90G,NameNode 的内存不止存放 block,我们产线环境配置的是 200G+。


磁盘:主节点NameNode主要 CPU/内存配置高些,系统盘做 RAID1,hdfs要安装在系统盘上,如果有其他的数据盘,可以做 RAID5,容量所需不大,500G~ 1T 即可。



从节点 datanode 内存/CPU/磁盘都有要求,我们产线存储每服务器 4T*10=40T 台



备注:DataNode对磁盘要求比较高。


3.YARN集群硬件配置

主节点 ResourceManager 主要 CPU/内存配置高些,系统盘做 RAID1,yarn要安装在系统盘上,如果有其他的数据盘,可以做 RAID5,容量所需不大, 500G~1T 即可。



备注:因为ResourceManager要做调度,所以CPU可以分配多一点,内存不用太大。

从节点 NodeManager 对 CPU 和内存都有要求。



备注:NodeManager一般与DataNode共用节点,对内存要求不是很高,主要是计算。


4.HBase集群硬件配置

主节点 Master CPU 内存中配就行。



从节点 RegionServer 内存可以大些。



备注:RegionServer对内存要求较高,blockcache和Memstore都需要占用内存。


5.Kafka集群硬件配置


三.大数据集群目录规划
1.管理节点的系统盘与数据盘

OS磁盘建议RAID1,建议200G以上,并且做LVM(逻辑卷),这样可以动 

态调整OS空间大小,安装包需要安装在OS盘,namenode的fsimage/editlog、jouralnode的/editlog、zookeeper的数据日志都放在OS盘(RAID1)。 


管理节点的数据盘做RAID5,管理节点的数据盘如下所示: 



2.数据节点的数据盘

数据节点的数据盘做RAID0(一块盘做RAID0,硬件RAID)作为数据盘,文件格式为xfs,并配置noatime,不做LVM,最好是同构。数据节点的数据盘: 


备注:数据盘大小建议一致,避免数据不均衡;磁盘不能做LVM,避免影响存储性能。


四.Kafka Topic 分区规划
1.Kafka磁盘规划

步骤1:评估数据量:要求研发提前评估所有topic 一个周期全量的数据大小。 

步骤2:计算磁盘总存储:如一块盘 825g,一个节点 20 块盘,10 个节点。那 

么磁盘总存储就是 165000g。 

步骤3:预估实际数据存储占比:

Topic:一个周期全量数据大小占磁盘总存储的百分比,超过百分之六十,即要求研发减少存储周期。 

步骤4:计算磁盘总块数:一个节点 20 块盘,10 个节点,总磁盘块数 200 个。

 

2.Kafka Topic分区方式1

合理预分区:所有分区数量为磁盘总数的整数倍。如所有的 topic 总数据量 

为 50000g,磁盘个数为 200,那么就可以设置总分区数为 200/400/600.具体多少分区数视业务决定。若分区数为 400,那么一个分区的大小约 125g。

案例1:

某一个 topic:cbss001 的预估数据量是 210g,那么通过计算(每个分区:125g)可以将其分成两个分区。这样根据 kafka 副本落盘策略,各个主机磁盘就能保证最大限度的存储均衡。 

案例2:

如果我们建立了一个非常大的 topic(100个分区),那么此 topic 的分区数量应该是磁盘数的整数倍;如果说我们还有建立一个小的 topic(如10个分区),那么此 topic 的每个分区大小应该跟之前的大的 topic 分区的大小保持一致。


3.Kafka Topic分区方式2

确定分区数量的方法:

(1)创建一个只有1个分区的topic

(2)测试这个topic的producer吞吐量和consumer吞吐量。

(3)假设他们的值分别是Tp和Tc,单位可以是MB/s.

(4)然后假设总的目标吞吐量是Tt,那么分区数=Tt/min(Tp,Tc)


kafka性能基准测试:

(1)Kafka Producer压力测试

bin/kafka-producer-perf-test.sh  --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=hadoop1:9092,hadoop2:9092,hadoop3:9092

说明:

record-size是一条信息有多大,单位是字节。

num-records是总共发送多少条信息。

throughput 是每秒多少条信息,设成-1,表示不限流,可测出生产者最大吞吐量。


(2)Kafka Consumer压力测试

bin/kafka-consumer-perf-test.sh --broker-list hadoop1:9092,hadoop2:9092,hadoop3:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1

参数说明:

--zookeeper 指定zookeeper的链接信息

--topic 指定topic的名称

--fetch-size 指定每次fetch的数据的大小

--messages 总共要消费的消息个数


五.HBase 表Region规划
1.业务场景

每天写入5亿+条数据

每天写入176G+数据量

region分裂大小为10G

TTL为20天

rowkey为手机号


2.预建分区个数

预建分区的个数=最终保有的数据量/每个regin配置的大小

(1)Region最大值推荐10-20Gb, 最优值推荐5-10Gb。

(2)数据总量=176*20=3520G


3.预分区实现

方法一:

admin.createTable(tabledesc,startkey,endkey,numRegion)

方法二:

admin.createTable(tableDesc ,splitKeys);

欢迎点赞 + 收藏 + 在看  素质三连 


往期精彩回顾
程序员,如何避免内卷
Apache 架构师总结的 30 条架构原则
【全网首发】Hadoop 3.0分布式集群安装
大数据运维工程师经典面试题汇总(附带答案)
大数据面试130题
某集团大数据平台整体架构及实施方案完整目录
大数据凉凉了?Apache将一众大数据开源项目束之高阁!
实战企业数据湖,抢先数仓新玩法
Superset制作智慧数据大屏,看它就够了
Apache Flink 在快手的过去、现在和未来
华为云-基于Ambari构建大数据平台(上)
华为云-基于Ambari构建大数据平台(下)
【HBase调优】Hbase万亿级存储性能优化总结
【Python精华】100个Python练手小程序
【HBase企业应用开发】工作中自己总结的Hbase笔记,非常全面!
【剑指Offer】近50个常见算法面试题的Java实现代码

长按识别左侧二维码

     关注领福利    

  领10本经典大数据书


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
author-avatar
KL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有