第一

概论

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 实现serialVersionUID

    文章转自  https://www.cnblogs.com/duanxz/p/3511695.html 作用 serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制 ...

  2. Java集合实现类区别与联系

    ArrayList和LinkList相同点和区别: 共性: 都实现了List接口,都是list的实现类,处理list集合操作. 区别: ArrayList:底层存储结构是数组,每个元素都有index标 ...

  3. Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格

    不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...

  4. centos7搭建kibana

    上一节elasticsearch搭建地址 https://www.cnblogs.com/mutong1228/p/10181544.html 学习了上一篇的搭建,理解了命令的含义之后,本节就非常方便 ...

  5. Android学习之基础知识十六 — Android开发高级技巧的掌握

    一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到C ...

  6. JavaScript设计模式 - 状态模式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 自行实现高性能MVC

    wcf虽然功能多.扩展性强但是也面临配置忒多,而且restful的功能相当怪异,并且目前没法移植.asp.net core虽然支持webapi,但是功能也相对繁多.配置复杂.就没有一个能让码农们安安心 ...

  8. SSM项目layui分页实例

    最近学了layui,发现其中的分页挺有意思的,所以整理了一下,一遍自己随时查看.(官方文档上已经很详细了,当中有不足的地方欢迎大家指出) 关于前台的js文件,css样式,js样式,大家可以到官网下 本 ...

  9. FileShare枚举的使用(文件读写锁) - (转载)

    开发过程中,我们往往需要大量与文件交互,但往往会出现很多令人措手不及的意外,所以对普通的C#文件操作做了一次总结,问题大部分如下: 写入一些内容到某个文件中,在另一个进程/线程/后续操作中要读取文件内 ...

  10. SpringBoot 异常处理

    异常处理最佳实践 根据我的工作经历来看,我主要遵循以下几点: 尽量不要在代码中写try...catch.finally把异常吃掉. 异常要尽量直观,防止被他人误解 将异常分为以下几类,业务异常,登录状 ...