Spark小结及性能调优

    最近转战Spark相关领域,编写了spark版本的LDA算法,在此过程中对程序不断调优同时也对spark系统相关参数进行调优,得到了一下一些经验。

    首先是对于RDD转化为PariRDD,初学者可能会有很多疑问,为什么通过map将RDD转化为tuple后应该有相应的PairRDD操作,但是IDE并么有提示,原因是缺少隐式转换,加入  import org.apache.spark.SparkContext._  即可解决。

    其次,有些情况下combineByKey的性能是十分好的,相当于在每个paritition处做combiner,减少网络传输和处理时间。

    下面是一些参数调整:

     1、spark.driver.maxResultSize 8g    driver获得处理结果的最大内存数,由于我要处理大矩阵,所以这个参数还是不得不改的

     2、spark.yarn.executor.memoryOverhead  2048    跑了一段时间后发现很多executor堆外内存占用过大,采用这个参数后稍好

     3、spark.shuffle.blockTransferService nio     spark 1.2.0以后shuffle service改为了netty,这个很扯淡,我改为nio后堆外内存较少了很多,同时处理时间提示提升了一倍

     先写到这儿,感谢同事何良均提供第三个参数,他的blog地址是http://blog.csdn.net/hit_hlj_sgy/article/list/2

     我的spark LDA github地址是https://github.com/jiangyu/SparkLDA

Spark 编译及部署

    Spark编译不是很复杂,使用maven就可以编译,但对maven的内存要求较高。

    1、export MAVEN_OPTS=”-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m”

    2、mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

          因为我是要跑在yarn上,其中要指定hadoop版本。

    除了第一次需要下载大量jar包,其它编译大概需要20分钟左右,编译好后在$SPARK_HOME/assembly/target/scala-2.10/ 下面有个jar包,大概100多兆,这是我们部署用的。


    Spark部署和配置也不难,从官网下载发布包(非刚才的源码包)即可,需要以下几步就可以部署使用。

    1、$SPARK_HOME/lib  下替换spark-assmbly的jar包,替换为刚才编译出来的jar包

    2、在$SPARK_HOME/conf  配置spark-env.sh

export SPARK_YARN_JAR==hdfs://ns1/spark/jar/spark-assembly-1.2.1-hadoop2.4.0.jar                #上传刚编译的jar包到dfs上,让所有worked都能get到

export HADOOP_CONF_DIR=/usr/local/hadoop-2.4.0/etc/hadoop                    #Hadoop配置路径

export YARN_CONF_DIR=$HADOOP_CONF_DIR              #Yarn配置路径

export SPARK_DAEMON_JAVA_OPTS=”-Djava.library.path=/usr/local/hadoop-2.4.0/lib/native/ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data0/hadoop/gclog/heap.dump.spark”

export SPARK_SUBMIT_LIBRARY_PATH=/usr/local/hadoop-2.4.0/lib/native/         #LD_LIBRARY使用,调用native库用,如果使用lzo等配置好

     

     3、在$SPARK_HOME/conf下配置spark-default.sh

 

 

spark.yarn.historyServer.address *.*.*.*:18080     #yarn historyserver地址

 

spark.eventLog.enabled true

 

spark.eventLog.dir   hdfs://ns1/spark/logs

 

 

    至此,Spark配置完成,如果在YARN上跑一下测试可以用$SPARK_HOME/bin/spark-shell —master yarn-client