第一

概论

1.spark的特点

适用多种不同分布式平台的场景,包括批处理,迭代算法,交互式查询,流处理;

spark提供了python,scale,java等接口

2.spark的组件

spark的底层组件包括:独立调度器,Hadoop YARN,Apache Mesos

spark的内核包括:任务调度,内存管理,错误恢复,RDD

spark的顶层包括:spark sql,spark streaming,mlib,graphx

第二

环境搭建

1.说明:

spark是用scale语言编写的;运行在java的虚拟机上,所有安装spark之前需要安装jdk

2.步骤:

首先:安装JDK

下载JDK,再双击dmg文件安装。

再者:配置JDK

vim .bash_profile

export JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"

export PATH=${JAVA_HOME}/bin:$PATH

source .bash_profile

再者:下载spark

下载地址为http://spark.apache.org/downloads.html,选择类型为Pre-build for Hadoop 2.7 and later

下载后的文件为spark-2.2.1-bin-hadoop2.7.tar

再者:解压spark压缩文件

cd ~/project

cp ~/Downloads/spark-2.2.1-bin-hadoop2.7.tar spark-2.2.1-bin-hadoop2.7.tar

tar -xf spark-2.2.1-bin-hadoop2.7.tar

ls

最后:启动

cd spark-2.2.1-bin-hadoop2.7

bin/pyspark

3.spark交互式应用

例如:启动pyspark后,依此输入以下命令:

lines = sc.textFile("README.md")
python_lines = lines.filter(lambda line:"python" in line)
python_lines.count()
python_lines.first()

4.使用python构建独立的spark应用

例如:

cd ~/project/spark-2.2.1-bin-hadoop2.7

mkdir app

touch app/helloworld.py

vim app/helloworld.py

bin/spark-submit app/helloworld.py

第三

Spark集群

1.Spark集群启动步骤:

(1)用户通过spark-submit提交应用

(2)spark-submit启动驱动器程序,调用用户定义的main()方法

(3)驱动器与集群管理器通信,申请资源以启动执行器节点

(4)集群管理器为驱动器启动执行器节点

(5)驱动器将RDD操作发送给执行器

(6)执行器保存计算结果并发送给驱动器

(7)若果用户退出spark,则驱动器终止执行器进程,并通过集群管理器释放资源

2.使用spark-submit部署应用

(1)独立集群管理器

bin/spark-submit --master spark://host:7077 --executor-memory 10g my_script.py

(2)Hadoop YARN集群管理器

export HADOOP_CONF_DIR = /opt/hadoop/conf

bin/spark-submit --master yarn --executor-memory 10g my_script.py

(3)Apache Mesos集群管理器

bin/spark-submit --master mesos://host:5050 --executor-memory 10g my_script.py

(4)本地单核

bin/spark-submit --master local --executor-memory 10g my_script.py

(5)本地多核

bin/spark-submit --master local[100] --executor-memory 10g my_script.py

(6)本地无限核

bin/spark-submit --master local[*] --executor-memory 10g my_script.py

第四

Spark的调优

1.配置Spark

(1)使用配置文件配置spark

#配置文件
spark.master local[4]
spark.app.name "My Spark App"
spark.ui.port 36000
#在命令中调用配置文件作为参数
bin/spark-submit --properties-file config.conf

(2)使用bin/spark-submit传递参数配置spark

bin/spark-submit --master local[4] --name "My Spark App" --conf spark.ui.port=36000

(3)使用代码显示配置spark

conf = new SparkConf()

conf.set("spark.master", "local[4]")
conf.set("spark.app.name", "My Spark App")
conf.set("spark.ui.port", "36000")

sc = SparkContext(conf)

2.Spark的执行步骤

(1)生成RDD的有向无环图

(2)物理执行RDD

3.Spark 的调试界面

(1)如果是独立集群器,则使用http://localhost:4040访问调试界面.

第五

使用Spark SQL进行数据查询

1.Spark SQL初始化与查询

例如

from pyspark.sql import HiveContext, Row
#当不能引入hive依赖时
from pyspark.sql import SQLContext, Row

hiveCtx = HiveContext(sc)input = hiveCtx.jsonFile(inputFile)input.registerTemplate("twssts")tweets_list = hiveCtx.sql("SELECT text, retweet_count, FROM tweets ORDER BY retweet_count LIMIT 10")tweets_text_list = tweets_list.map(lambda row:row.text)

第六

RDD的操作

1.操作RDD的步骤

(1)使用数据源创建RDD

(2)转化生成新RDD

(3)对中间重用结果RDD进行persist()操作

(4)使用RDD行动操作

例如:

#!/usr/bin/env/python

from __future__ import print_function

from pyspark.sql import SparkSession

if __name__ == "__main__":
        spark = SparkSession.builder.appName("PythonALS").getOrCreate()

        sc = spark.sparkContext

        rdd = sc.textFile("app/test.txt")

        rdd.persist()

        row_count = rdd.count()
        print(row_count)

        first_line = rdd.first()
        print(first_line)

        spark.stop()

注意:spark的当前目录为根目录,即spark2.2.20-bin-hadoop

例如,求一个集合中所有值的平方和

《spark快速大数据分析》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 关于Java并发编程的总结和思考

    编写优质的并发代码是一件难度极高的事情.Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更 ...

  2. P1734 最大约数和

    题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入输出格式 输入格式: 输入一个正整数S. 输出格式: 输出最大的约数之和. 输入输出样例 输入样例#1: 复 ...

  3. 理解 DocumentFragment

    理解 DocumentFragment 含义:创建文档片段,它继承了Node的所有方法,对DOM操作性能非常好.创建文档片段 如下方法: var frag = document.createDocum ...

  4. QT QLabelde 使用技巧总结

    QLabel提供了一个文本或图像的显示,没有提供用户交互功能. 一个QLabel可以包含以下任意内容类型: 内容 设置 纯文本 使用setText()设置一个QString 富文本 使用setText ...

  5. Android java.lang.RuntimeException: Unable to instantiate activity ComponentInfo 特殊异常

    本来是不想写的,因为这个异常太常见了,而且也容易处理.但是还是决定记录一下,因为之前遇到过,没留心,今天又遇到了,苦逼了,想了好大一会儿才想起来. 通常容易找的就不写了,今天写个特殊的. 现象:当你在 ...

  6. 【php增删改查实例】第十八节 - login.php编写

    1.对用户名和密码进行非空判断(后台验证) $username; $password; if(isset($_POST['username']) && $_POST['username ...

  7. 通用漏洞评估方法CVSS3.0简表

    CVSS3.0计算分值共有三种维度: 1. 基础度量. 分为 可利用性 及 影响度 两个子项,是漏洞评估的静态分值. 2. 时间度量. 基础维度之上结合受时间影响的三个动态分值,进而评估该漏洞的动态分 ...

  8. P3830 [SHOI2012]随机树

    P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...

  9. 记一次yarn导致cpu飙高的异常排查经历

    yarn就先不介绍了,这次排坑经历还是有收获的,从日志到堆栈信息再到源码,很有意思,下面听我说 问题描述: 集群一台NodeManager的cpu负载飙高. 进程还在但是看日志已经不再向Resourc ...

  10. C#_委托的使用

    C#基础---委托的使用   一:什么是委托     委托是一种定义方法签名的类型当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法.委托是一个引用类型,所以它具 ...