Dataproc上的处理速度非常慢,为9小时,而本地机器则为3分钟

时间:2015-11-14 21:50:44

标签: apache-spark google-cloud-platform google-cloud-dataproc

从日志中我可以看到有182k行70MB。需要1.5小时加载70MB数据和9小时(从15/11/14 01:58:28开始并于15/11/14 09:19:09结束)在Dataproc上训练182K行。在本地计算机上加载相同的数据并运行相同的算法需要3分钟

DataProc Log

15/11/13 23:27:09 INFO com.google.cloud.hadoop.io.bigquery.ShardedExportToCloudStorage: Table 'mydata-data:website_wtw_feed.video_click20151111' to be exported has 182712 rows and 70281790 bytes
15/11/13 23:28:13 WARN akka.remote.ReliableDeliverySupervisor: Association with remote system [akka.tcp://sparkExecutor@rc-spark-poc-w-1.c.dailymotion-data.internal:60749] has failed, address is now gated for [5000] ms. Reason: [Disassociated] 

15/11/14 01:58:28 INFO com.dailymotion.recommender.BigQueryRecommender: Fetching the Ratings RDD
15/11/14 01:58:28 INFO com.dailymotion.recommender.BigQueryRecommender: Transforming the video feature matrix
15/11/14 01:58:28 INFO com.dailymotion.recommender.BigQueryRecommender: Training ALS Matrix factorization Model


[Stage 2:=============================>                             (1 + 1) / 2]

15/11/14 09:19:09 WARN com.github.fommil.netlib.BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS
15/11/14 09:19:09 WARN com.github.fommil.netlib.BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeRefBLAS

15/11/14 09:19:44 INFO com.dailymotion.recommender.BigQueryRecommender: Transforming the video feature matrix
15/11/14 09:19:44 INFO com.dailymotion.recommender.BigQueryRecommender: Transforming the user feature matrix
  1. 将数据复制到本地计算机

    r.viswanadha$ gsutil cp -r gs://<mycompany>-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000 .
    
    
    Copying gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/data-000000000000.json... 
    
    Downloading ...201511132327_0000/shard-0/data-000000000000.json: 141.3 MiB/141.3 MiB      
    
    Copying gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/data-000000000001.json... 
    
    Copying gs://<mycompany>-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-1/data-000000000000.json...`
    
  2. 使用相同的算法。 ALS火车步骤耗时约3分钟

    com.dailymotion.recommender.BigQueryRecommender --app_name BigQueryRecommenderTest --master local[4] --input_dir /Users/r.viswanadha/Documents/workspace/rec-spark-java-poc/input/job_201511132327_0000/shard-0/ 
    
  3. 首次运行

    15/11/14 13:19:36 INFO BigQueryRecommender: Training implicit features for the ALS Matrix factorization Model
    ...
    15/11/14 13:22:24 INFO BigQueryRecommender: Transforming the video feature matrix
    

    第二次运行

    15/11/14 13:29:05 INFO BigQueryRecommender: Training implicit features for the ALS Matrix factorization Model
    
    
    ...
    
    15/11/14 13:31:57 INFO BigQueryRecommender: Transforming the video feature matrix
    

    DataProc群集有1个Master和3个Slave,每个104GB(RAM)和16个CPU。

    我的本​​地机器有8GB(RAM)和2个CPU 2.7GHz Core i5

    gsutil ls -l -r -h  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000
    
    gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/: 
    
    gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/: 
    
        0 B  2015-11-13T23:27:13Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/ 
    
        141.3 MiB  2015-11-13T23:29:21Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/data-000000000000.json 
    
       0 B  2015-11-13T23:29:21Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-0/data-000000000001.json 
    
    gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-1/: 
    
        0 B  2015-11-13T23:27:13Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-1/ 
    
        0 B  2015-11-13T23:28:47Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/shard-1/data-000000000000.json 
    
       0 B  2015-11-13T23:27:09Z  gs://dailymotion-spark-rc-test/bqdata/hadoop/tmp/bigquery/job_201511132327_0000/ 
    
    TOTAL: 6 objects, 148165416 bytes (141.3 MiB)
    

2 个答案:

答案 0 :(得分:3)

回顾一些离线调查结果,当分布式集群上的运行速度比本地设置慢一些时,需要考虑的主要瓶颈是交叉方面的I / O往返延迟瓶颈 - 网络服务依赖项以及磁盘和本地I / O.

一般要寻找的东西(其中一些可能适用于您的具体情况,也可能不适用,但对于遇到类似问题的其他人可能会很常见):

  1. 确保包含数据的GCS存储桶与您已使用gsutil ls -L gs://[your-bucket]部署Dataproc群集的GCE区域位于同一区域。跨大陆流量不仅速度明显变慢,而且可能会在您的项目中产生额外的网络成本。
  2. 如果您的作业有任何其他网络依赖项,例如查询API或在GCE上运行某种类型的单独数据库,请尝试将它们放在同一区域中;即使在同一个大陆,GCE跨区域流量也可能有几十毫秒的往返延迟,这可能会显着增加,特别是如果有每条记录请求(例如,30毫秒* 180k记录到1.5小时) )。
  3. 尽管这次可能不适用于您的特定情况,但请记住尽可能避免通过Hadoop FileSystem接口对GCS进行每记录往返I / O; GCS的总体吞吐量具有很高的可扩展性,但就远程存储而言,往返延迟比您在本地计算机上测量的往返延迟要慢得多,因为本地读取通常会影响操作系统缓冲区缓存,或者如果您使用的是具有SSD的笔记本电脑能够承受大量亚毫秒的往返行程,那么往返GCS的往返时间为30ms-100ms。
  4. 一般而言,对于可以支持非常高的吞吐量但遭受长往返延迟的用例,如果数据很小且没有,请务必使用类似repartition()的数据对数据进行分片。自然地分成足够的并行性以确保您的Spark集群的良好利用。

    最后,我们最新的Dataproc release修复了一堆本机库配置,因此它可能会为ALS部分以及其他mllib用例显示更好的性能。

答案 1 :(得分:2)

对于任何遇到类似事物的人:当只处理GCS中的一个小对象(或者使用BigQuery连接器中的数据的单个分片)时,您最终可以在Spark RDD中使用单个分区,因此,最终很少或没有并行性。

虽然它会导致额外的随机播放阶段,但是在从GCS或BigQuery读取之后可以立即重新分区输入RDD以获取所需数量的分区。额外的shuffle是否有益取决于RDD中每条记录需要多少处理或IO。