大数据中台架构以及建设全流程一(Paas层设计)

数据中台架构以及建设全流程⼀(Paas层设计)
⽬录
设计背景
当企业发展到⼀定规模时候有了不同的业务线以及数据规模,因为业务的快速发展。这个时候⼀些数据问题就会出现。
问题点
1:数据脏乱差,各部门⽣产线数据重复冗余,还不可:复⽤⽤存在数据孤岛
2:数据开发部门的业务来⾃各部门各产品线,需求不明确,每天业务量繁复,⽇常⼯作可能成了sqlboy到处捞数据,⽽且在业务⽅⾯还没有业务部门了解的深⼊,有点缘⽊求鱼的意思。
这个时候数据中台也就应运⽽⽣。
中台⽬标
复⽤,赋能,降本增效
烘手机
1:⾯向业务,数据进⾏建模。
2:数据整合避免烟囱式开发解决数据孤岛问题。
3:赋能给各个业务部门,将能⼒下放将数据的使⽤权限赋予各个部门,减少数据开发部门繁琐的数据sql业务。
中台整体架构
Pass层技术选型
实时存储平台----------->KAFKA(未来pulsar也不错)
0.8版本标志着kafaka成熟
0.9版本提供了安全模块,偏移量也由zk转移到⾃⼰的topic进⾏管理了
0.10版本提供了流计算,⽣产者优化(提供了批次发送,默认16k发送⼀次),提供了机架感知
0.11版本⽣产者提供了幂等性和事物
1.x没啥特别优化
2.x优化stream,安全⼒度更细
所以0.11版本后都可以,版本太⾼也要考虑兼容性问题
tips:kafka因为内存是页存储,磁盘是顺序读写,因为顺序读写速度不亚于内存。所以kafka对于是内存还是磁盘需求不⼤
样例:假设平台每天接受⼀亿次实时请求,kafka如何hold住?
每天集需要承载1亿数据请求,⼀天24⼩时,对于⽹站,晚上12点到凌晨8点这8个⼩时⼏乎没多少数据。使⽤⼆⼋法 则估计,也就是80%的数据(8千万)会在其余16个⼩时涌⼊,⽽且8亿的80%的数据(6.4千万)会在这16个⼩时的20%时间 (3⼩时)涌⼊。
qps = 64000000/(3*60*60)= 6000,则⾼峰期每秒并发6000
每天1亿数据,每个请求10kb,也就是1T的数据。如果保存3副本,1 *3=3T,
假设kafka默认保留最近7天的数据。故需要 3 * 7 =21T tips(默认时间可以根据资源需求降低)
⼀个集⾼峰期肯定还有很多其他业务要处理,所以⾼峰期的qps要控制在集能承受的百分之30左右,所以集能承受的总的qps 在2w左右。⼀般来说⼀台物理机能承受的qps在4w左右。再加上消费者请求3三台左右就⽐较理想,⽽且kafka⼀般都是集的3台起步。所以很合适。
磁盘:三台物理机需要存储21T数据,则每台7块磁盘,每个磁盘1T就可以了。tips(最好配置上kafka 的log.dir避免数据全部写到⼀个磁盘导致性能变差。且linux对磁盘⽬录数有个数限制,太多会导致有空间但是写不进去)
kafka磁盘类型选择: SSD固态硬盘or普通SAS机械硬盘?
SSD就是固态硬盘,⽐机械硬盘要快,SSD的快主要是快在磁盘随机读写 Kafka是顺序写的,机械硬盘顺序写的性能机会跟内存读写的性能是差不多的。所以对于Kafka集使⽤机械硬盘就可以了。
内存:假如⼀个集有3个topic,这3个topic的partition的数据在os cache⾥效果当然是最好的。3个to
pic,⼀个topic有假如30个partition。那么 总共会有90个partition。每个partition的Log⽂件⼤⼩是1G,我们有 3个副本,也就是说要把90个topic的partition 数据都驻留在内存⾥需 要270G的内存。我们现在有3台服务器,所以平均下来每天服务器需 要90G的内存,但是其实partition的数据我们没必要所有的都要驻留 在内存⾥⾯,10-20%的数据在内存就⾮常好了,90G * 0.2 = 18G就 可以了。所以64g内存的服务 器也⾮常够⽤了。
cpu:主要是看Kafka进程⾥会有多少个线程,线程主要是依托多核CPU来执⾏的,如果线程特别多,但是 CPU核很少,就会导致CPU负载很⾼,会导致整体⼯作线程执⾏的效率不太⾼。 来Kafka内部有100多个线程,4个cpu core,⼀般来说⼏⼗个线程,在⾼峰期CPU⼏乎都快打满了。8个cpu,能够⽐较宽裕的 ⽀撑⼏⼗个线程繁忙的⼯作。所以Kafka的服务器⼀般是建议16核,基本上可以hold住⼀两百线程的⼯作。当然如果可以给到32 cpu 那就更加的宽裕。
⽹卡:
1亿写请求,6000/s的吞吐量,3T的数据,3台物理机
硬盘:7(SAS) * 1T,7200转
内存:64GB,JVM分配6G,剩余的给os cache
CPU:16核/32核
⽹络:万兆⽹卡更佳
核⼼配置:
⽇志保留策略配置优化
建议减少⽇志保留时间,通过ion.hours来实现,例如设置ion.hours=72,根据实际需求调整,默认是七天。        段⽂件⼤⼩优化
段⽂件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快,相反,如果⽂件过⼩,则⽂件数量⽐较多,kafka启动 时是单线程扫描⽬录(log.dir)下所有数据⽂件),⽂件较多时性能会稍微降低。可通过如下选项配置段⽂件⼤⼩:
log.segment.bytes=1073741824
log数据⽂件刷盘策略优化
为了⼤幅度提⾼producer写⼊吞吐量,需要定期批量写⽂件 优化建议为:每当producer写⼊10000条消息时,刷数据到磁盘。可通过如下选项配置:
log.ssages=10000
每间隔1秒钟时间,刷数据到磁盘。可通过如下选项配置:
log.flush.interval.ms=1000
提升并发处理能⼒
num.io.threads =8,numwork.threads =3(均为默认值,⾃⼰根据实际情况调整)
离线存储平台(Hadoop系列)
Hadoop选型
1:Apache社区版本
a:开源,免费
b:更新快,新特性多
c: Bug多,需考虑各组件兼容性
2:Cloudera
a:分开源,免费版本。⽬前都要收费了
b:稳定,不需要考虑兼容性问题
c:有clouderaManager管理⼯具可视化界⾯很友好
d: 版本因为稳定,更新慢。新特性尝鲜少。且收费(!这点估计很多都不会选择)
3:Hortonworks
a:万全开源免费
b:稳定,不需要考虑兼容性问题
c:有集管理⼯具可视化界⾯很友好
d: 流⾏度不⾼
TIPS:
1.x 稳定版本
2.0⽀持⾼可⽤,⽀持联邦
2.7x流⾏度⼴⽐较稳定,建议2.7.5以后
3.x HA⽀持多个namenode,增加纠删码功能。可以减少副本,⽂件块⾥⾯存了⼀部分压缩元数据,另外⼀部分⽤于存储校验数据可以⽤于数据恢复。就可以减少副本存储数。当然也可以多副本和纠删码同时开启。但是缺乏数据本地性问题
机架感知
机架感知就是⾃动了解hadoop集中每个机器节点所属的机架,某个datanode节点是属于哪个机柜并⾮是智能感知的,⽽是需要hadoop的管理者⼈为的告知hadoop哪台机器属于哪个机柜,这样在hadoop的Namenode启动初始化时,会将这些机器与机柜的对应信息保存在内存中,⽤来作为HDFS写数据块操作分配Datanode列表时(⽐如3个 block对应三台datanode)选择DataNode的策略,⽐如,要写三个数据块到对应的三台datanode,那么通过机架感知策略,可以尽量将三个副本分布到不同的机柜上。这个需要运维配合设置。
硬件选型(PB级)
cpu:推荐4路32核等,主频⾄少2-2.5GHz
内存:推荐64-256GB
磁盘:分为2组,系统盘和数据盘,系统盘2T*2,做raid1,数据盘2-10T左右(SSD,SAS)磁盘当然选择ssd性能更好,但是价格偏贵。每个数据盘在2-10T左右不宜太⼤,数据量太⼤读写慢,寻址慢。⽐如磁盘坏了或者导数据,磁盘数据量太⼤就很⿇烦。
⽹卡:万兆⽹卡(光纤卡),很有钱⼗万兆⽹卡也可以。
电源:均配置冗余电源,有条件的可以具备发电能⼒。
内存配置
NameNode
将Namenode运⾏在⼀台独⽴的服务器上,要设置Namenode堆内存⼤⼩,可通过在hadoop配置⽂件hadoop-env.sh中添加
如下内容实现:
export HADOOP_HEAPSIZE_MAX=⼤
export HADOOP_HEAPSIZE_MIN=⼤
tips:建议Namenode堆内存⼤⼩设置为物理内存的80%,且堆内存上限和下限设置为⼀样⼤,以免jvm动态调整。因为nd需要加载很多元数据,所以内存设置的⽐较⼤。(⽐如128g的服务器,设置nd的的内存为100g可以hold住1000台且为20*1T硬盘的集)
DataNode
同样修改hadoop配置⽂件hadoop-env.sh,添加如下内容:
export HDFS_DATANODE_HEAPSIZE=4096
export HDFS_DATANODE_OPTS="-Xms${HDFS_DATANODE_HEAPSIZE}m -Xmx${HDFS_DATANODE_HEAPSIZE}m"
建议Datanode堆内存⼤⼩设置为4GB以上。4-8G即可,将更多内存留给YARN
资源计算
在搭建集时候需考虑未来⼀到两年的资源消耗来搭建集。举个例⼦如下
1. 每天1T,副本数为3,⼀年需要的存储资源:1 * 3 * 365 = 1095T
2. 数据需要进⾏加⼯(建模):1095T* 3 = 3285T
3. 数据增速是每年50%,3285T* (
1.5)= 4928T
4. 磁盘只能存到80%,故需要3942T的存储空间
5. 压缩⽐,按50%估算,故需要存储1972T
机器配置:32cpu core, 128G内存,11 * 7T
故:1972/77 = 26台服务器
Tips:评估资源时候⼀定要预留充⾜,以及充分的扩展接⼝
关键参数
此参数⽤来设置⽂件副本数,通常设为3,不推荐修改。这个参数可⽤来保障HDFS数据安全,副本数越多,越浪费 磁盘存储空间,但数据安全性越⾼。tips:⾼版本可搭配纠删码使⽤。
dfs.block.size
此参数⽤来设置HDFS中数据块的⼤⼩,默认为128M,所以,存储到HDFS的数据最好都⼤于128M或者是128的整
数倍,这是最理想的情况,对于数据量较⼤的集,可设为256MB或者512MB。数据块设置太⼩,会增加NameNode的压⼒。数据块设置过⼤会增加定位数据的时间。
dfs.datanode.data.dir
这个参数是设置HDFS数据块的存储路径,配置的值应当是分布在各个独⽴磁盘上的⽬录,这样可以充分利⽤节点的IO读写能⼒,提⾼HDFS读写性能。
dfs.ansfer.threads
这个值是配置datanode可同时处理的最⼤⽂件数量,推荐将这个值调⼤,最⼤值可以配置为65535
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
汽车安全带卡扣
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--指定hdfs的nameservice为zzhadoop,需要和l中的保持⼀致 -->
织物密度镜<property>
<name>dfs.nameservices</name>
<value>nxhadoop</value>
</property>
<!-- zzhadoop下⾯有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.hadoop</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.1</name>
<value>hadoop01:8020</value>
排毒柜</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.1</name>
绝缘软母排
<value>hadoop01:50070</value>
</property>
<!-- dn 与 nn的rpc端⼝-->
<property>
<name>dfs.1</name>
<value>hadoop01:53310</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
路径规划<name>dfs.2</name>
<value>hadoop02:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.2</name>
<value>hadoop02:50070</value>
</property>
<property>
<name>dfs.2</name>
<value>hadoop02:53310</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/zzhadoop-joural</value> </property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>

本文发布于:2024-09-22 12:30:44,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/122490.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   磁盘   内存   集群   需要   设置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议