首先以一個簡單的示例開始:用Spark Streaming對從TCP連接中接收的文本進(jìn)行單詞計(jì)數(shù)。

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有桃源免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
/**
* 功能:用spark streaming實(shí)現(xiàn)的針對流式數(shù)據(jù)進(jìn)行單詞計(jì)數(shù)的程序。
* 該程序只是對數(shù)據(jù)流中的每一批數(shù)據(jù)進(jìn)行單獨(dú)的計(jì)數(shù),而沒有進(jìn)行增量計(jì)數(shù)。
* 環(huán)境:spark 1.6.1, scala 2.10.4
*/
// 引入相關(guān)類庫
import org.apache.spark._
import org.apache.spark.streaming._
object NetworkWordCount {
def main(args: Array[String]) {
// Spark Streaming程序以StreamingContext為起點(diǎn),其內(nèi)部維持了一個SparkContext的實(shí)例。
// 這里我們創(chuàng)建一個帶有兩個本地線程的StreamingContext,并設(shè)置批處理間隔為1秒。
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
// 在一個Spark應(yīng)用中默認(rèn)只允許有一個SparkContext,默認(rèn)地spark-shell已經(jīng)為我們創(chuàng)建好了
// SparkContext,名為sc。因此在spark-shell中應(yīng)該以下述方式創(chuàng)建StreamingContext,以
// 避免創(chuàng)建再次創(chuàng)建SparkContext而引起錯誤:
// val ssc = new StreamingContext(sc, Seconds(1))
// 創(chuàng)建一個從TCP連接獲取流數(shù)據(jù)的DStream,其每條記錄是一行文本
val lines = ssc.socketTextStream("localhost", 9999)
// 對DStream進(jìn)行轉(zhuǎn)換,最終得到計(jì)算結(jié)果
val res = lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
// 打印該DStream中每個RDD中的前十個元素
res.print()
// 執(zhí)行完上面代碼,Spark Streaming并沒有真正開始處理數(shù)據(jù),而只是記錄需在數(shù)據(jù)上執(zhí)行的操作。
// 當(dāng)我們設(shè)置好所有需要在數(shù)據(jù)上執(zhí)行的操作以后,我們就可以開始真正地處理數(shù)據(jù)了。如下:
ssc.start() // 開始計(jì)算
ssc.awaitTermination() // 等待計(jì)算終止
}
}
為了測試程序,我們得有TCP數(shù)據(jù)源作為輸入,這可以使用Netcat(一般linux系統(tǒng)中都有,如果是windows系統(tǒng),則推薦你使用 Ncat ,Ncat是一個改進(jìn)版的Netcat)。如下使用Netcat監(jiān)聽指定本地端口:
nc -lk 9999
如果是使用Ncat,則對應(yīng)命令如下:
ncat -lk 9999
在IntelliJ IDEA或Eclipse中可以本地運(yùn)行測試上述Spark Streaming程序,該程序會連接到Netcat(或Ncat)監(jiān)聽的端口,你可以在運(yùn)行Netcat(或Ncat)的終端中輸入東東并回車,然后就可以看到該Spark Streaming程序會馬上輸出處理結(jié)果,并且這個處理是不停的、流式的。
注意:上述示例只是對數(shù)據(jù)流中的每一批數(shù)據(jù)進(jìn)行單獨(dú)的計(jì)數(shù),而沒有進(jìn)行增量計(jì)數(shù)。
老規(guī)矩,先說結(jié)論:
或者:
注意:由于 macOS 版 Ncat 的 7.90 和 7.91 版本的 bug,上述方式不再生效。起碼 7.91 版本在 macOS 10.15.7 上是不行的。此問題在 7.92 版本中已經(jīng)解決。
具體原因參見:
但 Linux 上沒問題。所以增加個 socat 的替補(bǔ)方案:
Scout 本身很強(qiáng)大,但對代理的支持這部分貌似差一些,只支持 SOCKSv4 和 HTTP Proxy,不支持 SOCKS5。詳情參考 《socat 初窺門徑》 。
有些時候,由于網(wǎng)絡(luò)限制等原因,不能直接連通過 SSH 連到指定服務(wù)器,需要經(jīng)過代理進(jìn)行連接。例如如下場景:
其中,
client.net 不能直接訪問 server.net
client.net 可以訪問 proxy.net
proxy.net 可以訪問 server.net
使用 SSH 的 ProxyCommand 選項(xiàng),配合 nc/Ncat 命令,實(shí)現(xiàn) client.net 通過代理 proxy.net ,以 SSH 訪問 server.net 。
(1) nc
macOS 上常用這種方案。但是 nc 不支持需要認(rèn)證的代理。
常用參數(shù):
(2) Ncat
Ncat 在 macOS 上通過代理連接時會出現(xiàn)連接斷開的情況。
常用參數(shù):
以 nc 為例,如使用 Ncat 可以自行替換。
默認(rèn)為 Socket5 代理,這時可以省略 -X 參數(shù)
或者采用另一種寫法:
SSH 配置文件位置:
增加如下兩行內(nèi)容:以 nc 為例,如使用 Ncat 可以自行替換。
使用配置文件之后,就不需要在命令行中進(jìn)行代理配置了。
對于大部分情況,都可以直接使用 nc 或者 Ncat 解決。但對于一些復(fù)雜情況,也可以通過其它方案完成。如在 macOS 上想通過需要認(rèn)證的代理連接,用 nc 不支持代理認(rèn)證, Ncat 又有些問題。
對于代理類型的問題,可以通過 Brook 來進(jìn)行類型轉(zhuǎn)換。
1、 corkscrew
只支持 HTTP 代理
如需要訪問帶認(rèn)證的代理服務(wù)器:
~/.ssh/myauth 的內(nèi)容:
2、 proxytunnel
只支持 HTTP 代理
命令行里只填用戶名,會提示輸入密碼,或者通過環(huán)境變量傳入。
(完)
nc是netcat的簡寫,有著網(wǎng)絡(luò)界的瑞士軍刀美譽(yù)。因?yàn)樗绦【贰⒐δ軐?shí)用,被設(shè)計(jì)為一個簡單、可靠的網(wǎng)絡(luò)工具。比如大家很熟悉使用telnet測試tcp端口,而nc可以支持測試linux的tcp和udp端口,而且也經(jīng)常被用于端口掃描,甚至把nc作為server以TCP或UDP方式偵聽指定端口做簡單的模擬測試。
2020年10月07日 - 初稿
閱讀原文 -
ncat 或者說 nc 是一款功能類似 cat 的工具,但是是用于網(wǎng)絡(luò)的。它是一款擁有多種功能的 CLI 工具,可以用來在網(wǎng)絡(luò)上讀、寫以及重定向數(shù)據(jù)。 它被設(shè)計(jì)成可以被腳本或其他程序調(diào)用的可靠的后端工具。同時由于它能創(chuàng)建任意所需的連接,因此也是一個很好的網(wǎng)絡(luò)調(diào)試工具。
ncat / nc 既是一個端口掃描工具,也是一款安全工具,還能是一款監(jiān)測工具,甚至可以做為一個簡單的 TCP 代理。 由于有這么多的功能,它被譽(yù)為是網(wǎng)絡(luò)界的瑞士軍刀。 這是每個系統(tǒng)管理員都應(yīng)該知道并且掌握它。
在大多數(shù) Debian 發(fā)行版中, nc 是默認(rèn)可用的,它會在安裝系統(tǒng)的過程中自動被安裝。 但是在 CentOS 7 / RHEL 7 的最小化安裝中, nc 并不會默認(rèn)被安裝。 你需要用下列命令手工安裝。
nc的作用:
nc的控制參數(shù)不少,常用的幾個參數(shù)如下所列:
用于指定nc將處于偵聽模式。指定該參數(shù),則意味著nc被當(dāng)作server,偵聽并接受連接,而非向其它地址發(fā)起連接。
暫未用到(老版本的nc可能需要在端口號前加-p參數(shù))
指定發(fā)送數(shù)據(jù)的源IP地址,適用于多網(wǎng)卡機(jī)
指定nc使用UDP協(xié)議,默認(rèn)為TCP
輸出交互或出錯信息,新手調(diào)試時尤為有用
6)-w
超時秒數(shù),后面跟數(shù)字
7)-z
表示zero,表示掃描時不發(fā)送任何數(shù)據(jù)
作用:批量端口掃描,可根據(jù)掃描主機(jī)的配置調(diào)整后臺掃描進(jìn)程數(shù)量(手動執(zhí)行后根據(jù)統(tǒng)計(jì)的執(zhí)行時間調(diào)整腳本中關(guān)于進(jìn)程數(shù)量的參數(shù)),通過定時任務(wù)作為簡單的服務(wù)監(jiān)控(可修改腳本添加其他報警功能,例如郵件等)
實(shí)現(xiàn):使用nc指令掃描端口,使用管道特性控制后臺掃描進(jìn)程數(shù)量
不足:僅僅對掃描端口狀態(tài)為down的信息做記錄,并沒有其他報警操作
使用:
10 useful ncat (nc) Command Examples for Linux Systems
nc命令用法舉例
我們在檢測遠(yuǎn)程服務(wù)是否正常時,經(jīng)常會用一些工具(命令)來檢測端口是否開啟,來確定服務(wù)是否正常。通常可用于檢測的工具有nc、socat、nmap等,基本思想是向遠(yuǎn)端指定端口發(fā)送數(shù)據(jù),看其狀態(tài)。
遠(yuǎn)端:192.168.0.15
本端:192.168.0.10
單向檢測(適用于無法登錄遠(yuǎn)端服務(wù)查看的情況)
如果返回succeeded,則說明相應(yīng)的UDP端口訪問正常。
如果無任何返回信息,則說明相應(yīng)的UDP端口訪問失敗。
nc -uvz $IP $Port.?? //UDP
nc -vz $IP $Port?? //TCP
遠(yuǎn)端不監(jiān)聽1777端口情況
# nc -uvz 192.168.0.15 1777
#
遠(yuǎn)端監(jiān)聽1777端口
# nc -ul 1777
XXXXX
# nc -uvz 192.168.0.15 1777
Connection to 192.168.0.15 1777 port [udp/powerguardian] succeeded!
如果succeeded,則無任何返回,如果failed則返回Connection refused。
echo "This socat udp test." | socat - udp-connect:$IP:$Port
遠(yuǎn)端不監(jiān)聽1777端口,本端發(fā)送udp數(shù)據(jù)至遠(yuǎn)端指定端口。
# echo "This socat udp test." | socat - udp-connect:192.168.0.15:1777
2017/06/18 14:26:39 socat[22195] E read(3, 0xb48a20, 8192): Connection refused
遠(yuǎn)端開啟監(jiān)聽,本端再次發(fā)送。
# nc -ul 1777
This socat udp test.
# echo "This socat udp test." | socat - udp-connect:192.168.0.15:1777
#
用指定協(xié)議掃描遠(yuǎn)端指定端口
nmap -sU -p $Port $IP
# nmap -sU -p 1777 192.168.0.15
Starting Nmap 5.51 ( ) at 2017-06-18 14:35 CST
Nmap scan report for host-192-168-0-15 (192.168.0.15)
Host is up (0.00098s latency).
PORT ??? STATE? SERVICE
1777/udp closed unknown
MAC Address: FA:16:3E:1A:54:30 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds
可以通過傳輸文本及文件來測試UDP端口是否正常(先開監(jiān)聽,再發(fā)送)
遠(yuǎn)端:nc -ul $Port
本端: nc -u $IP $Port
在本端鍵入任意字符,看遠(yuǎn)端是否可以收到。
遠(yuǎn)端:nc -l $Port $Filename
本端:nc $IP $Port $Filename
可以執(zhí)行md5sum看兩端的文件md5是否相同
注:如果是檢測tcp協(xié)議端口,上述nc命令中,去掉參數(shù)-u即可。另外,也可以使用telnet $IP $Port來完成
$ nc -vzw 2 180.76.148.122 22-81 //顯示詳細(xì)信息,包含失敗的
$ nc -zw 2 180.76.148.122 22-81 //不顯示詳細(xì)信息,只包含成功的,如果檢測udp端口,可用"vzw"參數(shù),"z"參數(shù)表示連接成功后立即關(guān)閉連接
Connection to 180.76.148.122 port 22 [tcp/ssh] succeeded!
Connection to 180.76.148.122 port 80 [tcp/http] succeeded!
附全面的ncat使用方法:
當(dāng)前標(biāo)題:包含linuxncat命令的詞條
鏈接URL:http://chinadenli.net/article5/dsgcdii.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、電子商務(wù)、定制網(wǎng)站、企業(yè)建站、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)