Spark认识&环境搭建&运行第一个Spark程序

2017-07-09 17:17 by 牛仔裤的夏天, 181 阅读, 0 评论, 收藏编辑

摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度。这里总结下对Spark的认识、虚拟机Spark安装、Spark开发环境搭建及编写第一个scala程序、运行第一个Spark程序。

1.Spark是什么

Spark是一个快速且通用的集群计算平台

2.Spark的特点

1)Spark是快速的

Spark扩充了流行的Mapreduce计算模型

Spark是基于内存的计算

2)Spark是通用的

Spark的设计容纳了其它分布式系统拥有的功能

批处理,迭代式计算,交互查询和流处理等

3)Spark是高度开放的

Spark提供了Python,Java,Scala,SQL的API和丰富的内置库。

Spark和其它的大数据工具整合的很好,包括hadoop,kafka等

3.Spark的组件

Spark包括多个紧密集成的组件

Spark Core:

  包含Spark的基本功能,包含任务调度,内存管理,容错机制等

  内部定义了RDDs(弹性分布式数据集)

  提供了很多APIs来创建和操作这些RDDs

  应用场景,为其他组件提供底层的服务

Spark SQL:

  是Spark处理结构化数据的库,就像Hive SQL,Mysql一样

  应用场景,企业中用来做报表统计

Spark Streaming:

  是实时数据流处理组件,类似Storm

  Spark Streaming提供了API来操作实时流数据

  应用场景,企业中用来从Kafka接收数据做实时统计

Mlib:

一个包含通用机器学习功能的包,Machine learning lib

包含分类,聚类,回归等,还包括模型评估和数据导入。

  MLib提供的上面这些方法,都支持集群上的横向扩展。

  应用场景,机器学习。

Graphx:

  是处理图的库(例如,社交网络图),并进行图的并行计算。

  像Spark Streaming,Spark SQL一样,它也继承了RDD API。

  它提供了各种图的操作,和常用的图算法,例如PangeRank算法。

  应用场景,图计算。

Cluster Managers:

  就是集群管理,Spark自带一个集群管理是单独调度器。

  常见集群管理包括Hadoop YARN,Apache Mesos

4.紧密集成的优点

  Spark底层优化了,基于Spark底层的组件也得到了相应的优化。

  紧密集成,节省了各个组件组合使用时的部署、测试等时间。

  向Spark增加新的组件时,其它组件,可立刻享用新组件的功能。

5.Spark与Hadoop的比较

  Hadoop应用场景:离线处理、对时效性要求不高

  Spark应用场景:时效性要求高的场景、机器学习等领域

  Doug Cutting的观点:这是生态系统,每个组件都有其作用,各善其职即可。Spark不具有HDFS的存储能力,要借助HDFS等持久化数据。大数据将会孕育出更多的新技术。

6.Spark运行环境

  Spark是Scala写的,运行在JVM上,所以运行环境Java7+

  如果使用Python API,需要安装Python2.6+或者Python3.4+

  版本对应:Spark1.6.2 -  Scala2.10    Spark2.0.0 -  Scala2.11

7.Spark安装

  Spark下载地址:http://spark.apache.org/downloads.html     注:搭Spark不需要Hadoop,如有hadoop集群,可下载相应的版本。

  

  这里安装在CentOS6.5虚拟机上,将下载好的文件上传虚拟机,并执行解压:tar -zxvf spark-2.0.1-bin-hadoop2.6.tgz

  Spark目录:

    bin包含用来和Spark交互的可执行文件,如Spark shell。

    examples包含一些单机Spark job,可以研究和运行这些例子。

  Spark的Shell:

    Spark的shell能够处理分布在集群上的数据。

    Spark把数据加载到节点的内存中,因此分布式处理可在秒级完成。

    快速使用迭代式计算,实时查询、分析一般能够在shells中完成。

    Spark提供了Python shells和Scala shells。

  这里以Scala shell为例,演示读取本地文件并进行操作:

    进入Scala shell:./spark-shell

    

    创建测试文件helloSpark并输入内容:

    

    输入val lines=sc.textFile("/home/lucy/hellospark") 加载文件内容,输入lines.count()进行统计行数:    ( 注:sc为spark content)

    

  ssh的配置:(ssh localhost需要输入密码,这在运行spark程序时是不可以的)

    ssh-keygen (生成秘钥)

    .ssh目录下cat xxx_rsa.pub> authorized_keys

    chmod 600 authorized_keys

