《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 安装并启动 ...
随机推荐
- java 实现serialVersionUID
文章转自 https://www.cnblogs.com/duanxz/p/3511695.html 作用 serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制 ...
- Java集合实现类区别与联系
ArrayList和LinkList相同点和区别: 共性: 都实现了List接口,都是list的实现类,处理list集合操作. 区别: ArrayList:底层存储结构是数组,每个元素都有index标 ...
- Qt+QGis二次开发:打开S-57格式(*.000)电子海图数据,并设置多边形要素的显示风格
不过多的废话了,直接上源码: addChartlayers()方法时“打开海图”按钮的triggered()信号所绑定的槽函数. //添加海图数据小按钮槽函数 void MainWindow::add ...
- centos7搭建kibana
上一节elasticsearch搭建地址 https://www.cnblogs.com/mutong1228/p/10181544.html 学习了上一篇的搭建,理解了命令的含义之后,本节就非常方便 ...
- Android学习之基础知识十六 — Android开发高级技巧的掌握
一.全局获取Context的技巧 前面我们很多地方都使用到了Context,弹出Toast的时候.启动活动的时候.发送广播的时候.操作数据库的时候.使用通知的时候等等.或许目前来说我们并没有为得不到C ...
- JavaScript设计模式 - 状态模式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 自行实现高性能MVC
wcf虽然功能多.扩展性强但是也面临配置忒多,而且restful的功能相当怪异,并且目前没法移植.asp.net core虽然支持webapi,但是功能也相对繁多.配置复杂.就没有一个能让码农们安安心 ...
- SSM项目layui分页实例
最近学了layui,发现其中的分页挺有意思的,所以整理了一下,一遍自己随时查看.(官方文档上已经很详细了,当中有不足的地方欢迎大家指出) 关于前台的js文件,css样式,js样式,大家可以到官网下 本 ...
- FileShare枚举的使用(文件读写锁) - (转载)
开发过程中,我们往往需要大量与文件交互,但往往会出现很多令人措手不及的意外,所以对普通的C#文件操作做了一次总结,问题大部分如下: 写入一些内容到某个文件中,在另一个进程/线程/后续操作中要读取文件内 ...
- SpringBoot 异常处理
异常处理最佳实践 根据我的工作经历来看,我主要遵循以下几点: 尽量不要在代码中写try...catch.finally把异常吃掉. 异常要尽量直观,防止被他人误解 将异常分为以下几类,业务异常,登录状 ...