spark 集群单词统计_Spark教程

6f42d46d1bfca6fbaefdf6ad72eb4b3b.png

转载请私信。禁止无授权转载

1.spark安装

利用ambari安装整个集群 参考Ambari及其HDP集群安装及其配置教程

2.Spark工作原理

c24da82421a4462f3bfc66563ab642ee.png
spark工作流程

提交任务到spark集群后,spark会从数据存储系统如HDFS读取数据,生成RDD,RDD进行数据分区交由各个节点进行处理,每个节点处理完数据后的结果存储在内存中,同时可将该结果交由下一个节点继续处理.最后将最终结果写回HDFS/Mysql/Hbase等数据存储系统中.

RDD:弹性分布式数据集(Resilient Distributed Dataset)
一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算.
RDD提供了一组丰富的操作以支持常见的数据运算,分为“行动”(Action)和“转换”(Transformation)两种类型,前者用于执行计算并指定输出的形式,后者指定RDD之间的相互依赖关系。两类操作的主要区别是,转换操作(比如map、filter、groupBy、join等)接受RDD并返回RDD,而行动操作(比如count、collect等)接受RDD但是返回非RDD(即输出一个值或结果)

RDD典型的执行过程如下:

1.RDD读入外部数据源(或者内存中的集合)进行创建;
2.RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,给下一个“转换”使用;
3.最后一个RDD经“行动”操作进行处理,并输出到外部数据源

7e43a95893a8b2c6838b90aa39e27734.png

RDD采用了惰性调用,即在RDD的执行过程中(如图2.2所示),真正的计算发生在RDD的“行动”操作,对于“行动”之前的所有“转换”操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算.

e3adf597f6e0737f8cb7270315b25c78.png
图2.2

RDD特征:

  • 高容错性
  • 中间结果持久化到内存
  • 存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化开销

3.spark-hello world

本地模式(Java)
  • 创建maven项目spark-note,添加Spark依赖,新建testSpark.java类

bec41f938fb19037768b2ebe1d2f20f9.png
<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.jp</groupId>
  <artifactId>spark-note</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>spark-note</name>
  <url>Welcome to Apache Maven</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spark.version>2.2.0</spark.version>
  </properties>

  <dependencies>
    <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
     </dependency>
  </dependencies>
</project>
  • 创建words.txt文件
hello java
hello scala
hello python
hi C++
hi android
  • 编写代码
package com.jp.spark;

import java.util.Arrays;
import java.util.Iterator;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import scala.Tuple2;

/**
 * Hello world!
 *
 */
public class TestSpark {
    
    public static void main( String[] args ){
    
	//设置配置信息
	SparkConf conf = new SparkConf()
	                 .setAppName("WordCount")
	                 .setMaster("local");//本地运行

	//创建JavaSparkContext对象-spark功能入口
	JavaSparkContext sc = new JavaSparkContext(conf);

	//针对输入源创建初始RDD
	JavaRDD<String> lines = sc.textFile("D:words.txt");//读取文件
	
	//==============计算操作================//
	//flatMap算子-拆分操作
	JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
    
		private static final long serialVersionUID = 1L;
		public Iterator<String> call(String line) throws Exception {
    
			return Arrays.asList(line.split(" ")).iterator();
		}
	});

	//每个单词映射为(单词,1)
	JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
    
		private static final lon
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值