Spark简介、安装及一个简单的wordCount

回顾

1.基础语言:Java
2.大数据生态圈hadoop三大组件: HDFS MapReduce Yarn
HDFS : 用来存储数据
MapReduce : 用来计算数据
YARN: 进行资源调度
zookeeper : 分布式管理
3.Hive 使用的是类似SQL语言的HiveQL语言—>HQL语言
4.HBASE数据存储海量数据,NoSQL -->Not Only Sql ,列式存储
5.Flume采集日志
6.sqoop:数据导出
7.实时并发的计算框架------spark
40-50G Mysql会崩
spark也是基于hadoop
spark的开发语言:Java,scala,Python ------>主要是 scala ,python

spark的框架体系
在这里插入图片描述

HDFS的优缺点:
优点
高可靠,高效性,高容错性,高扩展性
缺点
不适合大量小文件存储
不支持多用户写入即任意修改文件
不适合低延迟数据访问

为什么选用HDFS?—即说优缺点

ps:hadoop2.x之后提供YARN,进行资源调度

MR是一个离线计算的框架,也就是对以往存储的数据进行分析
spark是一个实时的计算框架,可以对数据进行实时的分析处理

spark简介

官网:http://spark.apache.org/
在这里插入图片描述

spark: 快如闪电的处理引擎
spark是基于内存计算的大数据并行计算框架

Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、SparkStreaming、GraphX、MLlib等子项目,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、SparkStreaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。

为什么学 spark

中间结果输出:基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存和容错

处于任务管道承接,考虑到一些查询到MapReduce任务时,往往会产生多个Stage
产生stage–job,而串联这些任务依赖于HDFS存储系统,每一个Stage输出 一个结果

Spark是MR的替代方案,兼容HDFS Hive并且融到Hadoop生态圈,以弥补MR的不足

spark的特点

1.快 —是hadoop的100一百倍
比如运行时长
spark :0.9s hadoop : 110s

2.易用 -----支持Java,Scala,Python,R
3.通用性
spark提供了一些通用的解决方案,spark可以进行批处理,交互式查询,实时流处理,机器学习和图计算,
4.兼容性好:
spark 可以完美的融合其他开源产品
比如:可以完美融合 hadoop生态圈和yarn进行融合
Mesos: 作为资源管理和spark融合
还可以支持其他的hadoop组件

在这里插入图片描述

spark 安装包

在这里插入图片描述

spark提供了另外两种下载方式:
archive.apache.org/dist
github.com/apache/spark

spark的运行模式

Local :多用于本地测试,可以在eclipse或IDEA中进行程序书写,
StandLone :是spark自带的资源调度,它完全支持分布式
YARN:hadoop生态圈的资源框架,spark也可以基于yarn来进行计算
Meso:资源调度框架

Spark集群安装

基本设置:时间同步,免密,关闭防火墙,安装JDK,集群已经安装完Hadoop
1.上传安装包到hadoop1
2.将文件解压到指定的目录
tar -zxvf spark-1.6.3-bin-hadoop2.6.tgz -C /opt/software/
3.跳转到安装路径下的conf
cd /opt/software/spark-1.6.3/con进行配置
3.1 修改env文件
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
在文件末尾添加
1)Java 的安装路径
2)SPARK_MASTER_IP = hadoop1
3)SPARK_MASTER_PORT = 7077
在这里插入图片描述
3.2 修改slaves.template 文件添加从节点
mv slaves.template slaves
内容:
hadoop2
hadoop3
hadoop4
4.分发配置好的内容到其他节点
scp -r ./spark-1.6.3 root@hadoop2:$PWD

scp -r ./spark-1.6.3 root@hadoop3:$PWD

scp -r ./spark-1.6.3 root@hadoop4:$PWD

5.配置全局变量:
vi /etc/profile
export SPARK_HOME=/opt/software/spark-1.6.3
需要在引用路径的最后添加 $SPARK_HOME/bin:
保存退出
source /etc/profile

spark启动集群

进入到安装目录找sbin目录进入 /opt/software/spark-1.6.3
启动 ./start-all.sh

spark提供webUI界面
和tomcat的端口是一样的
内部通信端口 : 7077


spark高可用

Master节点存在单点故障,要解决此问题,需要科技助zookeeper,并且至少启动两个Master节点来实现高可靠,配置方式比较简单:
Spark集群规划:
hadoop1,hadoop4是Master;
hadoop2 ,hadoop3 ,hadoop4是worker
安装配置zk集群
停止spark所有服务,修改配置文件spark-env.sh,在该配置文件中,删除SPARK_MASTER_IP,并添加如下配置:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -
Dspark.deploy.zookeeper.url=hadoop2,hadoop3,hadoop4 -Dspark.deploy.zookeeper.dir=/spark"

