Flink KeyGroup机制导致的数据倾斜问题
业务背景
数据源位于Kafka中,将相同Key的数据聚合成Batch,写入HBase中.
即:kafka(sourceStream) –> keyby(batch) –> hbase(sink)
核心代码如下
1 | sourceStream |
使用Flink版本:1.13.2
数据倾斜现象
测试Case:Flink并发度:180,SubTask高低倾斜率约为216:144 = 3:2
数据源位于Kafka中,将相同Key的数据聚合成Batch,写入HBase中.
即:kafka(sourceStream) –> keyby(batch) –> hbase(sink)
核心代码如下
1 | sourceStream |
使用Flink版本:1.13.2
测试Case:Flink并发度:180,SubTask高低倾斜率约为216:144 = 3:2
HDFS集群正常运行了将近一年,最近两个月出现一个诡异的问题:Standby节点严重的GC,Active节点正常。虽然不影响线上业务,但潜在的问题还是比较严重的,这里简单整理下问题定位和解决过程。
HDFS版本:2.5.2 (问题与版本无关)
HDFS的active节点正常,Standby节点严重GC
HDFS集群数据量在几百TB,Namespace和Block数量在千万级别,每天增长大约几十GB的数据量。Namespace和Block的信息消耗的内存会略微有部分增长,但不会发生太大变化。
问题最诡异的地方在于,Standby节点GC异常,但Active节点GC正常。
HDFS的内存主要消耗是Namespace和Block信息。这些信息是常住内存的,不会发生太大变动。
一般来讲,Active节点的任务量要超过Standby节点,但由于内存主要消耗在Namespace和Block信息,Namespace和Block信息在Active/Standby节点是完全一致的,所以两个节点的内存消耗应该接近,Active节点略微比Standby节点多消耗一些内存。
Java startup normally queries the operating system in order to setup runtime defaults for things such as the number of GC threads and default memory limits.
While in docker container, JVM can’t get the resource limit info.
This problem had been fixed in JDK8:8u191
This article make a test for the new feature
本书的主题是:理解生命,万物和宇宙的存在。 凝结了作者对科学和哲学的探索成果,以及对这些学科的未来展望。
为什么存在实在之物,而非一无所有?
我们为什么存在?
为什么是这一族特定的定律而非别的?
古人对自然方式的无知,导致他们发明神。神高兴时,人类便享受好天气,和平,并免于自然灾害和疾病;当他们不高兴时,干旱,战争,瘟疫和传染病就降临人间。
大约2600年前,米利都的泰勒斯(约公元前624年-约公元前546年,古希腊时期的哲学家和科学家,希腊七贤之一,被后人称为“科学和哲学之祖”)抛弃了神话,通过理性假说来解释自然现象。
泰勒斯的家是名叫爱奥尼亚地区的知识者中心之一,古代爱奥尼亚的学者是最早通过自然定律而非神学来解释自然现象的人,是人类思想史上的一座巨大的里程碑。
自然遵循着一致的可被解释的原则的思想产生,开始了利用宇宙概念来取代神权统治的长期过程。
大数据与智能革命重新定义未来
如果把资本和机械动能,作为大航海时代以来全球化的推动力,那么数据正成为下一次技术革命和社会革命的核心动力
数据的最大作用在于承载信息,但并非所有的数据都承载有意义的信息。信息有时藏在事物的背后,需要挖掘和测量才能得到。数据是信息的载体,从数据中挖掘信息
数据中隐藏的信息和知识是客观存在的,但是只有具有相关领域专业知识的人才才能将它们挖掘出来。对数据和信息进行处理后,人类就可以获得知识。知识比信息更高一个层次,也更加抽象,它具有系统性的特征。
得到数据和使用数据的能力是衡量文明发展水平的标准之一
获取数据 –> 分析数据 –> 建立模型 –> 预测未知
数据的作用自古有之,但是过去数据的作用经常被忽视。首先,由于过去数据量不足,积累大量的数据所需的时间太长,以至于在较短的时间内,它的作用不明显。其实数据和想获得的信息之间的联系通常是间接的,他要通过不同数据之间的相关性才能体现出来。可以说相关性是让数据发挥作用的魔棒。
很多时候我们无法直接获得信息,但是我们可以将相关联信息进行量化,然后通过数学模型间接的得到所要的信息,而各种数学模型的基础都离不开概率论和统计学
切比雪夫不等式:当样本数足够多时一个随机变量和他的数学期望值之间的误差,可以任意小
模型的选择不是一件容易的事,通常简单的模型未必与真实情况相匹配.
日心说地心说如果一开始模型选的不好,以后修修补补就很困难,因此,在过去无论在理论上还是工程上,大家都把主要的精力放在寻找模型上
有了模型之后,第二步就找到模型的参数,以便让模型至少和以前观察的数据相吻合,这一点在过去的被重视程度远远不如寻找模型。但是今天他又有一个比较时髦而高深的词——机器学习。
鉴于完美模型未必存在,即使存在,找到他也非常不容易,而且费时间,因此就有人考虑能否通过很多简单不完美的模型凑在一起起到完美模型的效果呢?
这个答案是肯定的,从理论上讲,只要找到足够多的具有代表性的样本,就可以利用数学找到一个模型或一组模型的组合,使得它和真实情况非常接近。
数据驱动方法的最大优势在于它可以最大程度上得益于计算机技术的进步,尽管数据驱动方法一开始数据量不足,计算能力不够。随着时间推移,摩尔定律保证了计算能力和数据量,以一个指数级增长的速度递增。数据驱动方法可以变得非常正确。相比之下,很多其他方法的改进需要靠理论的突破,因此改进起来周期非常长。
数据驱动方法是大数据的基础,智能革命的核心,它带来了一种新的思维方式。