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 ...
随机推荐
- JS 动态生成JSON对象
JS 动态生成JSON对象,一般用到JSON传递参数的时候,会用到. function onGeneratedRow(columnsResult) { var jsonData = {}; colum ...
- Effective Java 第三版——58. for-each循环优于传统for循环
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- Nginx 指令目录(中文版)
指令大全 accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_t ...
- mysql乱码问题解决办法
最近开发一下小项目,遇到了最常见的乱码问题. 1.数据库使用utf-8 utf-8_generic_ci编码,使用csv上传并导入数据,插入数据的时候出现了问题,有很大部分数据没有被导入,所以使用m ...
- React Native库版本升级与降级
迄今为止React Native获得了超过48K的star,最新版本0.44,已经趋于稳定.(官网地址:https://github.com/facebook/react-native).随着Reac ...
- 菜鸟教程之工具使用(七)——从GIt上导出Maven项目
今天继续我们的工具教程,公司用Git作为版本控制工具,所以最近一直在跟Git打交道.也是一边学习一边使用,于是想做一些入门教程,一来自己总结一下,二来还能帮助一些刚刚接触Git的朋友.一举两得,何乐而 ...
- json简介及JsonCpp用法
[时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...
- packetfence 7.2网络准入部署(一)
packetfence 是一款内网准入软件,刚开始研究的时候也是一脸懵逼,资料少的可怜,前后玩了几个月,中途很多次都想放弃了,填完了很多坑,最后也算是成功了 好了,今天就讲一下packetfence所 ...
- 导出不带.svn的文件夹或者是不含.class的文件
转载自:http://blog.csdn.net/z278718149/article/details/21537395 如何导出不带.svn的文件夹或者是不含.class的文件 在工作环境中,有的时 ...
- HyperLogLog
数据量一大,连统计基数也成了一个麻烦事.在使用kylin的时候,遇到对度量值进行基数统计,使用的是Hyperloglog算法,占用内存小,误差小,实乃不错的方法,但查阅网上的资料与内容,感觉未能理解的 ...