我有一个Cloudera集群,其中包含3个安装了Apache Spark的节点。我正在运行一个Spark程序,它从HBase表中读取数据,转换数据并将其存储在不同的HBase表中。使用3个节点,对于500万行HBase数据,大约需要1分10秒。在减少或增加节点数量时,所花费的时间相似,而预计在增加节点数量后会减少,并且通过增加节点数量来增加。下面是时间:
1)有3个节点:500万行大约1分10秒。 2)1节点:500万行大约1分10秒。 3)有6个节点:大约1分10秒,500万行。
尽管增加或减少节点数量,但同样时间的原因是什么?
谢谢。
答案 0 :(得分:0)
默认情况下,Hbase可能会从单个区域或两个区域(并行度)读取500万行。写入将发生在单个区域,或者可能基于数据的规模进行2。
答案 1 :(得分:0)
Spark是你的瓶颈吗?如果分配可变资源(更多/更少的核心或内存),如果作业上的计算是瓶颈,则只会导致作业的总体时间发生变化。
如果您的计算(转换)相对简单,瓶颈可能是从HBase读取或从HBase写入。在这种情况下,无论您可以提供多少节点/核心。运行时间将保持不变。
从您提到的运行时间来看,这似乎就是问题所在。
答案 2 :(得分:0)
瓶颈可能是hbase和spark方面中的一个或两个。您可以在hbase端查看区域服务器的表号。它与数据的读写并行性具有相同的含义。通常越多越好。您必须注意the hotspotting issue
可以使用您的数据的rdd数来检查火花侧并行度。也许你应该重新分配你的数据。除此之外,群集资源利用率可能是您的问题。要检查这一点,您可以监控spark主Web界面。节点数,每个节点的工作者数,作业数,每个工作人员的任务数等。此外,您还必须在此界面中检查每个工作人员的CPU数量和内存使用率。 有关详细信息here