《spark快速大数据分析》
第一
概论
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快速大数据分析》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- MATLAB——读取xls文件内容
[NUM,TXT,RAW]=xlsread('example',2,'B2:B261') NUM返回的是excel中的数据, TXT输出的是文本内容, RAW输出的是未处理数据 example:是需要 ...
- Java发送QQ邮件
面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...
- WIFI底座
自己贴片的51+WIFI的开发板终于到了..还是贴片的好看 美中不足的是需要改一个电阻的阻值..还有就是由于自己的8266和51单片机一块断电上电,所以如果用的USB线的质量不好就会出现 下载不了程序 ...
- Intellij实用技巧
快捷键 Tradition 快捷键 介绍 Ctrl + Z 撤销 Ctrl + Shift + Z 取消撤销 Ctrl + X 剪切 Ctrl + C 复制 Ctrl + S 保存 Tab 缩进 Sh ...
- python_第一章
从今天开始,正式开始学习python书籍:python 编程:从入门到实践. 感兴趣的读者可以去网上搜索这本书,适合读者入门,读下来,不会有任何 晦涩难懂的知识. 1.排序: 正排:sort() ...
- oracle-union all与order by联合使用
今天写sql的时候,第一次使用union all+order by .是个比较简单的问题,但由于对数据库的不深入理解导致犯了愚蠢的错.浪费了很多时间 如题: 两个子查询union all 需要用ord ...
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...
- [HAOI2017]供给侧改革[离线、trie]
题意 题目链接 分析 由于数据随机所以 LCP 不会很长,维护每个位置后 40 个字符构成的01串. 将询问离线维护,以当前右端点为 R 的每个长度的 LCP 的第一个出现位置 f(这个信息显然是单调 ...
- 异步编程(async&await)
前言 本来这篇文章上个月就该发布了,但是因为忙 QuarkDoc 一直没有时间整理,所以耽搁到今天,现在回归正轨. C# 5.0 虽然只引入了2个新关键词:async和await.然而它大大简化了异步 ...
- Mysql读写分离方案-MySQL Proxy环境部署记录
Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换.MySQL Proxy有一项强大功能是实现"读写分离" ...