8.Spark开发环境搭建

  Scala 下载地址: http://www.scala-lang.org/download/2.11.6.html   注:默认安装选项会自动配置环境变量,安装路径不能有空格。

  IntelliJ IDEA 下载地址:https://www.jetbrains.com/idea/

  注册码地址:http://idea.lanyus.com

  由于这里下载的ideaIU-15.0.2.exe,已经包含有Scala插件,如果不包含需要下载。查看是否已有scala插件可以新建项目,打开Files->settings选择Plugins,输入scala查看:

  

9.编写第一个Scala程序

  依次点击File->New->Project,选择Scala->SBT,下一步,打开如下窗口:

  

  这里Scala选择为2.11.6,创建完成后会进行初始化操作,自动下载jar包等。下载时常看具体网络情况。待所有进度条完成后,项目目录已经出来了,如下:

  

  编辑build.sbt:

  name := "LearnSpark"

  version := "1.0"

  scalaVersion := "2.11.1"

  libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.0.2"

  编辑完成后,点击刷新,后台自动下载对应的依赖:

  

  src->scala右击新建scala类WordCount

  

import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by Lucy on 2017/7/4.
*/
object WordCount {
def main(args: Array[String]) {
val conf=new SparkConf().setAppName("wordcount")
val sc=new SparkContext(conf)
val input=sc.textFile("/home/lucy/helloSpark")
val lines=input.flatMap(line=>line.split(" "))
val count=lines.map(word=>(word,1)).reduceByKey{case (x,y)=>x+y}
val output=count.saveAsTextFile("/home/lucy/hellosparkRes")
}
}

  代码编写完成后,进行打包(配置jar包,build):

  配置jar包:File->Project Structure,选择Artifacts,点击+号:

  

    

  这里不打包依赖。配置jar包完成后,Build->Build Artifacts,等待build完成。

10.运行第一个Spark程序

  这里需要先启动集群:

  启动master:  ./sbin/start-master.sh

  启动worker:  ./bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077

        这里的地址为:启动master后,在浏览器输入localhost:8080,查看到的master地址

        

  启动成功后,jps查看进程:

  

  接下来执行提交命令,将打好的jar包上传到linux目录,jar包在项目目录下的out\artifacts下。

  提交作业: ./bin/spark-submit --master spark://localhost:7077 --class WordCount /home/lucy/learnspark.jar

  可以在4040端口查看job进度:

  

  查看结果:

  

  由于按照空格分割字符串,所以这里将Spark! 视为一个单词。至此,任务运行结束!

