如何知道我的数据有偏差?

fslejnso  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(396)

在将数据(假设表)传输到hdfs之后,我不知道我的数据是如何复制的(哪个部分到哪个machne(节点))。
所以,运行sparksql查询有人说您可以向spark提示我的数据是倾斜的。
但我怎么知道我的数据是有偏差的,这样我就可以给spark提供提示了?

mtb9vblg

mtb9vblg1#

当您在任何分布式系统(如hdfs)中加载数据时,您可以使用分区键来加载数据。在这种情况下,如果与其他值相比,某个分区键值的记录数更多,则数据分布不均匀。大多数情况下,spark会很好地工作,即使您的数据稍微有点倾斜,但例如,在一个分区值中,您有90%的数据,而另一个分区值有10%,那么对于大型数据集来说,这将是一个挑战。你的一个任务会比另一个任务做更多的工作,spark会被困在一个任务中。所以数据分析是重要的因素
为了处理数据skegness,您需要均匀地划分数据,或者使用迭代广播连接。这里有一篇来自databricks的优秀文章。请用文本检查databricks。
————————-
默认情况下,为一个hdf块创建一个分区。默认为64MB。在从spark读取时,如果您不打算为并行性提供任何参数,那么它将为每个块创建一个任务。举个例子,你有4个核,分区是5。每个分区大约需要10分钟,因此4个内核将在4个分区上并行工作,并在10分钟内完成。最后一个分区将在接下来的10分钟内完成,一旦它被一个空闲的核心占用。所以多分区也不好。在分区较少的情况下,如果大多数数据驻留在一个分区中,并且一个任务比另一个任务做更多的工作,那么并行性就会降低,并且数据倾斜可能会发生。

yquaqz18

yquaqz182#

这实际上取决于您的数据质量以及您希望如何使用这些数据。另外,取决于你的Spark如何实现算法。基本上,您可以使用sql进行一些查询,例如user\u name,选择其中一列作为键。以此类推,通过看是否有巨大的差异来组成一个小组。

For example if have such case 
select count(distinct(user_name)) from your table group by user_id 

count           username 
199999999999      abc123
12                abc124
6                 abc121

检查上面的例子,用户名123这是数据倾斜的问题。
关于如何解决apachespark1中的数据倾斜问题,很少有参考文献。http://silverpond.com.au/2016/10/06/balancing-spark.html 2https://databricks.com/session/handling-data-skew-adaptively-in-spark-using-dynamic-repartitioning

相关问题