spark快速大数据分析笔记-1

Spark快速大数据分析第一章-笔记
Spark是一个用来实现快速而通用的集群计算的平台。
Spark的核心是一个对由很多计算任务组成的,运行在多个工作机器或者是一个计算集群上的应用进行调度,分发以及监控的计算引擎。
Spark Core实现了Spark的基本功能,包含任务调度,内存管理,错误恢复,于存储系统,交互等模块。Spark Core中还有对弹性分布式数据集(RDD)的API定义。RDD表示分布在多个计算节点上可以并行操作的元素集合,是Spark主要的编程抽象。Spark Core提供了创建和操作这些集合的多个API。
Spark SQL是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用SQL或者HQL来查询数据。
Spark Streaming 是Spark提供的对实时数据进行流式计算的组件。Spark Streaming提供了用来操作数据流的API。并且与Spark Core中的RDD API高度对应。
MLib 常见机器学习功能的程序库,包括分类、回归、聚类、协同过滤等。还提供了模型评估,数据导入等额外的支持功能。
GraphX是用来操作图的程序库,可以进行并行的图计算。GraphX也扩展了Spark的RDD API,能用来创建一个顶点和边都包含任意属性的有向图。
集群管理器,Spark支持的各种集群管理器上运行,包括Hadoop YARN、Apache Mesos,以及Spark自带的一个简易调度器叫作独立调度器。
Spark的用户和用途
Spark是一个用于集群计算的通用计算框架,因此可以用于各种应用程序。
包括数据科学任务和数据处理应用。
Spark的存储层次
Spark不仅可以将任何Hadoop分布式文件系统上的文件读取为分布式数据集,也可以支持其他支持Hadoop接口的系统,比如本地文件,亚马逊S3,Cassandra,Hive,HBase等。
--------------------------------------------------------
Spark快速大数据分析第二章-笔记
下载Spark
访问http://spark.apache.org/downloads.html选择包类型为"Pre-built for Hadoop 2.4 and later",然后下载文件,如spark-1.2.0-bin-hadoop2.4.tgz.
解压缩下载的包文件:
tar -xf spark-1.2.0-bin-hadoop2.4.tgz
得到spark-1.2.0-bin-hadoop2.4
里面比较重要的文件及目录的名字和作用:
bin:包含可以用来和Spark进行各种方式的交互的一系列可执行文件,比方说Spark shell.
core、streaming、python....
包含Spark项目主要组件的源代码。
examples:包含一些可以查看和运行的Spark程序,对学习Spark的API非常有帮助。
学习Spark shell的使用
第一步进入Spark 目录然后输入:
bin/pyspark
稍后就可以看到spark启动界面和shell提示符.

如图spark2-1.jpg所示:


如果不想要过多的日志输出,可以通过调整日志的级别来控制输出的信息量。你需要再conf目录下创建一个名为log4j.properties的文件来管理日志设置。通过命令cat log4j.properties.template>log4j.properties来复制已有模板日志文件到新创建的日志文件。
然后修改log4j.rootCategory=INFO,console为WARN,console即可。
在Spark中,我们通过对分布式数据集的操作来表达我们的计算意图,这些计算会自动地在集群上并行进行。这样的数据集被称为弹性分布式数据集(resilient distributed dataset),简称RDD。RDD是Spark对分布式数据和计算的基本抽象。
下面给出使用shell从本地文件创建一个RDD来作一些简单的即时统计。
>>> lines = sc.textFile("README.md") #根据当前目录下的README.md文件来创建一个名为lines的RDD。
>>> lines.count() #调用count()方法来统计RDD中的元素个数
>>> lines.first()#first()方法查看RDD中的第一个元素。对应于README.md文件中的第一行。
要退出shell可以通过Ctr-D或者quit()函数来退出。
------------------------------------
Spark核心概念简介
从应用层面来说,每个Spark应用都由一个驱动程序(driver program)来发起集群上的各种并行操作。驱动器程序包含应用的main函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应用了相关的操作。在先前给出的例子中驱动器程序就是Spark shell本身。
驱动器程序通过一个SparkContext对象来访问Spark。这个对象代表计算集群的一个连接。shell在启动时会自动创建一个SparkContext对象,是一个叫作sc的变量。我们可以在shell环境中直接输入sc命令来查看它的类型:
>>> sc
<SparkContext master=local[*] appName=PySparkShell>
一旦有了SparkContext,你就和集群之间建立了连接,可以用它来创建RDD。比方说先前的例子中创建的lines就是RDD,然后对其可以执行各种操作。

