大数据 - Spark介绍和环境搭建

Spark

       Spark是一个用来实现快速而通用的集群计算的平台。扩展了广泛使用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是非常重要的。Spark的一个重要特点就是能够在内存中计算,因而更快。即使在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。

四大特性

高效性

       运行速度提高100倍。Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。

易用性

       Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

通用性

       Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

兼容性

       Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
       Mesos:Spark可以运行在Mesos里面(Mesos 类似于yarn的一个资源调度框架)
       standalone:Spark自己可以给自己分配资源(master,worker)
       YARN:Spark可以运行在yarn上面
       Kubernetes:Spark接收 Kubernetes的资源调度

Spark的组成

       Spark组成(BDAS):全称伯克利数据分析栈,通过大规模集成算法、机器、人之间展现大数据应用的一个平台。也是处理大数据、云计算、通信的技术解决方案。它的主要组件有:
       SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
       SparkSQL:Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
       SparkStreaming: 是Spark提供的实时数据进行流式计算的组件。
       MLlib:提供常用机器学习算法的实现库。
       GraphX:提供一个分布式图计算框架,能高效进行图计算。
       BlinkDB:用于在海量数据上进行交互式SQL的近似查询引擎。
       Tachyon:以内存为中心高容错的的分布式文件系统。

应用场景

       腾讯广点通是最早使用Spark的应用之一。腾讯大数据精准推荐借助Spark快速迭代的优势,围绕“数据+算法+系统”这套技术方案,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,最终成功应用于广点通pCTR投放系统上,支持每天上百亿的请求量。
       基于日志数据的快速查询系统业务构建于Spark之上的Shark,利用其快速查询以及内存表等优势,承担了日志数据的即席查询工作。在性能方面,普遍比Hive高2-10倍,如果使用内存表的功能,性能将会比hive快百倍。
       Yahoo将Spark用在Audience Expansion中的应用。Audience Expansion是广告中寻找目标用户的一种方法:首先广告者提供一些观看了广告并且购买产品的样本客户,据此进行学习,寻找更多可能转化的用户,对他们定向广告。Yahoo采用的算法是logistic regression。同时由于有些SQL负载需要更高的服务质量,又加入了专门跑Shark的大内存集群,用于取代商业BI/OLAP工具,承担报表/仪表盘和交互式/即席查询,同时与桌面BI工具对接。目前在Yahoo部署的Spark集群有112台节点,9.2TB内存。
       阿里搜索和广告业务,最初使用Mahout或者自己写的MR来解决复杂的机器学习,导致效率低而且代码不易维护。淘宝技术团队使用了Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等。将Spark运用于淘宝的推荐相关算法上,同时还利用Graphx解决了许多生产问题,包括以下计算场景:基于度分布的中枢节点发现、基于最大连通图的社区发现、基于三角形计数的关系衡量、基于随机游走的用户属性传播等。
       优酷土豆在使用hadoop集群的突出问题主要包括:第一是商业智能BI方面,分析师提交任务之后需要等待很久才得到结果;第二就是大数据量计算,比如进行一些模拟广告投放之时,计算量非常大的同时对效率要求也比较高,最后就是机器学习和图计算的迭代运算也是需要耗费大量资源且速度很慢。

安装配置

本地运行模式 (单机)

       Spark下载地址http://spark.apache.org/downloads.html 根据hadoop版本选择对应的Spark。下载spark-2.4.0-bin-hadoop2.7.tgz到/app/hadoop/下,解压授权。配置好jdk环境

[root@hadoop1 hadoop]#  tar -vzxf spark-2.4.0-bin-hadoop2.7.tgz
[root@hadoop1 hadoop]#  chown -R hadoop:hadoop spark-2.4.0-bin-hadoop2.7
[root@hadoop1 hadoop]#  vi /etc/proflie
export JAVA_HOME=/usr/lib/java/jdk1.8.0_191
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export PYSPARK_PYTHON=python3
export SPARK_HOME=/app/hadoop/spark-2.4.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

       这里的python需要3.0以上的版本,如果当前系统python环境是2.7需要替换成3以上,不然会pyspark运行会报错。PYSPARK_PYTHON变量主要是设置pyspark运行的python版本。

[root@hadoop1 bin]# cd /app/hadoop/spark-2.4.0-bin-hadoop2.7/bin/
[root@hadoop1 bin]# ./run-example SparkPi  2>&1|grep "Pi is"
Pi is roughly 3.1465357326786636

       运行pyspark,PySpark 是 Spark 为 Python 开发者提供的 API

[root@hadoop1 bin]# pyspark
Python 3.6.1 (default, Jan 16 2019, 18:18:10)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/app/hadoop/spark-2.4.0-bin-hadoop2.7/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/app/hadoop/hadoop-2.8.5/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
2019-02-21 17:30:00 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 2.4.0
      /_/

Using Python version 3.6.1 (default, Jan 16 2019 18:18:10)
SparkSession available as 'spark'.
>>>
可以直接运算
>>> 1+2+3
6
退出
>>> exit()

spark standalone集群配置

       编辑conf里的slave节点

[hadoop@hadoop1 conf]$ vi slaves
hadoop1
hadoop2
hadoop3

       编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:

export SPARK_MASTER_HOST=192.168.189.130
# 每个节点的ip,节点2和节点3需要修改对应的ip
export SPARK_LOCAL_IP=192.168.189.130
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_DIST_CLASSPATH=$(/app/hadoop/hadoop-2.8.5/bin/hadoop classpath)

       有了SPARK_DIST_CLASSPATH配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。
       复制Spark目录到另外两台节点(复制完成后记得修改spark-env.sh中的SPARK_LOCAL_IP)

[hadoop@hadoop1 conf]$ scp -r /app/hadoop/spark-2.4.0-bin-hadoop2.7/ hadoop2:/app/hadoop/
[hadoop@hadoop1 conf]$ scp -r /app/hadoop/spark-2.4.0-bin-hadoop2.7/ hadoop3:/app/hadoop/

       复制配置文件到另外两台节点,也可以手动将环境变量配置到另外两台节点

[hadoop@hadoop1 conf]$ scp  /etc/profile hadoop2:/etc/profile
[hadoop@hadoop1 conf]$ scp  /etc/profile hadoop3:/etc/profile

       standalone 启动方式一键启动(不推荐)

[hadoop@hadoop1 sbin]$ cd /app/hadoop/spark-2.4.0-bin-hadoop2.7/sbin
[hadoop@hadoop1 sbin]$ ./start-all.sh

       或者

[hadoop@hadoop1 sbin]$ ./start-master.sh -h 192.168.189.130
[hadoop@hadoop1 sbin]$  ./start-slave.sh spark://192.168.189.130:7077
[hadoop@hadoop2 sbin]$  ./start-slave.sh spark://192.168.189.130:7077
[hadoop@hadoop3 sbin]$  ./start-slave.sh spark://192.168.189.130:7077

       后台地址 http://hadoop1:8080/
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值