spark运行wordcount程序
首先提一下spark rdd的五大核心特性:
1、rdd由一系列的分片组成,比如说128m一片,类似于hadoop中的split
2、每一个分区都有一个函数去迭代/运行/计算
3、一系列的依赖,比如:rdda转换为rddb,rddb转换为rddc,那么rddc依赖于rddb,rddb依赖于rdda。
lineage:保存了一些列的转换
4、对于每个k-v的rdd可以指定一个partition,告诉它如何分区,常用分区规则有hash和range
5、处理rdd split的数据在哪里,尽量在哪里做计算(移动计算而非移动数据),这里选择最优位置,为什么存在选择,因为hdfs默认存储3个副本,每个副本都是一个选择。
RDD的两种创建方式:
parallelist
外部数据源
RDD的两种操作方式:
transformation:从一个RDD转化为另一个RDD
action:输出结果集
RDD依赖关系:
窄依赖(narrow dependencies):n——>1
子RDD的每个分区依赖于常数个父分区(即与数据规模无关)
输入输出一对一的算子,且结果RDD的分区结构不变,主要是map,flatmap
输入输出一对一,但结果集RDD的分区结构发生了变化,如union、coalesce
从输入中选择部分元素的算子,如filter、distinct、subtract、sample
宽依赖(wide dependencies):1——>n
子RDD的每个分区依赖于所有父RDD分区
对单个RDD基于key进行重组和reduce,如groupByKey、reduceByKey
对两个RDD基于key进行join和重组,如join
spark的shuffer过程类似于mapreduce shuffer过程。
创建spark应用模板:
1)创建SparkConf
2)创建SparkContact
3)加工逻辑
4)stop()关闭资源
---------------------------------------------------------------------------------------------------------------------
接下来通过wordcont程序熟悉一下:
检查需要分析的文本文件:
# bin/hdfs dfs -ls /user/hadoop/wordcount/input/
Found 1 items
-rw-r--r-- 3 root supergroup 63 2017-05-22 14:48 /user/hadoop/wordcount/input/wc.input
[root@db02 hadoop-2.5.0]# bin/hdfs dfs -text /user/hadoop/wordcount/input/wc.input
hadoop hdfs mapreduce
zookeeper
spark hive hbase
spark hadoop
编辑scala程序实现wordcount功能:
1)读取文本文件
scala> val linesRdd = sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input")
2)按空格切分文件
#scala> val wordRdd = linesRdd.map(line => line.split(" "))
scala> val wordRdd = linesRdd.flatMap(line => line.split(" "))
3)map函数统计单词
scala> val keyvalRdd = wordRdd.map(word => (word,1))
4)统计单词
scala> val countRdd = keyvalRdd.reduceByKey((a,b) => (a+b))
5)输出结果集
scala> countRdd.collect
6)将以上程序整合成一行scala程序,结果如下:
sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect
7)spark默认输出结果是没有排序的,如果想要wordcount输出结果按照key排序可以使用sortByKey()函数:
升序:sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortByKey(true).collect
降序:sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).sortByKey(false).collect
8)如果想要输出结果按照value排序可以使用sortByKey的如下技巧:
sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).collect
9)wordcount结果按值降序排序,可以使用take(n)函数输出前n个结果:
sc.textFile("hdfs://db02:8020/user/hadoop/wordcount/input/wc.input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1)).take(3)
spark运行wordcount程序的更多相关文章
- 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]
编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...
- (三)配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序
配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一. 需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclip ...
- hadoop2.7.x运行wordcount程序卡住在INFO mapreduce.Job: Running job:job _1469603958907_0002
一.抛出问题 Hadoop集群(全分布式)配置好后,运行wordcount程序测试,发现每次运行都会卡住在Running job处,然后程序就呈现出卡死的状态. wordcount运行命令:[hado ...
- 021_在Eclipse Indigo中安装插件hadoop-eclipse-plugin-1.2.1.jar,直接运行wordcount程序
1.工具介绍 Eclipse Idigo.JDK1.7-32bit.hadoop1.2.1.hadoop-eclipse-plugin-1.2.1.jar(自己网上下载) 2.插件安装步骤 1)将ha ...
- [转] 用SBT编译Spark的WordCount程序
问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? [sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需 ...
- 用SBT编译Spark的WordCount程序
问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要 ...
- Eclipse环境搭建并且运行wordcount程序
一.安装Hadoop插件 1. 所需环境 hadoop2.0伪分布式环境平台正常运行 所需压缩包:eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz 在Linu ...
- 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解
一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...
- 在Spark上运行WordCount程序
1.编写程序代码如下: Wordcount.scala package Wordcount import org.apache.spark.SparkConf import org.apache.sp ...
随机推荐
- Swift 类型桥接
前言 iOS 中的 API 基本都是在许多年前由 OC 写成的,现在通过桥接的方法在 Swift 中可以用,基本看不出区别,非常自然.但是一些特殊的类型,在两种语言进行桥接的时候需要特别注意. 1.N ...
- Winform开发框架之图表报表在线设计器-报表-SNF.EasyQuery项目--SNF快速开发平台3.3-+Spring.Net.Framework
带过项目和做过项目的人都知道,在客户现场客户的需求是百般多样的,今天要查销售出库情况,明天要看整个月的各部门销售情况,后天要查全年每个客户的项目金额.一直以前都有新需求,虽然会有售后收益,但如果有一个 ...
- JEECG中表单提交的中断
JEECG平台中基于form表单封装了<t:formvalid>标签,对应实现的类为FormValidationTag.java文件. 很多时候在正式向后台提交数据前想要做判断处理,若通过 ...
- U盘安装CentOS 7卡住在 mounting configuration file system
使用UltraISO PE 9.6.0.3000刻录CentOS 7.2到U盘之后,在PC机上安装,一直卡住在此界面 网上各路大神各显神通,提供了各种各样的办法,后来根据一位网友的说法,顺利安装完成 ...
- Socket网络编程--简单Web服务器(2)
上一小节通过阅读开源的Web服务器--tinyhttpd.大概知道了一次交互的请求信息和应答信息的具体过程.接下来我就自己简单的实现一个Web服务器. 下面这个程序只是实现一个简单的框架出来.这次先实 ...
- flink 获取上传的Jar源码
package org.apache.flink.runtime.webmonitor.handlers; /** * Handles .jar file uploads. */public clas ...
- java 生成Http 头部date格式的string-RFC 1123 Date Representation in java
https://blog.csdn.net/lvzhuyiyi/article/details/51770148 ******************************************* ...
- PHP可变参数
0x00 缘起 在laravel的源码里经常可以看到下面的函数形式 $func(...$args) 0x01 可变参数旧写法 这表示$func支持可变参数,在php5.6之前则是在函数体内调用 fun ...
- Java知多少(45)未被捕获的异常
在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public static void ma ...
- 基于Java实现批量下载网络图片
昨天朋友做项目遇到一个需求,需要把上千个的微博表情图片下载到本地磁盘,并做好规范命名,塞给我一堆Json数据,让我帮忙处理下,反正闲着也没事干,就帮忙写了.(很简单的一个功能,随手记录下,刚好填补下最 ...