要执行的操作,有多少节点参与操作就需要管理多少个执行器(executor)节点。比方说我们在集群上运行count()操作,那么不同的节点会统计文件的不同部分的行数。由于我们刚刚举例是本地模式运行所以只有一个节点参与。如果在集群中执行那么运行原理如图spark2-2.jpg:


Spark提供了很多用来传递函数的API,可以将对应操作运行在集群上,比方说刷选出文件中包含某个特定单词的行:
>>> pythonLine=lines.filter(lambda line:"Python" in line)
>>> pythonLine.first()
u'high-level APIs in Scala, Java, Python, and R, and an optimized engine that'
java8中也提供了lambda表达式的支持和简写:
JavaRDD<String> pythonLines = lines.filter(line->line.contains("Python"));
其实Spark API最神奇的地方就在于像filter这样的基于函数的操作也会在集群上并行执行。也就是说Spark会自动将函数法到各个执行器节点上。这样你就可以在单一的驱动器程序中编程,并且让代码自动运行在多个节点上。
独立应用
除了交互式运行之外,Spark也可以在java、Python的独立程序中被连接使用。这与在shell中使用的主要区别在于你需要自行初始化SparkContext。接下来,使用的API就是一样的了。
连接Spark的过程在各语言中并不一样,在Java和Scala中,只需要给你的应用添加一个对于spark-core组件的maven依赖。
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.2.1</version>
</dependency>
具体版本可以参数maven仓库可选项。
在python中,你可以把应用写成Python脚本,但你需要使用Spark自带的bin/spark-submit脚本来运行。spark-submit会帮你引入需要的Spark依赖。这个脚本为Spark的PythonAPi配置了运行环境。你只需要像如下一样运行脚本即可:
bin/spark-submit my_script.py
初始化SparkContext
一旦完成了应用与Spark的连接,接下来就需要在你的应用程序中导入Spark包并且创建SparkContext.你可以通过先创建一个SparkConf对象来配置你的应用,然后基于这个SparkConf创建一个SparkContext对象。
在Python中初始化Spark
from pyspark import SparkConf,SparkContext
conf=SparkConf().setMaster("local").setAppName("My App")
sc=SparkContext(conf=conf)
在java中初始化Spark
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
SparkConf conf = new SparkConf().setMaster("local").setAppName("My App");
JavaSparkContext sc = new JavaSparkContext(conf);
在创建sc变量时你需要传递两个参数:
1)集群URL:告诉Spark如何连接到集群上。因为我们是本地运行所以写的是local,这个值可以让Spark运行在单击单线程模式上而无需连接到集群。
2)应用名:当连接到一个集群时,这个值可以帮助你在集群管理器的用户界面中找到你的应用。
初始化完成后你就可以创建RDD文件并操作它们了。
最后关闭Spark可以调用SparkContext的stop()方法,或者直接退出应用。
构建独立应用
java版本的单词数统计应用
//创建一个java版本的Spark Context
SparkConf conf = new SparkConf().setAppName("wordCount");
JavaSparkContext sc = new JavaSparkContext(conf);
//读取我们的输入数据
JavaRDD<String> input=sc.textFile(inputFile);
//切分为单词
JavaRDD<String> words = input.flatMap(
new FlatMapFunction<String,String>(){
public Iterable<String> call(String x){
return Arrays.asList(x.split(" "));//根据空格切分
}
});
//转换为键值对并计数
JavaPairRDD<String,Integer> counts = words.mapToPair(new PairFunction<String,String,Integer>(){
public Tuple2<String,Integer>call(String x){
return new Tuple2(x,1);
}
}).reduceByKey(new Function2<Integer,Integer,Integer>(){
public Integer call(Integer x,Integer y){
return x+y;
}
});
//将统计出来的单词综述存入一个文本文件,引发求值
counts.saveAsTextFile(outputFile);
maven依赖构建添加如下:
<dependencies>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.2.1</version>
    </dependency>
  </dependencies>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.1</version>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
          </configuration> </plugin>
      </plugin>
    </plugins>
  </pluginManagement>
</build>
Maven构建与运行
mvn clean&&mvn compile&&mvn package命令来编译打包程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值