分发到hadoop2,hadoop3,hadoop4节点下

1.在hadoop1节点上修改slaves配置文件内容指定worker节点
ps:若是修改了slaves节点那么配置文件也分发
2.先启动zookeeper集群
3.在hadoop1上执行上执行sbin/start-all.sh脚本,然后在hadoop4上执行sbin/start-master.sh

启动第二个master
ps:在我们学习的过程中,使用这阿姨那个的单节点可以跑程序,在开发环境 下使用高可用就行

在这里插入图片描述

Spark的程序执行
若是运行spark任务,需要进入到bin目录下(bin是安装spark目录下的)
计算π例子
./spark-submit --class org.apache.spark.examples.SparkPi --master spark://hadoop1:7077 /opt/software/spark-1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar 100
在这里插入图片描述

在这里插入图片描述

可以在webUI界面对任务进行一个监控任务
在这里插入图片描述
可以在webUI界面对任务进行查看
在这里插入图片描述

在启动任务的时候最先并没有指定资源分配,而是有多少资源就使用多少资源,在跑任务的时候是可以进行资源指定,
指定内存和核心数
–executor-memory 内存大小
–total–executor-cores 核心

在提交任务的时候使用上面这些设置

./spark-submit \
–class org.apache.spark.examples.SparkPi
–master spark://hadoop1:7077
–executormemory 512m
–total-executor-cores 2 /opt/software/spark-1.6.3/lib/spark-examples-1.6.3-hadoop2.6.0.jar 100

在这里插入图片描述

SparkShell

spark-shell是spark自带的交互式shell程序
通过shell可以进行交互式编程,可以在shell书写scala语言的scala语言的spark程序
spark-shell一般是用来进行spark程序测试或联系使用
spark-shell属于spark的特殊应用程序
spark-shell启动有两种方式:local模式和cluster模式
spark-shell直接启动就是本地模式
相当于在本机启动一个sparkSubmit进行,没有与集群建立联系,进程中是有submit,但是不回被提交到 集群

Cluster模式(集群模式)
spark-shell --master spark://hadoop1:7077
–executor-memory 512m --total-executor-cores 1

spark-shell是spark自带的交互式shell程序
通过shell可以进行交互式编程,可以在shell书写Scala语言的spark程序
spark-shell属于Spark的特殊程序:
spark-shell启动有两种方式:local模式和cluster模式

spark-shell直接启动就是本地local模式
相当于在本机启动一个SparkSubmit进行,没有与集群建立关系,进行中是有Submit,但是不回被提交到集群

Cluster模式(集群模式)
spark-shell --master spark://hadoop1:7077 --executor -memory 512m --tootal-executor-cores 1
在这里插入图片描述

在使用sparkshell的 时候默认就已经创建好了两个变量
Sparkcontext 变量名是sc
SQLcontext 变量名是sqlContext
所以在shell中直接使用两个变量

sc.textFile(“hdfs://hadoop1:8020/word.txt”).flatMap(.split(" ")).map((,1)).reduceByKey(+).saveAsTextFile(“hdfs://hadoop1:8020/out”)

通过IDEA创建Spark项目

ps:不再是单纯的Scala项目,所以需要创建Maven项目
maven配置: 使用jar包和打包方式
在这里插入图片描述

spark配置:
<properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <encoding>UTF-8</encoding>
        <scala.version>2.10.6</scala.version>
        <spark.version>1.6.3</spark.version>
        <hadoop.version>2.6.4</hadoop.version>
        <scala.compat.version>2.10</scala.compat.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.10</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>

    </dependencies>

    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
        <!--<testSourceDirectory>src/test/scala</testSourceDirectory>-->
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <args>
                                <arg>-make:transitive</arg>
                                <arg>-dependencyfile</arg>
                                <arg>${project.build.directory}/.scala_dependencies</arg>
                            </args>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass></mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

本地运行(spark实现单词统计)

1.在创建conf对象要设置setMaster(“local”)
读取数据
1.直接在工程读取
sc.textFile(“相对路径或者绝对路径”)
2.从HDFS上获取数据(集群开启)
端口号是内部通信端口号: 8020 / 9000
sc.textFile(“hdfs://集群:端口/文件名”)
写出数据
直接打印在控制台上或者直接存储到本地
sorted.saveAsFile(“out”) 本地存储路径
打印数据
println(sorted.collect.toBuffer)
sorted.foreach(x => println(x))
sorted.foreach(println)

即在本地运行的代码是:
sc.textFile("/root/word.txt").flatMap(.split(" ")).map((,1)).reduceByKey( _+ _).saveAsTextFile("/root/out1")

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值