先上GitHub地址
https://github.com/MethodJiao/PkpmSpark
PkpmSpark
大數據分析 三維數據挖掘運算分析程序
實現的功能
1.分析大數據中相似三維場景
2.對經常出現的三維場景進行加權
3.將結果聚合收束
4.提取最具價值的三維場景
機理
獲取mongodb中存儲的三維數據進行分析,歸併,聚合,加權運算,最後計算完成後的結果存入redis
環境配置
1.mongodb中需含有名稱爲mydb數據庫與名爲netflows的collection
2.需要配置kafka 並新建topic名稱爲order(若不需要由kafka做觸發源則不用配置)
3.需配置redis,無用戶名密碼登錄
4.需spark運行環境 2.4.4測試通過
5.需scala sdk 2.11.12測試通過
程序配置
1.kafka消費實例配置在OrderTopicKafka類中,請跟據需要修改,可由工廠模式附加新構造上去
2.redis鏈接實例配置在RedisConnector類中,請跟據需要修改
3.mongodb鏈接實例配置在SparkMainTask的main函數中,請跟據需要修改
編譯
本項目配置了maven編譯,在idea命令行執行mvn assembly:assembly
即可編譯生成
數據源
本項目數據源來自mongodb,數據採集可以傳入kafka藉由如下鏈接項目完成kafka向mongodb的同步,採集端只需保證json格式:
https://github.com/MethodJiao/Kafka2Mongodb
也可直接在mongodb中仿造執行如下insert語句製造數據,數據格式如下:
1.ChildNode中數組可嵌入多個立方體以此描述三維空間
2.HighPt,LowPt分別爲立方體體的對角線端點兩點
3.Name可以存儲當前立方體表述對象名
4.Origin爲當前立方體的原點定位
5.YPRangle爲立方體姿態角
db.getCollection("netflows").insert( {
_id: ObjectId("5dededecb3e6784f020c4e90"),
RootNode: {
ChildNode: [
{
HighPt: {
x: 83956,
y: 76703,
z: 2900
},
IsSet: {
set: false
},
LowPt: {
x: 80155,
y: 76502,
z: 2500
},
Name: {
name: "PBStructBeam"
},
Origin: {
x: 83955.9781857537,
y: 76602.633138063,
z: 2900
},
YPRangle: {
pitch: 0,
roll: 90,
yaw: -90
}
},
{
HighPt: {
x: 83557,
y: 74903,
z: 2900
},
IsSet: {
set: false
},
LowPt: {
x: 80756,
y: 74702,
z: 2420
},
Name: {
name: "PBStructBeam"
},
Origin: {
x: 83556.179,
y: 74802.2127855456,
z: 2900
},
YPRangle: {
pitch: 0,
roll: 90,
yaw: -90
}
}
],
KeyValue: NumberInt("-6567")
}
} );
運行
示例:
bin/spark-submit --class spark.bim.SparkMainTask --master spark://10.100.140.35:7077 /Users/method.jiao/code/pkpmspark/target/pkpmspark-1.0-SNAPSHOT-jar-with-dependencies.jar
參數修改:
1.配置ip 10.100.140.35:7077
2.jar包編譯路徑 /Users/method.jiao/code/pkpmspark/target/pkpmspark-1.0-SNAPSHOT-jar-with-dependencies.jar
PS
1.如果想在idea直接本地啓動不上傳task到spark集羣的話需要在sparksession加個.master(“local”)如:
val sparkSession = SparkSession.builder()
.appName("PKPMBimAnalyse")
.config("spark.mongodb.input.uri", "mongodb://10.100.140.35/mydb.netflows")
.master("local")
.getOrCreate()
2.如果上傳task到集羣務必去掉master屬性
3.如果想在idea遠程提交併調試 如:
val sparkSession = SparkSession.builder()
.appName("PKPMBimAnalyse")
.config("spark.mongodb.input.uri", "mongodb://10.100.140.35/mydb.netflows")
.master("spark://10.100.140.35:7077")
.getOrCreate()