一、spark为什么兴起
1.大数据平台
(1)列举
hadoop(亚马逊)、spark
(2)两个核心
分布式计算:MapReduce、spark
MR分布式计算不足:离线计算 (中间运算结果存盘)pb级别的数据
Spark(解决快慢问题)spark速度快
分布式存储 :HDFS 、gfs[谷歌分布式文件系统系统] 、S3[亚马逊分布式文件存储系统]、tachyon内存分布式文件系统
(3)hadoop、spark、storm、informix、hive、mysql比较
Hadoop 离线计算 十几个小时
Spark 超级用户[比如淘宝中普通用户的信息可能是一周统计的数据一周计算一次,而有些超级用户在淘宝上每年都要消费100多万,那么对于淘宝来说他就不能把这些超级用户和普通用户一样每一周才计算一次他们的消费规律,需要更短时间计算他们的消费规律然后短时间内给他们推送他们更加关心的数据,使得这些超级用户能够感觉到淘宝更加智能和人性化,不会将这些超级用户丢失,这样的话就需要使用spark来完成这个工作了] (实时分析需求)
Storm 数据流实时计算[股票计算,如果一个沙特的油田爆炸了,一个网友在facebook上发表了一个消息,stom将这条信息以毫秒级的速度分析到了,然后毫秒级速度将这只股票买入或者卖出,然后等待股票的上涨或下跌然后就能赚钱了,速度很快。而spark也是计算一段时间的,但这个一段时间比hadoop的MapReduce处理要快,所以也可以称为是实时的计算]
Informix 关系型数据库(增删改查)[是ibm的产品,它相比于spark的实时处理还是慢了一点]
Hive
Mysql(和钱无关的业务基本都是使用这个数据库)orcal(基本上和钱、仓储有关的都使用这个数据库)
(4)spark的相关概念
DAG :有向无环图:
基本概念-Rdd:弹性分布式数据集的缩写
例子- 下图中黑色的是算平均年龄(天蓝色路径),红色的是算同一个姓的人数(深蓝色路径)
红色圈中的在两条路径中重复了,只需要做一次运算(你在编码的时候可以将红圈中写两次,但spark中帮你实现了这两个重复的代码红圈中的,会只计算一次,学术名字交做“图计算”)
1736年(清乾隆元年,金钱数尾),七桥图-图计算[每个路径都走了,但尽可能少的走路]。
(5)迭代、收敛
Spark 迭代计算(这个计算的结果作为下一个这类计算的输入,MapReduce每次计算结果都要写磁盘防止数据丢失,orcal的迭代是在内存中缓存的这个orcal实现的比较好,storm不算递归虽然这个计算的结果作为下一个这类计算的输入但是因为他是有限的而迭代是无限的,最典型的是神经网络算法)
收敛[神经网络算法的结束是到收敛为止,换种说法是达到极限为止],MapReduce就无法趋近于极限(收敛),因为它要每次要落地,这样存储的就太多了,太消耗磁盘空间了
(6)生态环境
1.Windows:
word、excal等组成了它的生态环境
2.Hadoop:
zookeeper、MapReduce等组成了它的生态环境
3.Spark:
也有自己的生态环境
1.Sparksql:
相当于hive(将sql语句转换为MapReduce在hadoop上实现),而sparksql是将sql语句转化为mapreduce在spark上执行,hive因为是在hadoop上执行所以每个中间结果都要存磁盘,而sparksql是在spark上执行它不会将每个执行的中间结果都存磁盘。还有一点就是hive能自己建表,会将元数据的结构信息存储到mysql中,但sparksql不会存储元数据信息来记录表结构,它只是相当于一个编程接口所以说hive是一个数据仓库而sparksql只是一个计算工具,和inpala有点相似
2.Sparkstrming:
和strom有点相似但是集群运算能力要比strom强(aka),strom是事务处理,是一个日志来了就进行一次计算,比如违章,storm是每拍到一个违规就发短信通知违章者去交罚款,而sparkstring是会等一秒钟,如果这一秒钟之内有多个违章就将这多个违章一起处理来发短信通知这些违章者去交罚款,虽然都是流处理,但storm是事件流,每发生一个事件就触发这个流,而sparkstrming是时间流,一段时间来触发一次这个流。
3.MLlib:
机器算法的库,可以直接调用这些算法来用,调用这些算法来做机器学习,比如:回归算法(线性回归迭代不会太多、筛选因子的迭代比较多[算模型,判断是否给一个贷款的人发多少贷款,比如是否有房产,身高,血型等好多维度,但血型是没法判断所以需要筛选因子来从几百个维度中筛选出十几个维度来使用])、聚类(迭代次数比较多)、判别、神经网络等等
但是spark的数据分析能力还是很粗,有好多数据分析语言的数据分析能力会更细,例如:spss、sas、r、maltlab。虽然spark的MLlib数据分析能力还不完善(好比spss、sas、r、maltlab是小汽车,但MLlib是手扶拖拉机),但是他的处理数据能很大,而spss、sas、r、maltlab处理的数据量很有限。spss、sas、r、maltlab处理的是数据样本,而spark处理整体,所以spark的MLlib更胜一筹
4.Grapx:
如下图:需要计算路径,可能一条路径原先很快,但由于网路有时会卡,所以要实时计算最快路径,比如下图如果是迅雷,买了迅雷会员的用户下载速度快就是迅雷给会员下载路径进行优化了。现在的导航也是这个原理都是使用图计算了,电商网站买东西快也可以用这种方式,告知用户怎样通过跳转页面可以更快完成购买,在超市中如宜家(购买家具的超市)也一样,它设计入口出口的方式也使用了图计算它会设计的使你从入口到出口的距离最大化,这样你就能逛更长的时间,选择更多的商品,从而在这个商场中花更多的钱,但同样的超市如家乐福(卖日用品和食品)是一个仓储的超市它会想着你买了自己的东西赶紧离开商场,不要对后面的顾客造成阻塞。还有一个例子:微信上交话费只需要两三个页面跳转,但到移动和联通的官网上交话费会需要跳转好多个页面才能完成。这个交话费就是最复杂的跳转也就不出十几个页面,人脑算也可以实现简化,不需要图计算。还有一个例子:就是微博上有上千个页面,在统计了每个用户的习惯[比如打开a页面就想调到b页面]后就需要使用图计算了实现最优跳转路径了,这个人脑是计算不了的因为页面太多了。
(7)Spark 主从结构
(8)linux
Linux redhat 企业级操作系统
Linux centos yum 库文件是免费
Linux ubunto 个人操作系统
Linux 操作系统中安装软件:
全局性的—补丁 root用户安装
各种应用,应该使用专门的用户。
软件安装:通常操作系统的原有目录是不动的。 应用软件要有单独安装路径。
二、安装spark
linux下:
1.启动HDFS:[hadoop@namenode /]$ start-dfs.sh
2.查看相关后台进程
[hadoop@namenode /]$ jps
5205 SecondaryNameNode
4918 NameNode
5031 DataNode
5368 Jps
3.安装scala:fy83
(1)解压:tar -xvf scala-2.11.4.tgz
(2)/etc/profile 配置全局环境变量 方便在任何目录调用相关命令
export SCALA_HOME=/home/software/scala-2.11.4
export PATH=$PATH:$SCALA_HOME/bin
4.配置spark:tov4
(1)解压:tar -xvf spark-2.0.1-bin-hadoop2.7.tgz
(2)Spark启动环境变量的复制:cp spark-env.sh.template spark-env.sh
vi spark-env.sh
export SCALA_HOME=/home/software/scala-2.11.4
export JAVA_HOME=/home/software/jdk1.8
export HADOOP_HOME=/home/software/hadoop-2.7.1
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_JAR=/home/software/spark-2.0.1-bin-hadoop2.7/lib/spark-assembly-1.5.2-hadoop2.6.0.jar
spark-assembly-1.5.2-hadoop2.6.0.jar:0rzz
(3)conf/slaves 如果是单机的该文件不需要修改,如果是联机的必须配置就像hadoop配置从节点一样
(4)全局环境变量 /etc/profile
export SPARK_HOME=/home/software/spark-2.0.1-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
(5)启动主节点
[hadoop@namenodeconf]$ start-master.sh
(6)启动从节点
[hadoop@namenodeconf]$ start-slaves.sh
(7)查看后台进程
[hadoop@namenodeconf]$ jps
6145 Worker
5939 Master
5205SecondaryNameNode
4918 NameNode
5031 DataNode
6217 Jps
三、shell命令使用spark
(1)bin/spark-shell --master=local
警告信息不影响执行,可以忽略。启动过程较慢,等待出现scala提示符,表示启动成功。启动后会自动创建一个Spark Context的对象sc运行上下文,还创建了一个SQL conext对象sqlContext用来执行类SQL语句。
(2)可视化界面
(3)具体使用