1、首先启动hdfs
2、编辑一个文件上传到hdfs中hdfs://ip:9000/words.txt
3、在spark shell中用scala语言编写spark程序
使用spark-shell进入命令行界面
在命令行界面输入下面命令
sc.textFile("hdfs://192.168.124.140:9000/words.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://192.168.124.140:9000/out")
说明
sc是SparkContext对象,该对象时提交spark程序的入口
textFile(hdfs://192.168.124.140:9000/words.txt)是hdfs中读取数据
flatMap(_.split(" "))先map在压平
map((_,1))将单词和1构成元组
reduceByKey(_+_)按照key进行reduce,并将value累加
saveAsTextFile("hdfs://192.168.124.140:9000/out")将结果写入到hdfs中
运行没有报错表示成功,使用hadoop fs -ls /out 查看 使用hadoop fs -cat /out/part-00000 查看内容
spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,
2、使用idea编写代码,打包上传到spark
编写spark程序
package cn
import org.apache.spark.{SparkContext, SparkConf}
object WordCount {
def main(args: Array[String]) {
//创建SparkConf()并设置App名称
val conf = new SparkConf().setAppName("WC")
//创建SparkContext,该对象是提交spark App的入口
val sc = new SparkContext(conf)
//使用sc创建RDD并执行相应的transformation和action
sc.textFile(args(0)).flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_, 1).sortBy(_._2, false).saveAsTextFile(args(1))
//停止sc,结束该任务
sc.stop()
}
}
-
使用Maven打包:首先修改pom.xml中的main class
首先启动hdfs和Spark集群
进入相应的hadoop目录启动hdfssbin/start-dfs.sh
进入相应的spark目录启动spark
sbin/start-all.sh
13.使用spark-submit命令提交Spark应用(注意参数的顺序)
./spark-submit \ //spark提交 在spark目录的bin目录下
//usr/local/spark-2.1.1-bin-hadoop2.6/bin
--class cn.WordCount \ //程序main的路径
--master spark://hadoop1:7077 \ //spark master
--executor-memory 2G \ //使用内存
--total-executor-cores 4 \ //执行核数
/root/spark-mvn-1.0-SNAPSHOT.jar \ //jar包位置
hdfs://192.168.124.140:9000/words.txt \ //输入路径
hdfs://192.168.124.140:9000/out //输出路径
-
查看结果hdfs dfs -cat hdfs://192.168.124.140:9000/out/part-00000