一、Spark概述

    官网:http://spark.apache.org/
Apache Spark™是用于大规模数据处理的统一分析引擎。
为大数据处理而设计的快速通用的计算引擎。 Spark加州大学伯克利分校AMP实验室。不同于mapreduce的是一个Spark任务的中间结果保存到内存中。
空间换时间。
Spark启用的是内存分布式数据集。
用scala语言实现,与spark紧密继承。用scala可以轻松的处理分布式数据集。
Spark并不是为了替代hadoop,而为了补充hadoop。
Spark并没有存储。可以集成HDFS。

二、Spark特点

    1)速度快
与mr对比,磁盘运行的话10倍以上。
内存运行的话,100倍以上。 2)便于使用
支持java/scala/python/R 3)通用
不仅支持批处理(SparkSQL)
而且支持流处理(SparkStreaming) 4)兼容
兼容其它组件
Spark实现了Standalone作为内置的资源管理和调度框架。hdfs/yarn。

三、Spark安装部署

    主节点:Master (192.168.146.150)
从节点:Worker (192.168.146.151、192.168.146.152) 1、准备工作
(1)关闭防火墙
firewall-cmd --state 查看防火墙状态
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 禁止开机启动 (2)远程连接(CRT) (3)永久设置主机名
vi /etc/hostname
三台机器hostname分别为spark-01、spark-02、spark-03
注意:要reboot重启生效 (4)配置映射文件
vi /etc/hosts #127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.146.150 spark-01
192.168.146.151 spark-02
192.168.146.152 spark-03 (5)配置ssh免密码登录
ssh-keygen 生成密钥对
ssh-copy-id spark-01
ssh-copy-id spark-02
ssh-copy-id spark-03 2、安装jdk(scala依赖jvm)
(1)创建spark安装的目录
cd /root
上传tar包到/root目录下 (2)解压tar包
cd /root
mkdir sk
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /root/sk (3)配置环境变量
vi /etc/profile export JAVA_HOME=/root/sk/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin source /etc/profile 加载环境变量 (4)发送到其它机器(其他机器的/root下要先创建sk目录)
cd /root/sk
scp -r jdk1.8.0_144/ root@spark-02:$PWD
scp -r jdk1.8.0_144/ root@spark-03:$PWD scp -r /etc/profile spark-02:/etc
scp -r /etc/profile spark-03:/etc 注意:加载环境变量 source /etc/profile 3、安装Spark集群
(1)上传tar包到/root目录下 (2)解压
cd /root
tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C sk/ (3)修改配置文件
cd /root/sk/spark-2.2.0-bin-hadoop2.7/conf
mv spark-env.sh.template spark-env.sh
vi spark-env.sh export JAVA_HOME=/root/sk/jdk1.8.0_144
export SPARK_MASTER_HOST=spark-01
export SPARK_MASTER_PORT=7077 (4)slaves 加入从节点
cd /root/sk/spark-2.2.0-bin-hadoop2.7/conf
mv slaves.template slaves
vi slaves spark-02
spark-03 (5)分发到其他机器
cd /root/sk
scp -r spark-2.2.0-bin-hadoop2.7/ root@spark-02:$PWD
scp -r spark-2.2.0-bin-hadoop2.7/ root@spark-03:$PWD (6)启动集群
cd /root/sk/spark-2.2.0-bin-hadoop2.7
sbin/start-all.sh 浏览器访问http://spark-01:8080/即可看到UI界面 (7)启动命令行模式
cd /root/sk/spark-2.2.0-bin-hadoop2.7/bin
./spark-shell sc.textFile("/root/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy((_,1)).collect

四、启动spark­shell

    cd /root/sk/spark-2.2.0-bin-hadoop2.7/
本地模式:bin/spark-shell 集群启动:bin/spark-shell --master spark://spark-01:7077 --total-executor-cores 2 --executor-memory 512mb 提交运行jar:bin/spark-submit --master spark://spark-01:7077 --class SparkWordCount /root/SparkWC-1.0-SNAPSHOT.jar
hdfs://192.168.146.111:9000/words.txt hdfs://192.168.146.111:9000/sparkwc/out

五、spark集群角色

    Yarn                         Spark           作用
ResourceManager Master 管理子节点
NodeManager Worker 管理当前节点
YarnChild Executor 处理计算任务
Client+ApplicationMaster SparkSubmit 提交计算任务

六、Shell编写WordCount

1、本地模式:bin/spark-shell

scala> sc.textFile("/root/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res5: Array[(String, Int)] = Array((is,1), (love,2), (capital,1), (Beijing,2), (China,2), (I,2), (of,1), (the,1)) scala>

其中words.txt文件内容如下

I love Beijing
I love China

2、集群启动:bin/spark-shell --master spark://spark-01:7077 --total-executor-cores 2 --executor-memory 512mb

scala> sc.textFile("/root/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
res5: Array[(String, Int)] = Array((is,1), (love,2), (capital,1), (Beijing,2), (China,2), (I,2), (of,1), (the,1)) scala>

注意:如果集群启动使用的是本地文件words.txt,那么需要每个节点对应的路径都有该文件!!!

     如果使用的是HDFS文件则不需要考虑这个。

scala> sc.textFile("hdfs://192.168.146.111:9000/words.txt").flatMap(_.split("\t")).map((_,1)).reduceByKey(_+_).collect
res6: Array[(String, Int)] = Array((haha,1), (heihei,1), (hello,3), (Beijing,1), (world,1), (China,1)) scala>

HDFS中的words.txt文件内容如下:

hello    world
hello China
hello Beijing
haha heihei

3、IDEA开发WordCount

(1)SparkWordCount类

import org.apache.spark.{SparkConf, SparkContext}

//spark-WordCount本地模式测试
object SparkWordCount {
def main(args: Array[String]): Unit = {
//2.设置参数 setAppName设置程序名 setMaster本地测试设置线程数 *多个
val conf: SparkConf = new SparkConf().setAppName("SparkWordCount").setMaster("local[*]")
//1.创建spark执行程序的入口
val sc:SparkContext = new SparkContext(conf) //3.加载数据 并且处理
sc.textFile(args(0)).flatMap(_.split("\t")).map((_,1))
.reduceByKey(_+_)
.sortBy(_._2,false)
//保存文件
.saveAsTextFile(args(1)) //4.关闭资源
sc.stop()
}
}

(2)pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo.spark</groupId>
<artifactId>SparkWC</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<scala.version>2.11.8</scala.version>
<spark.version>2.2.0</spark.version>
<hadoop.version>2.8.4</hadoop.version>
<encoding>UTF-8</encoding>
</properties> <dependencies>
<!-- scala的依赖导入 -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency> <!-- spark的依赖导入 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency> <!-- hadoop-client API的导入 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency> </dependencies> <build>
<pluginManagement>
<plugins>
<!-- scala的编译插件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<!-- ava的编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<executions>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>add-source</goal>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin> <!-- 打jar包插件 -->
<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>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build> </project>

(3)配置类的运行参数

(4)输入的文件words.txt

hello    world
hello spark
hello China
hello Beijing
hello world

(5)输出文件part-00000

(hello,5)
(world,2)

(6)输出文件part-00001

(Beijing,1)
(spark,1)
(China,1)

4、SparkSubmit提交任务

(1)将上一步的工程打成jar包

(2)把SparkWC-1.0-SNAPSHOT.jar放在spark-01机器的/root下

(3)执行以下命令

    cd /root/sk/spark-2.2.0-bin-hadoop2.7/

    bin/spark-submit --master spark://spark-01:7077 --class SparkWordCount /root/SparkWC-1.0-SNAPSHOT.jar
hdfs://192.168.146.111:9000/words.txt hdfs://192.168.146.111:9000/sparkwc/out

(4)hdfs中words.txt文件内容如下:

hello    world
hello China
hello Beijing
haha heihei

(5)输出结果

[root@bigdata111 ~]# hdfs dfs -ls /sparkwc/out
Found 3 items
-rw-r--r-- 3 root supergroup 0 2019-01-10 21:43 /sparkwc/out/_SUCCESS
-rw-r--r-- 3 root supergroup 10 2019-01-10 21:43 /sparkwc/out/part-00000
-rw-r--r-- 3 root supergroup 52 2019-01-10 21:43 /sparkwc/out/part-00001
[root@bigdata111 ~]# hdfs dfs -cat /sparkwc/out/part-00000
(hello,3)
[root@bigdata111 ~]# hdfs dfs -cat /sparkwc/out/part-00001
(haha,1)
(heihei,1)
(Beijing,1)
(world,1)
(China,1)

Spark集群安装和WordCount编写的更多相关文章

  1. 大数据技术之_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 ...

  2. [bigdata] spark集群安装及测试

    在spark安装之前,应该已经安装了hadoop原生版或者cdh,因为spark基本要基于hdfs来进行计算. 1. 下载 spark:  http://mirrors.cnnic.cn/apache ...

  3. spark集群安装配置

    spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoo ...

  4. CentOS6安装各种大数据软件 第十章:Spark集群安装和部署

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. Spark入门:第2节 Spark集群安装:1 - 3;第3节 Spark HA高可用部署:1 - 2

    三. Spark集群安装 3.1 下载spark安装包 下载地址spark官网:http://spark.apache.org/downloads.html 这里我们使用 spark-2.1.3-bi ...

  6. 3 Spark 集群安装

    第3章 Spark集群安装 3.1 Spark安装地址 1.官网地址 http://spark.apache.org/ 2.文档查看地址 https://spark.apache.org/docs/2 ...

  7. Hadoop2.2集群安装配置-Spark集群安装部署

    配置安装Hadoop2.2.0 部署spark 1.0的流程 一.环境描写叙述 本实验在一台Windows7-64下安装Vmware.在Vmware里安装两虚拟机分别例如以下 主机名spark1(19 ...

  8. spark集群安装并集成到hadoop集群

    前言 最近在搞hadoop+spark+python,所以就搭建了一个本地的hadoop环境,基础环境搭建地址hadoop2.7.7 分布式集群安装与配置 本篇博客主要说明,如果搭建spark集群并集 ...

  9. Spark 个人实战系列(1)--Spark 集群安装

    前言: CDH4不带yarn和spark, 因此需要自己搭建spark集群. 这边简单描述spark集群的安装过程, 并讲述spark的standalone模式, 以及对相关的脚本进行简单的分析. s ...

随机推荐

  1. 【Java面试题】11 什么是内部类?Static Nested Class 和 Inner Class的不同。

    Inner Class(内部类)定义在类中的类. (一般是JAVA的说法) Nested Class(嵌套类)是静态(static)内部类.(一般是C++的说法)静态内部类:1 创建一个static内 ...

  2. rdesktop连接远程windows

    $ info rdesktop   //看一下帮助信息吧$rdesktop 192.168.1.1 //打开了一个8位色彩的,$rdesktop -a 16 192.168.1.1 //这个是16位色 ...

  3. JavaSE(八)集合之List

    前面一篇的corejava讲的是集合的概述,这一篇我将详细的和大家讲解一下Collection下面的List.set.queue这三个子接口.希望大家能得到提升. 一.List接口 1.1.List接 ...

  4. mysql数据库不能远程访问的问题

    1.先暂停防火墙,检查是不是防火墙的问题. 2. 如若不是防火墙的问题,则可能是用户权限的问题. 这里创建一个用户来用于远程连接:首先登陆你的mysql数据库 命令: mysql -uroot -p ...

  5. VMWare虚拟机提示:打不开磁盘…或它所依赖的某个快照磁盘,开启模块DiskEarly的操作失败,未能启动虚拟机

    将电脑上存在的虚拟机复制一份后打开运行,弹出错误提示: 打不开磁盘…或它所依赖的某个快照磁盘,开启模块DiskEarly的操作失败,未能启动虚拟机. 解决方法如下: 打开存放虚拟机系统硬盘的所在文件夹 ...

  6. 扁平化你的Qt应用程序

    什么是扁平化 这里的扁平化指的是交互设计方面的一种风格. 扁平化是随着极简注意的风潮流行起来的,这个概念最核心的地方就是放弃一切装饰效果,诸如阴影.透视,纹理,渐变等等能做出3D效果的元素一概不用.全 ...

  7. swift学习笔记之--类的计算属性

    1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 class Calcuator{ ; ; var sum:Int{ get{ return a + b ...

  8. Python zmail 模块

    zmail 是 python3 用来收发邮件的一个模块,用法参考: https://mp.weixin.qq.com/s?__biz=MzAxMjUyNDQ5OA==&mid=26535559 ...

  9. docker images 详解

    docker images 用于查看本地已下载的镜像 [root@localhost ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ce ...

  10. C语言近程型(near)和远程型(far)的区别是什么?

    DOS用一种分段结构来寻址计算机的内存,每一个物理存储位置都有一个可以用段一偏移量方式来访问的相关地址.例如,下面就是一个典型的段式地址:     A000:1234 冒号左边的部分代表段地址(A00 ...