本文主要是講述flink單機版的搭建及測試
前期準備jave要配置好,版本最好1,8以上
首先在官網下載需要的版本,網址在下面:
這次測試使用的是flink1.6.2,Hadoop2.7.2,scala2.11
https://flink.apache.org/downloads.html#all-stable-releases
下載完畢將安裝包上傳到linux,並安裝
tar -zxvf flink-1.6.2-bin-hadoop27-scala_2.11.tgz -C /usr/local/
爲了方便這裏給flink目錄改個名
mv flink-1.6.2 flink
進入flink目錄下輸入下面命令
vim conf/flink-conf.yaml
修改第33行的jobmanager.rpc.address 改成自己的主機名
同時將masters文件內容修改成主節點主機名
# > masters
# echo "spark01" >>masters
單機版現在已經搭建成功
啓動在flink目錄下輸入下面命令
# bin/start-cluster.sh
輸入後可以看到如下頁面
在用jps 看一下啓動的進程,紅色方框裏就是jobmanager進程
此時到web頁面查看,在網頁輸入
192.168.147.133:8081回車可以看到如下界面
這樣一個單機版就算成功了,下面我們來測試一下
先在遠程連接工具上開啓一個命令頁1輸入下面命令 製造數據
nc -lk 9000
再開一個命令頁2運行官方案例wordcount
./bin/flink run examples/streaming/SocketWindowWordCount.jar --port 9000
在命令頁1輸入任意單詞,再開一個命令頁3來實時查看統計結果結果保存在log下的文件裏
tail -f log/flink-root-taskexecutor-spark01.out
測試完畢結束命令頁1,2,3的命令,此時在web頁面也可以看到任務的執行
接下來我們要在idea裏有scala API來實現這個wordcount並將結果輸出到控制檯
現在pom.xml裏添加依賴包:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.6.2</version>
</dependency>
然後在idea裏執行下面這段scala代碼
package flinktest
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
object SocketWindowWordCount {
def main(args: Array[String]) : Unit = {
//設置連接的主機名和端口號
var hostname: String = "192.168.147.133"
var port: Int = 6666
// 獲取執行環境
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
// 獲取連接數據
val text: DataStream[String] = env.socketTextStream(hostname, port, '\n')
// 數據處理,每5秒計算打印一次
val windowCounts = text
.flatMap { w => w.split("\\s") }
.map { w => WordWithCount(w, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5))
.sum("count")
// 用單個線程打印結果,而不是並行打印結果
windowCounts.print().setParallelism(1)
env.execute("Socket Window WordCount")
}
/** 記錄的數據類型 */
case class WordWithCount(word: String, count: Long)
}
在spark01命令頁輸入nc -lk 6666(代碼裏設置的端口)
結束進程
bin/stop-cluster.sh
相互學習,共勉!路過的大佬留個足跡