您的位置:首页 > 运维架构

本地Spark程序提交到hadoop集群运行流程

2017-08-15 17:38 513 查看

1.本地环境准备

本文是将eclipse开发环境下的maven+Spark+scala程序移植到集群环境上执行过程,写的很粗糙,见谅。

本地用eclipse编写Spark小程序,完成从txt文件读取数据操作。

本地maven+Spark+scala环境就不多说了,如果配置出问题,就下载最新的eclipse然后从商店装插件吧。

注意在maven的配置文件pom.xml中插入Spark引用:

<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.2.0</version>
</dependency>


2.编写测试代码

本地数据文件放在data文件夹下,数据文件格式是“性别”,“姓名”。scala代码如下,代码中注释掉的是本地文件读取,替换为HDFS上的路径,代码中制定local不需要修改,会在后面的执行脚本中被覆盖。“*”表示服务器IP,端口为默认端口。

package com.******.scalaprogram

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.RDD
import scala.collection.mutable.LinkedList

object TestScala {
def main(args: Array[String]): Unit = {
val sc = new SparkContext("local[2]", "Pations Data Analysis")
//    val peopledata = sc.textFile("data/aaaaaa.txt")
val peopledata = sc.textFile("hdfs://*.*.*.*:8020/user/mydir/aaaaaa.txt")
val peoplelines = peopledata.collect()
def parse(line:String) = {
val pieces = line.split(",")
val sex = pieces(0).toString()
val name = pieces(1).toString()
(sex,name)
}
var sexLinkedList = LinkedList[String]("sex")
var nameLinkedList = LinkedList[String]("name")
for (i<-0 to (peoplelines.length-1)){
var peoplerowcollectline = parse(peoplelines(i))
val parse_1 = peoplerowcollectline._1
val parse_2 = peoplerowcollectline._2
sexLinkedList.append(LinkedList(parse_1))
nameLinkedList.append(LinkedList(parse_2))
}
val sexList:List[String] = sexLinkedList.toList
val nameList:List[String] = nameLinkedList.toList
val peopleList : List[(String,String)] = sexList.zip(nameList).tail
val rdd2 = sc.parallelize(peopleList)
val combinByKeyRDD2 = rdd2.combineByKey(
(x :String)=>(List(x),1),
(peo:(List[String],Int),x:String)=>(x::peo._1,peo._2+1),
(sex1:(List[String],Int),sex2:(List[String],Int)) => (sex1._1:::sex2._1,sex1._2+sex2._2))
combinByKeyRDD2.foreach(println)

}
}


3.数据文件上传

将数据文件上传到服务器,这里用的是Xftp。上传完毕后紧接着上传到HDFS,注意要与上面代码中的路径一致。

[root@***** spark_dir]#hadoop fs -put aaaaaa.txt /user/mydir/aaaaaa.txt


4.程序打包和上传

这里使用maven打包文件,打包方式有多种,这里选择:在工程包位置右击 -> Run as -> Maven install,之后会在下图中位置出现jar包。

将jar包拷贝到服务器。



5.集群运行程序

编写运行脚本,这个网上一大堆,我也是参考的。注意其中spark的路径和程序的class路径

最后运行脚本:./combinbykey.sh >>spark.log得到结果



由于涉及公司等个人信息,为了避免麻烦,做了处理导致图片有点难看,将就下哈哈。整个程序很简单,细心就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: