spark on hive 优化?

我来抛砖引玉一下吧。首先,我们要搞清楚瓶颈在哪里,内存还是CPU。通常来说,如果是机器学习之类的应用,瓶颈一般在CPU,如果是ETL,瓶颈在I/O的可能性要大一点。如何定量的判断瓶颈在哪里呢,Spark的web UI提供了很多信息,比如内存占用率等等,另外我们使用的spark一般都是某个厂商提供的发行版的一部分,比如Cloudera,MapR等等,这些发行版会提供很详细的IO指标。可以帮助你确认是否有I/O瓶颈。解决I/O瓶颈的方法有很多,常见的避免使用groupByKey,用reduceByKey 或者combineByKey代替用Kryo序列化代替java自己的序列化参考这里 https://spark.apache.org/docs/1.3.1/tuning.html另外推荐你升级到spark 1.3以上版本,用dataframe代替RDD,根据benchmark,dataframe可以带来很大的性能提升(因为spark的DF优化器可以利用data source的Schema对execution plan的优化,大大减少I/O需求)。参考这里 http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science。
■网友
用impala吧
■网友
对于千万级别的第二类查询,spark sql 20-50s的response time感觉比较正常啊。至于许多第二类查询导致系统变慢的问题:(1) 如果是cpu瓶颈,可以通过增加# nodes,同时为相应spark app配置更多executors,以及增加每个executor的core数量; (2) 如果瓶颈在I/O, 最好上SSD; 感觉还可以为spark 配置Tachyon; 或者如果数据是静态的,完全可以直接cache table.


    推荐阅读