Spark程序的更多相关文章

  1. 如何运行Spark程序

    [hxsyl@CentOSMaster spark-2.0.2-bin-hadoop2.6]# ./bin/spark-submit --class org.apache.spark.examples ...

  2. Spark系列—02 Spark程序牛刀小试

    一.执行第一个Spark程序 1.执行程序 我们执行一下Spark自带的一个例子,利用蒙特·卡罗算法求PI: 启动Spark集群后,可以在集群的任何一台机器上执行一下命令: /home/spark/s ...

  3. Spark认识&环境搭建&运行第一个Spark程序

    摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度.这里总结下对Spark的认识.虚拟机Spark安装.Spark开发环境搭建及编写第一个scala程序.运 ...

  4. IntelliJ IDEA在Local模式下Spark程序消除日志中INFO输出

    在使用Intellij IDEA,local模式下运行Spark程序时,会在Run窗口打印出很多INFO信息,辅助信息太多可能会将有用的信息掩盖掉.如下所示 要解决这个问题,主要是要正确设置好log4 ...

  5. Spark集群模式&Spark程序提交

    Spark集群模式&Spark程序提交 1. 集群管理器 Spark当前支持三种集群管理方式 Standalone-Spark自带的一种集群管理方式,易于构建集群. Apache Mesos- ...

  6. 使用IDEA运行Spark程序

    使用IDEA运行Spark程序 1.安装IDEA 从IDEA官网下载Community版本,解压到/usr/local/idea目录下. tar –xzf ideaIC-13.1.4b.tar.gz ...

  7. 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...

  8. [Spark]如何设置使得spark程序不输出 INFO级别的内容

    Spark程序在运行的时候,总是输出很多INFO级别内容 查看了网上的一些文章,进行了试验. 发现在 /etc/spark/conf 目录下,有一个 log4j.properties.template ...

  9. eclipse运行spark程序时日志颜色为黑色的解决办法

    自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...

  10. Spark程序运行常见错误解决方法以及优化

    转载自:http://bigdata.51cto.com/art/201704/536499.htm Spark程序运行常见错误解决方法以及优化 task倾斜原因比较多,网络io,cpu,mem都有可 ...

随机推荐

  1. oracle中connect by语句的优化

    很多应用中都会有类似组织机构的表,组织机构的表又通常是典型的层次结构(没有循环节点).于是通过组织控制数据权限的时候,许多人都喜欢通过connect by获得组织信息,然后再过滤目标数据. 在有些情况 ...

  2. 使用SimpleDateFormat解析日期得到年份不正确的结果

    今天写项目的时候发现日期解析结果不对,很纳闷,从控制台中看传过来的数据是对的,但解析得到数据就是错的,如下图 最终查资料发现是格式上的错误,年份的YYYY应该改成yyyy,之后就正常了. 以下是正确格 ...

  3. 使用Ansible实现nginx+keepalived高可用负载均衡自动化部署

    本篇文章记录通过Ansible自动化部署nginx的负载均衡高可用,前端代理使用nginx+keepalived,端web server使用3台nginx用于负载效果的体现,结构图如下: 部署前准备工 ...

  4. solr6.6教程-core的添加(二)

    1.什么是core core是solr的一个索引库,可以理解为一个数据库,core可以根据需要,创建多个. 2.创建core 首先进入到solrhome文件夹(D:\solrhome),创建一个文件夹 ...

  5. Git详解及github的使用

    1.Devops介绍 1.Devops是什么 开发 development 运维 operations 2.Devops能干嘛 提高产品质量 1 自动化测试 2 持续集成 3 代码质量管理工具 4 程 ...

  6. 微信小程序 - 生命周期 - 参数传递

    ​ 现在WEB开发门槛越来越高,不想java 会了就可以有工作,前端不行 ,不仅JavaScript要求不低,基础的HTML+CSS还要扎实,jquery也是必须要会,现在的前端框架 Vue Ng R ...

  7. angularjs 自定义服务(serive,factory,provder) 以及三者的区别

    1.Serive 服务:通过service方式创建自定义服务,相当于new的一个对象:var s = new myService();,只要把属性和方法添加到this上才可以在controller里调 ...

  8. iWebShop产品功能技术优势有什么?

    iwebshop基于iweb si 框架开发,在获得iweb si 技术平台支持的条件下,iwebshop可以轻松满足用户量级百万至千万级的大型电子商务网站的性能要求.站点的集群与分布式技术(分布式计 ...

  9. python3爬虫之开篇

    写在前面的话: 折腾爬虫也有一段时间了,从一开始的懵懵懂懂,到现在的有一定基础,对于这一路的跌跌撞撞,个人觉得应该留下一些文字性的东西,毕竟好记性不如烂笔头,而且毕竟这是吃饭的家伙,必须用心对待才可以 ...

  10. kafka单机部署文档

    单机Kafka部署文档 最简单的使用方式,单机,使用自带的zookeeper 1.解压 下载地址:http://pan.baidu.com/s/1i4K2pXr tar –zxvf kafka_2.1 ...