`
天朗java
  • 浏览: 33762 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

Spark学习笔记

阅读更多
以下是读Learning Spark Lightning-Fast Big Data Analysis时做的翻译或笔记
持续更新...(先开个头,以后有没有时间再说...)
1.数据分析工具Spark介绍
2.下载Spark并尝试使用
7.在集群中运行Spark (用sbt打包Spark应用)



   使用机器环境:
   操作系统:Windows7
    scala:2.11.4
   

    这个章节我们将下载Spark并用本地模式(local mode)在单机上运行。这个章节适合任何初学者阅读,当然包括数据科学家和工程师。
    你可以用Python、Java或Scala编写Spark应用,要看懂本教程中的代码你不需要精通某一种语言,但是你应该了解一种语言的基本语法。我们将尽可能用包含这三种语言版的例子(译者注:以下将主要翻译Scala版,以节约时间)。
    Spark本身是用Scala语言编写的,运行在Java虚拟机上,所以要运行Spark你需要先安装Java 6(或更新的版本)。如果你想用Python API编写Spark应用你还需要安装Python运行环境(2.6版本或更新),注意Spark不支持Python3。
   
   
下载Spark
        首先我们需要下载Spark并解压。这里将下载一个已编译好的最新版本。用浏览器访问http://spark.apache.org/downloads.html,  选择包类型为 “Pre-build for Hadoop2.4 and later",然后选择”Direct Download“,点击下面链接开始下载一个名为 spark-1.2.0-bin-hadoop2.4.tgz的压缩包。(译者注:当前最新版本已是1.3.0,下载的压缩包名为spark-1.3.0-bin-hadoop2.4.tgz)


        小贴士:
        如果你要在Windows系统上安装Spark,请不要安装在带有空格的目录下。
        不安装Hadoop也可以运行Spark,如果你已经安装了Hadoop,那么你需要选择与你安装Hadoop版本对应的Spark下载包。
       如果你的操作系统不支持解压TAR包,你可以在网络上选择支持解压TAR包的免费工具,如:Windows环境下的7-zip。

        下载好后解压,并进入解压目录,你将看到如下文件(目录):
         README.md
                包含如何运行Spark的简短教程。
         bin
                包含一些操作Spark的可执行文件(例如:我们将在稍后介绍的Spark Shell)
        core,streaming,python,...
                包含Spark组件的源码。
        examples
                包含一些有用的Spark standalone方式的例子,你可以运行这些例子以学习相关API。

        不要被这么多文件吓到,不要急,我们将在后续章节慢慢介绍。现在,让我们开始尝试使用Spark Shell运行一些例子,然后我们再自己编写,编译,运行一个简单的Spark应用。
        本章节的所有例子将使用Spark本地模式(local mode)运行,不是分布式运行,只需要一台机器。Spark支持多种运行模式,除了本地模式还可以运行在Apache Mesos、Hadoop Yarn上,还有Spark提供的Standalone Scheduler 模式。我们在第7章详细这几种运行模式。

        Spark Shell介绍:
        Spark Shell可以用于即席数据分析,如果你用过其他Shell如R、Python、Scala或者操作系统Shell如Bash、Windows命令行你会发现Spark Shell与这些有些类似,不同的是这些Shell只能操作单台机器上内存和磁盘而通过Spark Shell你可以操作多台机器的内存和磁盘——Spark会自动把这些处理任务分发到多台机器执行。
        Spark通过将数据加载到Worker节点内存中运行,这样多个甚至一个集群就可以在几秒中内处理分布在多台机器上的TB级别的数据。这样才使Spark Shell很适合做迭代、即席、统计分析。Spark提供Python和Scala两种Shell并且都支持机器操作。

        小贴士
         本教程的大多数例子都有Python、Scala、Java版本,但Spark Shell相关的只有Python、Scala版本。通过Spark Shell可以很好的学习Spark API,我们建议您选择Python或Scala学习。

        领略Spark Shell的最简单方式是用它做一个简单的数据分析。可以参考Spark官网的 Quick Start Guide.
        运行bin/spark-shell启动Spark Scala Shell 或者运行 bin/pyspark启动Spark Python Shell。Shell启动需要几秒钟的时间,运行过程中会显示出很多日志信息。启动画面:

小贴士
    如果你觉得打印出的日志太多太乱,你可以在/conf目录下复杂log4j.properties.template到log4j.properties,并修改其中的log4j.rootCategory=INFO,console为:
    log4j.rootCategory=WARN,console
    再次启动Shell日志就少多了。
    Windows如果报Failed to initialize compiler: object scala.runtime in compiler mirror not found.  可以修改bin/spark-class2.cmd 的92~96行(当前版本为Spark1.3.0 版本不同可能会有差异)添加-Dscala.usejavacp=true,修改后的内容为:


    在Spark中我们通过操作弹性分布式数据集(RDDs)在分布式环境中进行运算。RDDs是Spark对分布式数据计算的抽象。

    在介绍RDDs前我们先通过Spark Shell和本地文本文件创建一个RDDs并做些简单的即席分析。在Shell中输入:

你可以按Ctrl+D退出Shell。


Spark主要概念介绍
    我们已经用Spark Shell运行了我们第一个Spark程序,接下来我们需要了解更多的细节。
    简单的说每个Spark应用都包含一个用来在集群上启动多个并行操作的Driver程序(driver program)。Driver程序包含应用的主函数并定义了数据集怎么在集群上分布。在 上个例子中Driver程序就是Spark Shell,你只需要输入些操作让它执行。
    Driver程序通过SparkContext对象访问Spark集群,在Shell中会自动创建SparkContext对象,并赋值给sc变量。
    有了SparkContext你就可以创建RDDS了。在上面的例子中我们调用sc.textFile()创建了一个包含文本文件中所有行的RDD。然后我们可以对这个RDD执行很多操作,如count();Driver程序为了运行这些操作管理了很多计算节点,这些节点被称为executors。例如,当我们执行count()操作时,可能有很多台机器在同时计算文件的不同区域的行数。因为我们是本地模式运行Shell的所以只有一个机器在计算,当然你可以用Shell链接集群以并行分析数据。下图显示exector在集群上的分布情况:



写一个独立的(不用Spark Shell的)应用

    你可以用Java、Scala或者Python编写独立的Spark应用,与用Shell编写不同的是你需要自己创建SparkContext,其它的都一样。

1.首先创建项目目录 SparkFirst (路径中最好不要包含中文或空格)
2.进入项目目录 创建src/main/scala/spark/learn/first/WordCount.scala文件,并编写代码:

package spark.learn.first

/*引入相关的类*/
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

object WordCount{
def main(args:Array[String]) {
    val inputFile = args(0);//文件路径 在运行时传入
    val conf = new SparkConf().setMaster("local").setAppName("wordCount");
    val sc = new SparkContext(conf);
  
    val input = sc.textFile(inputFile);//根据传入的文件路径读取文件
    //分别计算文件中包含字母A和B的字数
    val numAs = input.filter(line=>line.contains("a")).count()
    val numBs = input.filter(line=>line.contains("b")).count()
    println("Lines with a:%s,Lines with b:%s".format(numAs,numBs))

}

}

这种应该是创建SparkContext的最简单方式,只需要设置俩个参数:
    集群URL:这里我们传人的是local,local表明是在本机上以单线程方式运行的Spark,而不是集群方式。
    应用名称:这里命名为My App。这个用于在Spark管理界面中区分不同的应用。

3.在项目目录下新建build.sbt文件(用于设置SBT构建时相关参数及项目依赖),内容为:
name := "learning-spark-mini-example"  //设置构建的Jar包名称

version := "0.0.1" //项目版本号

scalaVersion := "2.11.4" //所用scala版本号

libraryDependencies ++= Seq( //设置项目依赖   这里需要用到spark-core包
"org.apache.spark" % "spark-core_2.11" % "1.3.0" % "provided"
)

//添加Maven仓库配置,最好添加上,因为默认的国外地址访问很慢的,你懂的
resolvers += Resolver.mavenLocal

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"

resolvers += "oschina nexus" at "http://maven.oschina.net/content/groups/public/"
4.在项目根目录下运行 sbt clean package 开始构建Jar包
构建完成后就可以在项目目录/target/scala-xxxx/下找到生成的jar包
5.复制上一步生成的jar包到 Spark根目录下,并在此目录下运行

.\bin\spark-submit --class spark.learn.first.WordCount .\learning spark-mini-example_2.11-0.0.1.jar "README.md"

运行成功后输出:


D:\spark\spark-1.3.0-bin-hadoop2.4\spark-1.3.0-bin-hadoop2.4>.\bin\spark-submit
.\learning-spark-mini-example_2.11-0.0.1.jar "README.md"
15/04/05 16:16:33 WARN NativeCodeLoader: Unable to load native-hadoop library fo
r your platform... using builtin-java classes where applicable
15/04/05 16:16:36 WARN SizeEstimator: Failed to check whether UseCompressedOops
is set; assuming yes
Lines with a:60,Lines with b:29


小贴士:
        如果构建过程中提示字符乱码问题 ,可以去除程序及配置文件中的中文
        如果运行过程中提示:
        15/04/05 15:11:55 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.NullPointerException
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1010)
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
        at org.apache.hadoop.util.Shell.run(Shell.java:418)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:
650)
        at org.apache.hadoop.fs.FileUtil.chmod(FileUtil.java:873)
        at org.apache.hadoop.fs.FileUtil.chmod(FileUtil.java:853)
        at org.apache.spark.util.Utils$.fetchFile(Utils.scala:442)
        at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor
$Executor$$updateDependencies$5.apply(Executor.scala:374)
        at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor
$Executor$$updateDependencies$5.apply(Executor.scala:366)
       
解决方法可以参考:
         http://download.csdn.net/detail/yirenhe/8188513
         http://blog.csdn.net/congcong68/article/details/4204309

总结
    这一章我们下载了Spark并在笔记本上以local模式运行。我们还大致了解下核心概念:Driver程序创建SparkContext和RDDs,然后以并行的方式操作RDDs.。在接下来的章节更深入的介绍RDDs操作。














分享到:
评论

相关推荐

    spark学习笔记

    ### Spark学习笔记 #### Apache Spark简介 Apache Spark是一款专为大规模数据处理而设计的高性能、通用的计算引擎。它的核心特点在于提供了强大的内存计算能力,从而显著提升了数据处理的速度。Spark最初采用Scala...

    Spark学习笔记 Spark学习笔记 Spark学习笔记

    Spark 学习笔记 Spark 是一个基于内存的分布式计算框架,它提供了高效、灵活、可扩展的数据处理解决方案。Spark 的核心组件是 Resilient Distributed Dataset (RDD),它是一个弹性的分布式数据集合,提供了高效的...

    Spark学习笔记一

    Generality(通用性)意味着Spark不仅仅是一个计算框架,它还支持SQL查询、流处理、机器学习和图计算等多种任务。Spark SQL结合了DataFrame,提供了一种更接近SQL的方式来处理数据。MLlib是Spark的机器学习库,包含...

    Spark学习笔记三

    本篇笔记主要探讨Spark中的共享变量、RDD持久化、checkpoint机制、运行模式以及任务调度等相关知识点。 1. **共享变量** - **累加器(Accumulator)**:累加器是一种只能增加不能减少的共享变量,常用于统计任务中...

    Spark学习笔记(纯打字完成)

    根据各大视频网站中的视频,总结出的Spark2.0的细节笔记

    spark学习笔记,完成于2022年04月13日

    - **多模式支持**:Spark 支持批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)和机器学习(MLlib)等多种数据处理模式。 - **高可用性**:通过配置高可用模式,Spark 可以确保集群的稳定性和任务...

    Spark-:Spark学习笔记

    【Spark学习笔记】 Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、易用和灵活的特点在大数据处理领域中备受青睐。Spark的核心设计理念是提供一个通用的大数据处理平台,支持批处理、交互式查询...

    spark:spark学习笔记

    【Spark:Spark学习笔记】 Spark,作为大数据处理领域的重要框架,以其高效、易用和弹性伸缩性赢得了广泛赞誉。本笔记将从基础概念出发,深入探讨Spark的核心特性,包括RDD(Resilient Distributed Datasets)、...

    Spark学习笔记 (二)Spark2.3 HA集群的分布式安装图文详解

    "Spark学习笔记(二)Spark2.3 HA集群的分布式安装图文详解" 本文主要介绍了Spark2.3 HA集群的分布式安装,结合图文与实例形式详细分析了Spark2.3 HA集群分布式安装具体下载、安装、配置、启动及执行spark程序等...

    spark笔记整理文档

    本篇笔记将深入探讨Spark的核心概念、架构设计以及实际应用,旨在帮助读者全面理解并掌握Spark。 1. Spark概述: Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理...

    spark学习笔记一

    一.spark与hadoop比较 Spark是一个计算框架相当于Hadoop的MapReduce。Hadoop中是包含计算框架MapReduce和分布式文件系统HDFS,更广泛的讲是还包含其生态系统上的其他系统比如Hbase和Hive等。 Spark相比MapReduce的...

Global site tag (gtag.js) - Google Analytics