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脚本做了些修改
简单来说: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用户组是个好地方,碰到的很多问题都可以在里面找到,有专人负责解答
相关推荐
Spark是Apache基金会下的一个开源大数据处理框架,以其高效、易用和可扩展性著称。Spark的核心设计理念是基于内存计算,极大地提升了数据处理速度。在本压缩包中,"spark-3.4.0-bin-without-hadoop"是Spark的一个预...
Spark纯净版安装包是一个用于安装Apache Spark的软件包,该软件包提供了Spark的基本功能和组件,但不包含任何额外的扩展或依赖项。纯净版安装包旨在提供一个轻量级、简单易用的Spark安装选项,适用于用户希望快速...
《Spark各种Demo学习详解》 Spark作为大数据处理领域的重要工具,以其高效、易用和弹性伸缩等特性深受开发者喜爱。Spark提供了丰富的API,支持多种编程语言,包括Scala、Java、Python和R,使得开发大数据应用变得...
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
Learning Spark中文版.pdf Spark机器学习.pdf 深入理解Spark:核心思想与源码分析.pdf Spark快速大数据分析.pdf Spark高级数据分析.pdf 数据算法--Hadoop-Spark大数据处理技巧.pdf Spark大数据处理:技术、应用与...
这些库允许Spark与各种数据源交互,并支持不同的数据格式。 在实际项目中,开发者可能会遇到以下几种jar包: 1. **Spark Core**:这是Spark的基础,提供了分布式任务调度和内存管理功能。核心库包括`spark-core_2....
在现代大数据处理领域,Spark和Spring Boot的整合已经成为一种常见的技术组合。Spark作为一个快速、通用且可扩展的大数据处理框架,而Spring Boot则为构建微服务提供了简洁、高效的解决方案。本篇文章将深入探讨如何...
6. **MLlib(机器学习库)**:Spark的机器学习库MLlib包含各种算法,如分类、回归、聚类、协同过滤等。我们将学习如何构建和训练模型,以及调参优化。 7. **GraphX(图计算)**:Spark的图处理模块GraphX提供了一种...
Spark Streaming通过DStream(Discretized Stream)来抽象时间序列的数据,允许开发者处理来自各种源(如Kafka、Flume等)的实时数据。在SparkDemo中,你可以学习如何设置流处理作业,接收数据,以及执行实时分析。...
《Spark技术深度解析》 ...总结,Spark作为一个强大的大数据处理框架,其丰富的组件和灵活的设计使其在各种场景下展现出强大的处理能力。掌握Spark,意味着能更好地应对大数据挑战,提升数据驱动决策的效率和质量。
以下是关于Spark3.2.2的一些关键知识点: 1. **DataFrame/Dataset API**:Spark3.2.2继续强化了DataFrame和Dataset API,这是Spark SQL的核心,提供了类型安全和更强的编译时检查。它们允许开发人员使用Java、Scala...
Spark 编程指南简体中文版 本资源为 Spark 编程指南简体中文版,涵盖了 Spark 的基本概念、数据处理、流处理、图形处理和 SQL 等方面的内容。以下是该资源中的知识点总结: Spark 基础 * Spark Shell:交互式 ...
Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql),总结的很全面。 Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql)。 Spark零基础思维导图(内含spark-core ,spark-streaming,...
spark-ffm, 关于 Spark,FFM ( 字段Awared分解机) spark-ffm基于spark的场awared分解机的实现。 请参见 http://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf数据应格式化为label field1:feat1:val
Apache Spark 是一个强大的分布式计算框架,它以高效、易用和通用性著称。这个压缩包包含三本书籍,分别从不同的角度深入探讨了Spark的设计、实现和源码解析,对于理解和掌握Spark的核心原理和技术至关重要。 ...
### Spark2.0安装教程与Spark1.3共存配置详解 #### 一、引言 随着大数据技术的发展,Apache Spark 已成为处理大规模数据集的重要工具之一。然而,在实际应用过程中,不同的项目可能需要使用不同版本的 Spark 来...
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点...
SparkTI (Spark on TiDB)是TiDB基于Apache Spark的独立于原生系统的计算引擎。它将Spark和TiDB深度集成,在原有MySQL Workload之外借助Spark支持了更多样的用户场景和API。这个项目在SparkSQL和Catalyst引擎之外实现...
在标题"spark-hive-2.11和spark-sql-以及spark-hadoop包另付下载地址"中,我们关注的是Spark与Hive的特定版本(2.11)的集成,以及Spark SQL和Spark对Hadoop的支持。这里的2.11可能指的是Scala的版本,因为Spark是用...