`
run_xiao
  • 浏览: 192315 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于spark各种蛋疼的事

阅读更多

spark作为UC Berkeley开源的一个计算框架,现在已经是0.7.0版本了,但还不是特别成熟,离实际生产使用还有些距离。最近花了一周左右时间折腾了下,终于顺利的搭建好了一个6台机器的集群,并能顺利跑些大点数据,现在把过程中各种蛋疼的事记下来,以免忘记了又要折腾很久


安装

spark依赖scala,并且要自己编译源代码,这个可以参考http://rdc.taobao.com/team/jm/archives/1823

另外,spark 0.6之后可以不依赖Mesos,可以自己管理资源,所以在con/spark-env.sh中不需配置Mesos,直接通过bin/start-all.sh就可以启动。这里主要记录下要访问hdfs的需要做哪些。

首先,编译源代码前修改spark-0.7.0/project/SparkBuild.scala依赖的hadoop包版本,改成与你访问的hdfs版本一致,然后再编译打包。

      // Hadoop version to build against. For example, "0.20.2", "0.20.205.0", or
     // "1.0.4" for Apache releases, or "0.20.2-cdh3u5" for Cloudera Hadoop.
     //val HADOOP_VERSION = "0.20.2-cdh3u1"
     //val HADOOP_MAJOR_VERSION = "1" 
   
     // For Hadoop 2 versions such as "2.0.0-mr1-cdh4.1.1", set the HADOOP_MAJOR_VERSION to "2" 
     val HADOOP_VERSION = "2.0.0-mr1-cdh4.1.2"
     val HADOOP_MAJOR_VERSION = "2"

不然可能会报诸如:客户端与服务端版本不一致的问题

其次,编译好了并不代表就可以访问hdfs了,通常作为客户端访问hdfs需要一个core-site.xml类似的配置文件,包含账号/密码、压缩等配置。可以把这个配置文件放在spark-0.7.0/conf下,或者单独建立自己的应用程序时添加进去(后面会将怎样建一个scala的工程并提交运行)。然后运行./spark-shell,

       scala> val distFile = sc.textFile("hdsf://...")
       scala> distFile.count()

能正常运行说明能访问hdfs了。另外对于hadoop 2.0版本,core-site.xml文件里必需包含

     <property>
          <name>fs.hdfs.impl</name>
          <value>org.apache.hadoop.hdfs.DistributedFileSystem</value>
     </property>

不然可能会报诸如:不认识hdfs文件系统之类的错误

另外,编译完了后用sbt/sbt assembly,把spark依赖的jar都打到spark-0.7.0/core/target/spark-core-assembly-0.7.0.jar里,后面建立自己工程时会需要

安装好了就需要建立自己的工程项目然后写程序提交job,spark支持java,scala和python,现在简单讲下建一个scala项目:


scala Job开发

先安装scala build工具sbt:sudo rpm -ivh http://scalasbt.artifactoryonline.com/scalasbt/sbt-native-packages/org/scala-sbt/sbt//0.12.2/sbt.rpm

以一个小程序为例:一个访问hdfs上文件,并计算单词格式,并输出到hdfs上,工程名:hdfs_test 工程的目录结构:

   hdfs ---
     |-- hdfs_test.sbt
     |-- lib
           |--spark-core-assembly-0.7.0.jar (把上面spark 打包的jar复制过来)
     |-- src 
           |--main
                |--resources
                       |--core-site.xml (访问hdfs的客户端配置)
                |--scala
                       |--HdfsTest.scala (你的程序)

hdfs_test.sbt内容

 name := "hdfs test"
 version := "1.0"
 scalaVersion := "2.9.2"

HdfsTest.scala内容

  import spark._
  import SparkContext._
  object HdfsTest {
    def main(args: Array[String]) {
       val sc = new SparkContext("spark://10.232.42.75:7077", "HdfsTest",
       System.getenv("SPARK_HOME"), Seq("/home/admin/project/hdfs_test/target/scala-2.9.2/hdfs-test_2.9.2-1.0.jar"))
       val file = sc.textFile("hdfs://search042092.sqa.cm4:9000/app/network_mining/link/30days_trade_link/20130319")
       var mapped = file.flatMap(line => line.split("\t")).map(word => (word,1))
       var counts = mapped.reduceByKey(_ + _)
       counts.saveAsTextFile("hdfs://search042092.sqa.cm4:9000/app/network_mining/test_file");
       System.exit(0)
    }
 }

编译打包:sbt package 运行:要提交一个job运行,还是比较蛋疼的,尝试过各种方式后,终于决定看下examples和run脚本,然后把run脚本做了些修改

Image:Spark_run_1.jpg

Image:Spark_run_2.jpg

简单来说:run脚本接受-jar参数,并把jar放到classpath 执行spark-0.7.0/run -jar /home/admin/project/hdfs_test/target/scala-2.9.2/hdfs-test_2.9.2-1.0.jar HdfsTest即可运行


优化

spark原本的配置跑大量数据的时候会有一些,尤其是jvm gc,默认的采用串行gc,slave一下就挂了,可以改成采用CMS,在spark-env.sh中添加如下配置:

 SPARK_JAVA_OPTS="-Dspark.storage.blockManagerHeartBeatMs=60000 -Dspark.local.dir=$SPARK_LOCAL_DIR -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:$SPARK_HOME/logs/gc.log  -XX:+UseConcMarkSweepGC  -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=60"

spark.storage.blockManagerHeartBeatMs 设置心跳时间,原来貌似是5m,太短了,一旦发生full gc就timeout了

spark.local.dir 是每个节点计算保存临时数据的目录,默认在/tmp下,如果/tmp不够大很容易满

其它就是cms的配置,设置后效果还是很明显的。但观察每个节点隔两分钟左右仍然会因为full gc而hang住。增大旧生代后可能会有效果。


最后,google的spark用户组是个好地方,碰到的很多问题都可以在里面找到,有专人负责解答

分享到:
评论
2 楼 fireinwind 2013-07-10  
wing_0 写道
你好,
以 spark-0.7.0/run -jar /home/admin/project/hdfs_test/target/scala-2.9.2/hdfs-test_2.9.2-1.0.jar HdfsTest
的方式 执行任务,run里面要怎么修改啊?你的截图已经无效了看不到。我也为次部署搞得很晕。
谢谢!



截图看不到啊。。。

1 楼 wing_0 2013-04-29  
你好,
以 spark-0.7.0/run -jar /home/admin/project/hdfs_test/target/scala-2.9.2/hdfs-test_2.9.2-1.0.jar HdfsTest
的方式 执行任务,run里面要怎么修改啊?你的截图已经无效了看不到。我也为次部署搞得很晕。
谢谢!

相关推荐

    一个关于spark介绍的PDF文件

    关于spark的介绍,可以作为初步的了解

    Spark经典论文合集

    An Architecture for Fast and General Data Processing on Large Clusters.pdf Discretized Streams An ...Spark SQL Relational Data Processing in Spark.pdf spark.pdf 大型集群上的快速和通用数据处理架构.pdf

    spark各种电子书.zip

    Learning Spark中文版.pdf Spark机器学习.pdf 深入理解Spark:核心思想与源码分析.pdf Spark快速大数据分析.pdf Spark高级数据分析.pdf 数据算法--Hadoop-Spark大数据处理技巧.pdf Spark大数据处理:技术、应用与...

    Spark各种demo学习

    Spark各种demo学习

    Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql),总结的很全面.zip

    Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql),总结的很全面。 Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql)。 Spark零基础思维导图(内含spark-core ,spark-streaming,...

    spark-ffm, 关于 Spark,FFM ( 字段Awared分解机).zip

    spark-ffm, 关于 Spark,FFM ( 字段Awared分解机) spark-ffm基于spark的场awared分解机的实现。 请参见 http://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf数据应格式化为label field1:feat1:val

    Spark 入门实战系列

    Spark 入门实战系列,适合初学者,文档包括十部分内容,质量很好,为了感谢文档作者,也为了帮助更多的人入门,传播作者的心血,特此友情转贴: 1.Spark及其生态圈简介.pdf 2.Spark编译与部署(上)--基础环境搭建....

    大数据Spark企业级实战

    《大数据Spark企业级实战》详细解析了企业级Spark开发所需的几乎所有技术内容,涵盖Spark的架构设计、Spark的集群搭建、Spark内核的解析、Spark SQL、MLLib、GraphX、Spark Streaming、Tachyon、SparkR、Spark多语言...

    Spark和TiDB (Spark on TiDB)

    SparkTI (Spark on TiDB)是TiDB基于Apache Spark的独立于原生系统的计算引擎。它将Spark和TiDB深度集成,在原有MySQL Workload之外借助Spark支持了更多样的用户场景和API。这个项目在SparkSQL和Catalyst引擎之外实现...

    基于spark的大数据论文资料

    本资料是集合20篇知网被引最高的基于spark的大数据论文,包括大数据Spark技术研究_刘峰波、大数据下基于Spark的电商实时推荐系统的设计与实现_岑凯伦、基于Spark的Apriori算法的改进_牛海玲、基于Spark的大数据混合...

    实验七:Spark初级编程实践

    使用命令./bin/spark-shell启动spark 图2启动spark 2. Spark读取文件系统的数据 (1) 在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; 图3 spark统计行数 (2) 在spark-...

    spark3.0入门到精通

    ├─Spark-day01 │ 01-[了解]-Spark发展历史和特点介绍.mp4 │ 03-[掌握]-Spark环境搭建-Standalone集群模式.mp4 │ 06-[理解]-Spark环境搭建-On-Yarn-两种模式.mp4 │ 07-[掌握]-Spark环境搭建-On-Yarn-两种...

    8.SparkMLlib(上)--机器学习及SparkMLlib简介.pdf

    1.Spark及其生态圈简介.pdf 2.Spark编译与部署(上)--基础环境搭建.pdf 2.Spark编译与部署(下)--Spark编译安装.pdf 2.Spark编译与部署(中)--Hadoop编译安装.pdf 3.Spark编程模型(上)--概念及SparkShell实战....

    Apache Spark 2 for Beginners [2016]

    Apache Spark 2.0 for Beginners English | ISBN: 1785885006 | 2016 | Key Features This book offers an easy introduction to the Spark framework published on the latest version of Apache Spark 2 Perform ...

    Spark全面精讲(基于Spark2版本+含Spark调优+超多案例)【不是王家林版本】

    0基础spark,基于spark2,内容完整全面,学完精通spark

    Spark实战高手之路 - Spark亚太研究院.part4.rar

    Spark实战高手之路 【Spark亚太研究院系列丛书】《Spark机器学习库(v1.2.0)》-王宇舟 【Spark亚太研究院系列丛书】Spark实战高手之路-第1章(1) 【Spark亚太研究院系列丛书】Spark实战高手之路-第1章(2) ...

    spark Linux 版本安装包

    spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包spark Linux 版本安装包...

    Apache Spark 2.4 and beyond

    Apache Spark 2.4 comes packed with a lot of new functionalities and improvements, including the new barrier execution mode, flexible streaming sink, the native AVRO data source, PySpark’s eager ...

    8.SparkMLlib(下)--SparkMLlib实战.pdf

    1.Spark及其生态圈简介.pdf 2.Spark编译与部署(上)--基础环境搭建.pdf 2.Spark编译与部署(下)--Spark编译安装.pdf 2.Spark编译与部署(中)--Hadoop编译安装.pdf 3.Spark编程模型(上)--概念及SparkShell实战....

Global site tag (gtag.js) - Google Analytics