在使用idea开发,spark程序时,需要在开发环境模拟hadoop环境,不然,每次都要打jar去集群环境执行调试程序,严重影响开发效率。
winutils.exe是在Windows系统上需要的hadoop调试环境工具,里面包含一些在Windows系统下调试hadoop、spark所需要的基本的工具类,
下面说下具体使用;
下载地址:
https://download.youkuaiyun.com/download/software_0215/10690839
下载后,需要配置环境变量;
下载解压后,如下:bin目录下,应该有这个winutils.exe
然后,去配置环境变量,注意,这里的环境变量,不需要配到bin目录,因为spark,会自动读取到hadoop_home,然后加上bin
如下:hadoop_home环境变量。
注意:
idea 需要重启电脑才能识别新增的环境变量,
或者,在程序的开始,加上一句:
System.setProperty("hadoop.home.dir", "D:\\hadoop-2.6.0")
*/ object ScalaWordCount {
def main(args: Array[String]): Unit = {
//指定winutils目录,window下hadoop home目录
System.setProperty("hadoop.home.dir", "D:\\hadoop-2.6.0")
//创建spark配置文件,设置应用程序名字,以及开启线程数量
val conf= new SparkConf().setAppName("ScalaWordCount").setMaster("local[4]")
//创建spark执行入口
val sc =new SparkContext(conf)
//指定从哪里读取数据,创建RDD
val lines:RDD[String]=sc.textFile(args(0)) //每一行的内容
。。。。。。。。。。。
具体应用举例操作如下:
代码入下:
package com.imooc
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/*
* Description
*@author Ruimeng
*@Date 2019/3/18 10:53
*/ object ScalaWordCount {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "D:\\hadoop-2.6.0")
//创建spark配置文件,设置应用程序名字
val conf= new SparkConf().setAppName("ScalaWordCount").setMaster("local[4]")
//创建spark执行入口
val sc =new SparkContext(conf)
//指定从哪里读取数据,创建RDD
val lines:RDD[String]=sc.textFile(args(0)) //每一行的内容
//对每一行进行切割得到单词,用空格切
val words:RDD[String]= lines.flatMap(_.split(" "))
//将每个单词和1组合,形成map元组
val wordAndOne:RDD[(String,Int)]=words.map((_,1))
//按key进行聚合
val reduced:RDD[(String,Int)] = wordAndOne.reduceByKey(_+_)
//排序
val sorted:RDD[(String,Int)] = reduced.sortBy(_._2,false)
//将结果输出到hdfs中
sorted.saveAsTextFile(args(1))
//释放资源
sc.stop()
}
}
指定输入参数:
这样说,在E://hadoop//input下的文件即为模拟的输入文件路径,E://hadoop//output即为输出文件路径
运行程序完成后,生产如下文件:
——