據(jù)實驗環(huán)境配置指南)
1. 實驗場景與整體思路拆解1.1 這個實驗到底在解決什么問題做大數(shù)據(jù)和數(shù)據(jù)庫實驗最大的痛點不是你寫不出那幾行SQL也不是搞不懂Hadoop的MapReduce原理而是環(huán)境根本起不來。我見過太多同學在實驗報告里寫著“實驗結(jié)果正確”實際上連集群都沒啟動成功全靠腦補。說白了大數(shù)據(jù)實驗的核心前提是你得先有一臺能穩(wěn)定連接的Linux環(huán)境能把JDK、Hadoop、MySQL這些東西傳上去能看得見日志能改得了配置文件。這次實驗的標題是“FinalShell連接主機和Ubuntu二”從序號就能看出來這已經(jīng)是系列操作的第二篇。上一篇大概率是把VMware虛擬機里的Ubuntu裝好、把基礎(chǔ)環(huán)境調(diào)通這一篇的核心任務(wù)就是解決“怎么讓Windows主機和Ubuntu虛擬機之間建立一條穩(wěn)定、好用、看得見摸得著的連接通道”。為什么大家都卡在這一步因為大數(shù)據(jù)實驗不是單機游戲。你在Windows上寫完代碼要傳到Linux上編譯運行你在Linux上啟動Hadoop集群要在Windows上查看日志和監(jiān)控狀態(tài)你要在數(shù)據(jù)庫里建表導數(shù)據(jù)總不能在虛擬機里瞪著眼睛看命令行輸出。所以這條“通道”的質(zhì)量直接決定你后面所有實驗的效率。1.2 為什么選擇FinalShell而不是其他工具市面上能連Linux的工具不少Xshell、Putty、SecureCRT、MobaXterm各有各的擁躉。但FinalShell在這幾年的實驗場景里幾乎是統(tǒng)治級的原因不復(fù)雜它是國產(chǎn)工具免費版已經(jīng)覆蓋了學生做實驗的絕大多數(shù)需求它自帶SFTP文件管理左邊是Windows文件、右邊是Linux文件拖拽就能上傳比Xshell需要單獨配Xftp方便太多它的監(jiān)控面板能直接看到CPU、內(nèi)存、磁盤IO曲線啟動Hadoop的時候你能肉眼看到內(nèi)存被撐起來的過程這對理解集群資源消耗特別有幫助。另外說句實話FinalShell的界面是中文的對剛接觸Linux的同學非常友好。你用Xshell連上之后還得記一堆快捷鍵用FinalShell基本零學習成本左側(cè)文件樹、右側(cè)終端、底部監(jiān)控布局一目了然。我自己的習慣是生產(chǎn)環(huán)境用MobaXterm多一點但給學生上課、帶實驗課、自己快速調(diào)試虛擬機FinalShell順手到不需要思考。有一個細節(jié)很多人不知道FinalShell的4.3.10版本在激活這塊有專門的教程網(wǎng)上搜“finalshell 4.3.10 激活”能找到不少方法。但說實話免費版功能已經(jīng)足夠?qū)嶒炗昧藢I(yè)版的多余功能在課程設(shè)計和大數(shù)據(jù)實驗里基本用不上。我建議別折騰什么激活直接用官網(wǎng)下載的免費版就行省心省力。1.3 實驗的完整鏈路和前置條件這個實驗看起來只是“打開FinalShell輸IP和密碼點連接”但背后其實有一條完整的鏈路。先把這條鏈路理清楚后面排查問題的時候才不會抓瞎。整個連接過程大概是這樣的Ubuntu虛擬機里必須安裝并啟動SSH服務(wù)OpenSSH Server這是Linux系統(tǒng)對外提供遠程登錄功能的守門員虛擬機網(wǎng)絡(luò)配置必須正確Windows主機能ping通虛擬機的IP地址這是網(wǎng)絡(luò)層的連通性前提FinalShell作為SSH客戶端用正確的協(xié)議SSH、端口默認22、用戶名和密碼發(fā)起連接請求連接成功后FinalShell會啟動終端會話和SFTP文件傳輸會話兩條通道各司其職。前置條件有三個第一Ubuntu系統(tǒng)本身要裝好最好是最小安裝加中文語言包這個在上一篇實驗里應(yīng)該已經(jīng)完成第二虛擬機的網(wǎng)絡(luò)要能上網(wǎng)且能和Windows互訪第三你要知道Ubuntu的IP地址和登錄賬號密碼。就我觀察到的實際情況70%的人卡在SSH服務(wù)沒裝或者沒啟動20%的人卡在IP地址配置不對10%的人卡在防火墻或者FinalShell自身的設(shè)置上。所以這篇文章的重點我打算放在“如何從零到一把這條鏈路完整打通”上包括那些最容易踩的坑。2. 環(huán)境準備Ubuntu端配置與網(wǎng)絡(luò)檢查2.1 確認Ubuntu系統(tǒng)狀態(tài)和IP地址先別急著打開FinalShell。第一步是進入你的Ubuntu虛擬機確認系統(tǒng)本身是健康的。打開終端敲幾個命令看看。# 查看系統(tǒng)版本 lsb_release -a # 查看當前登錄用戶和主機名 whoami hostname # 查看IP地址Ubuntu 18.04之后用ip命令老版本用ifconfig ip addr show如果你的系統(tǒng)還沒裝net-tools工具包ifconfig命令會提示未找到。這時候不用糾結(jié)ip addr show的效果是一樣的。從輸出結(jié)果里找到類似192.168.x.x或者10.0.x.x這樣的地址記下來。注意看網(wǎng)卡名稱常見的叫ens33、ens160、eth0如果看到docker0或者virbr0這種那不是物理網(wǎng)卡別選錯了。我遇到過一種尷尬情況Ubuntu顯示IP是127.0.0.1或者127.0.1.1這是因為系統(tǒng)沒有從DHCP服務(wù)器獲取到地址網(wǎng)卡沒起來。這種情況先檢查VMware的虛擬機網(wǎng)絡(luò)設(shè)置確認“已連接”那個勾選框打了勾然后執(zhí)行sudo dhclient ens33手動嘗試獲取IP。2.2 安裝并啟用SSH服務(wù)這是整個實驗最關(guān)鍵的一步。Ubuntu默認安裝往往不會自動裝上OpenSSH Server但FinalShell連接依賴的就是它。檢查方法很直接# 檢查SSH服務(wù)是否安裝 dpkg -l | grep openssh-server # 檢查SSH服務(wù)是否運行 systemctl status ssh如果提示Unit ssh.service could not be found說明沒安裝執(zhí)行sudo apt update sudo apt install -y openssh-server安裝完成后啟動服務(wù)sudo systemctl start ssh sudo systemctl enable ssh這里我多說一句為什么要enable因為如果不設(shè)置開機自啟你虛擬機重啟之后SSH服務(wù)不會自動跑起來下次連不上又得打開虛擬機手動啟動非常麻煩。做實驗講究的是少折騰一次配置到位。裝好之后驗證一下端口是否在監(jiān)聽sudo netstat -tlnp | grep 22看到0.0.0.0:22或者[::]:22在監(jiān)聽說明SSH服務(wù)已經(jīng)正常工作了。2.3 虛擬機網(wǎng)絡(luò)模式的選型與檢查VMware提供了三種網(wǎng)絡(luò)模式NAT、橋接、僅主機。這個選擇直接影響FinalShell能不能連上屬于重點基礎(chǔ)配置。我的建議是做大數(shù)據(jù)實驗用NAT模式就夠了也是絕大多數(shù)教程推薦的方式。NAT模式下虛擬機通過宿主機共享IP上網(wǎng)虛擬機的IP地址和宿主機的Windows不在同一個網(wǎng)段但虛擬機可以訪問外網(wǎng)宿主機也可以訪問虛擬機。你可能會問NAT模式下Windows能ping通虛擬機嗎答案是可以前提是VMware Network Adapter VMnet8這個虛擬網(wǎng)卡在Windows里沒有被禁用。如果想要局域網(wǎng)內(nèi)其他電腦也能訪問你的虛擬機那就選橋接模式。橋接模式下虛擬機在局域網(wǎng)里就是一個獨立的設(shè)備有自己的IP地址別人可以直接訪問。但橋接模式的問題在于如果局域網(wǎng)IP是動態(tài)分配的虛擬機IP會變每次連接前都要重新確認。檢查方法是在VMware的虛擬機“編輯”菜單里點“虛擬網(wǎng)絡(luò)編輯器”確認當前的網(wǎng)絡(luò)類型是NAT。同時在Windows端打開“網(wǎng)絡(luò)連接”確認VMware Network Adapter VMnet1和VMnet8這兩個虛擬網(wǎng)卡是啟用狀態(tài)。2.4 Windows端連通性測試Ubuntu端準備就緒后回到Windows上做一次連通性測試這一步能隔離很多問題。打開Windows命令行WinR輸入cmd執(zhí)行ping 虛擬機的IP地址如果ping通了說明網(wǎng)絡(luò)鏈路沒問題可以進入FinalShell連接環(huán)節(jié)。如果ping不通先別急著找FinalShell的毛病回到VMware里檢查虛擬機的網(wǎng)卡連接狀態(tài)或者重新執(zhí)行sudo dhclient ens33獲取IP。這里有一個非常容易踩的坑Windows防火墻會攔截ping請求。如果你ping虛擬機的時候虛擬機IP是通的但虛擬機ping Windows不通多半是Windows防火墻攔了ICMP。做實驗的時候建議把防火墻臨時關(guān)閉或者給防火墻添加ICMP放行規(guī)則。雖然這看起來不合適但實驗環(huán)境內(nèi)網(wǎng)可以關(guān)閉外網(wǎng)生產(chǎn)千萬不能這么做。另外可以試試看Windows和Ubuntu互相ping的時候DNS解析是否正常。不過在這個實驗里DNS不重要我們是用IP直連不走域名解析。3. FinalShell安裝與連接配置全流程3.1 下載安裝與初次啟動FinalShell的下載渠道很多但為了安全起見認準官網(wǎng)就行。去FinalShell的官方網(wǎng)站下載Windows版本目前主流版本是4.3.10安裝包大概幾十兆下載速度很快。安裝過程沒什么特別之處一路下一步就行唯一需要注意的是安裝路徑里不要有中文避免一些奇怪的兼容性問題。安裝完成之后打開FinalShell界面是中文的左側(cè)是會話列表中間是終端區(qū)域右側(cè)是文件管理區(qū)域底部是監(jiān)控面板。初次打開時會提示是否綁定手機號這個可以跳過不影響使用。新版本或許還有其他在線功能不用管直接進入主界面。主界面左下角有個“文件夾”圖標點開會發(fā)現(xiàn)一個名為“我的主機”的分組。右鍵這個分組選擇“新建連接”然后選擇“SSH連接”就會進入連接配置頁面。這個頁面就是整個實驗的核心配置界面里面要填的東西不多但每一項都不能填錯。3.2 連接參數(shù)詳解與填寫技巧連接配置頁面需要填寫的內(nèi)容包括配置項填寫內(nèi)容說明名稱隨意填寫建議寫成“Ubuntu大數(shù)據(jù)實驗機”這個名稱只用于本地識別主機虛擬機的IP地址就是前面ip addr show查到的地址端口22SSH默認端口除非你改過用戶名你的Ubuntu用戶名比如hadoop、ubuntu、root等認證方式密碼或密鑰實驗中一般用密碼密碼相應(yīng)用戶的密碼注意不是sudo密碼是登錄密碼這里有一個重要提醒關(guān)于用戶名和登錄權(quán)限。不建議用root直接登錄因為Ubuntu默認禁止root遠程登錄如果你確實想用root得先給root設(shè)置密碼并修改SSH配置文件/etc/ssh/sshd_config里的PermitRootLogin為yes還要重啟systemctl restart ssh。但做實驗嘛用普通用戶足夠sudo提權(quán)完全可以覆蓋所有操作需求。填完之后點“確定”保存連接。如果你在實驗室或者家里切換網(wǎng)絡(luò)虛擬機的IP可能會變到時候需要修改這個連接配置里的主機IP。我在操作中習慣給虛擬機配置靜態(tài)IP這樣IP就不會漂移省得每次實驗前都得重新查IP。具體方法是修改/etc/netplan/01-netcfg.yaml配置文件文件名可能不同把dhcp4: yes改成dhcp4: no然后手動指定addresses、gateway4和nameservers。3.3 第一次連接與常見結(jié)果分析配置保存后雙擊這個連接FinalShell會嘗試建立SSH連接。第一次連接時如果彈出一個“首次連接驗證”的提示框詢問是否信任該主機的指紋密鑰選擇“接受并保存”就好。這就像第一次去某個地方不認識路對方先出示一下身份證你看一眼記住長相以后再去就直接認識了。正常連接成功后終端區(qū)域會顯示Linux的命令行提示符比如hadoopubuntu:~$這說明你已經(jīng)成功登錄到Ubuntu了。同時右側(cè)的文件管理區(qū)域會自動切換到家目錄你可以在Windows和Linux之間直接拖拽文件上傳下載。連接失敗時FinalShell會彈出錯誤提示常見的錯誤類型我整理一下“連接超時”主機IP不對或者虛擬機沒開機或者網(wǎng)絡(luò)隔離了“拒絕連接 或者 Cannot connect”目標機器上SSH服務(wù)沒有啟動或者防火墻攔截了22端口“認證失敗 或者 Authentication failed”用戶名或密碼錯誤或者SSH服務(wù)端配置了不允許密碼登錄“channel is not opened”連接建立后通道沒有成功打開多半是服務(wù)端問題或網(wǎng)絡(luò)抖動。第一次連接如果成功建議立刻做三件事第一用sudo apt update測試網(wǎng)絡(luò)能不能訪問軟件源確認外網(wǎng)連通第二用df -h看一下磁盤空間避免后期裝大數(shù)據(jù)組件時磁盤滿了第三改一個容易記住的主機名比如sudo hostnamectl set-hostname bigdata這樣終端提示符會變得好認后期啟動Hadoop集群時日志也會更清晰。4. 連接中斷與常見問題排查實錄4.1 連接成功但立刻斷開的典型案例我在帶實驗的時候遇到最多的一個情況是FinalShell顯示連接成功終端都出現(xiàn)提示符了結(jié)果一兩秒鐘之后直接斷開提示“連接失敗”或者“channel is not opened”。第一次遇到這個問題的時候我也奇怪SSH服務(wù)正常、密碼正確、網(wǎng)絡(luò)通的為什么建立連接后馬上被掐斷后來一查發(fā)現(xiàn)一個非常隱蔽的原因虛擬機磁盤空間滿了。SSH連接建立之后服務(wù)端需要創(chuàng)建會話進程、分配臨時文件、寫入日志。如果/分區(qū)的剩余空間低于某個閾值服務(wù)端會話初始化會失敗連接就會被強制斷開。因為磁盤滿這個事不會影響TCP三次握手所以你會看到“連接成功”的假象然后系統(tǒng)實際干活的時候才發(fā)現(xiàn)資源不足。排查命令很簡單df -h如果/dev/sda1或者其他掛載點的Use%到了100%清理一下。大多數(shù)情況下是/var/log下面的日志文件太占地方或者/tmp目錄積累了臨時文件。用sudo apt autoremove和sudo apt autoclean清理無用的安裝包或者手動刪除大的日志文件。另一個導致連接成功后立刻斷開的案例是SSH的MaxSessions或MaxStartups限制。如果你之前殘留了多個SSH會話服務(wù)端的連接數(shù)快達到上限新連接會被拒絕或者建立后斷開。重啟ssh服務(wù)可以釋放sudo systemctl restart ssh4.2 網(wǎng)絡(luò)層面的排查流程連接超時和連接被拒這兩種錯誤的排查思路完全不同先看網(wǎng)絡(luò)還是先看服務(wù)順序不能亂。我的建議是先確認虛擬機是不是開著。這個問題聽起來很基礎(chǔ)但真的有人虛擬機都還沒啟動就急著點連接。確認虛擬機正常運行后在Windows里ping虛擬機的IP如果ping不通說明問題出在虛擬機網(wǎng)絡(luò)配置或者VMware虛擬網(wǎng)卡上。檢查Web界面右上角的網(wǎng)絡(luò)連接圖標是不是處于已連接狀態(tài)試試在虛擬機里執(zhí)行sudo dhclient -r釋放IP再重新獲取。如果ping通了說明網(wǎng)絡(luò)層沒問題接著檢查22端口是否開放。用telnet或者PowerShell的Test-NetConnection測一下Test-NetConnection 虛擬機IP -Port 22如果返回TcpTestSucceeded : True說明端口是通的問題在SSH認證或FinalShell配置上。如果返回False說明SSH服務(wù)沒起來或者防火墻攔截了端口。Ubuntu自帶的ufw防火墻如果開啟了默認不會放行22端口。檢查Ubuntu里面防火墻狀態(tài)sudo ufw status如果顯示active執(zhí)行sudo ufw allow 22/tcp放行SSH端口。雖然實驗環(huán)境里很多人直接關(guān)閉防火墻但既然學了數(shù)據(jù)庫就應(yīng)該有安全意識有針對性放行端口比一關(guān)了之要專業(yè)得多。4.3 認證失敗和權(quán)限問題的快速定位認證失敗是比較常見又比較難診斷的一類問題因為它涉及多個環(huán)節(jié)用戶名、密碼、SSH服務(wù)端配置、SELinux/AppArmor。最常見的原因是密碼輸錯但很多人連續(xù)輸了幾次都提示認證失敗這個時候就要懷疑是不是鍵盤布局的問題。虛擬機里的Ubuntu如果默認是英文鍵盤密碼里包含、:這些符號時Windows鍵盤的鍵位和Ubuntu的鍵位可能不一致導致輸入錯誤。解決辦法是在連接配置里先別急著保存密碼手動輸入幾次試試或者打開Ubuntu的“設(shè)置-RegionLanguage”看一下鍵盤布局。還有一種情況是SSH服務(wù)端配置了禁止密碼認證。查看配置文件sudo cat /etc/ssh/sshd_config | grep PasswordAuthentication如果看到PasswordAuthentication no說明服務(wù)端只允許密鑰登錄密碼登錄被禁止了。做實驗時改成yes然后重啟ssh服務(wù)。如果用戶名不存在或者用戶被鎖定也會認證失敗。可以用sudo cat /etc/shadow查看用戶狀態(tài)如果密碼字段里有!說明該用戶密碼被鎖定。用sudo passwd 用戶名重置密碼即可。我在實際實驗中還會遇到一種情況用戶密碼格式?jīng)]問題但總是認證失敗最后發(fā)現(xiàn)是FinalShell軟件自身的Bug導致保存的密碼被錯誤編碼。這種時候把連接配置里的密碼清空第一次連接時手動輸入反而能成功。4.4 FinalShell特有問題的處理技巧FinalShell除了作為SSH客戶端還有文件管理和監(jiān)控功能。這些功能在連接不穩(wěn)定的時候會反過來引發(fā)一些問題。比如“channel is not opened”這個報錯很多時候就是SFTP通道建立失敗導致的?,F(xiàn)象是終端能連上但右側(cè)文件區(qū)域顯示“連接失敗”或者一直轉(zhuǎn)圈。這個問題的根源通常是FinalShell同時建立SSH通道和SFTP通道SFTP通道在服務(wù)端被限制了。SSH配置文件里Subsystem sftp這一行如果被注釋掉SFTP就會失敗。確認方法sudo grep -i sftp /etc/ssh/sshd_config正常情況下會看到Subsystem sftp /usr/lib/openssh/sftp-server。如果這一行被注釋或者沒有取消注釋并重啟ssh服務(wù)。另外一個常見問題是FinalShell內(nèi)置的監(jiān)控面板有時候顯示CPU占用特別高而Ubuntu自帶的top命令顯示正常。這是因為監(jiān)控面板默認采樣頻率太高比如每秒一次對虛擬機的虛cpu來說采樣本身就消耗資源。解決辦法是在監(jiān)控面板右上角的設(shè)置里把采樣間隔從1秒改成5秒。FinalShell還支持快捷命令和腳本功能我建議在連接成功后先設(shè)置幾個常用的快捷命令比如sudo apt update、sudo systemctl restart ssh、start-dfs.sh這些后續(xù)實驗中可以一鍵執(zhí)行節(jié)省大量重復(fù)輸入時間。5. 大數(shù)據(jù)與數(shù)據(jù)庫實驗中的應(yīng)用實戰(zhàn)5.1 用FinalShell搭建大數(shù)據(jù)集群環(huán)境的完整流程連接穩(wěn)定之后就可以正式使用FinalShell來進行大數(shù)據(jù)和數(shù)據(jù)庫實驗了。這套環(huán)境我部署過多次以最常見的“單節(jié)點Hadoop MySQL”組合為例完整流程大概是這樣的。第一步是上傳JDK安裝包。假設(shè)你已經(jīng)下載好了jdk-8u211-linux-x64.tar.gz在FinalShell右側(cè)文件管理區(qū)域找到Windows本地的安裝包直接拖拽到Ubuntu用戶家目錄下。這個操作比scp命令更直觀也會讓后續(xù)工作順利很多。然后打開終端執(zhí)行sudo mkdir -p /usr/local/java sudo tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local/java接下來配置環(huán)境變量用sudo vim /etc/profile或者用FinalShell自帶的編輯器打開文件追加內(nèi)容。這里有一個坑如果你在FinalShell的編輯器里編輯遠端文件保存的時候如果網(wǎng)絡(luò)不穩(wěn)定可能產(chǎn)生臨時文件殘留。建議用vim命令行方式編輯保存后執(zhí)行source /etc/profile生效。第二步是配置Hadoop。把Hadoop安裝包同樣拖拽上傳解壓到/usr/local/hadoop修改core-site.xml、hdfs-site.xml、yarn-site.xml這些配置文件。當配置里涉及主機名時注意和你在/etc/hostname里設(shè)置的主機名保持一致不然啟動時會出現(xiàn)hostname解析問題。第三步是啟動集群。執(zhí)行hdfs namenode -format格式化名稱節(jié)點然后執(zhí)行start-dfs.sh和start-yarn.sh。這時候用FinalShell的監(jiān)控面板看著內(nèi)存曲線飆升同時用jps命令確認NameNode、DataNode、ResourceManager這些進程都在運行。這個過程我特意把每一步都用FinalShell的操作來演示原因很簡單大數(shù)據(jù)實驗最煩人的就是文件分發(fā)和配置同步而FinalShell的文件拖拽和遠程編輯功能比命令行scp和vim的效率高太多了。你只需要把安裝包上傳一次然后用scp命令分發(fā)給其他節(jié)點就行。5.2 數(shù)據(jù)庫實驗中的實際用法數(shù)據(jù)庫方面的實驗主要是在Ubuntu上安裝MySQL或者PostgreSQL然后用SQL完成增刪改查操作。用FinalShell做這些實驗比直接在虛擬機里操作方便很多。安裝MySQL的常規(guī)流程sudo apt update sudo apt install -y mysql-server sudo systemctl start mysql sudo mysql_secure_installation這里有一個新手容易踩的坑MySQL裝完之后root用戶默認使用socket認證你用mysql -u root -p輸入密碼是登不進去的。需要先用sudo權(quán)限進入MySQLsudo mysql然后修改認證方式ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的新密碼; FLUSH PRIVILEGES;這些操作在FinalShell終端里執(zhí)行過程和直接坐在Ubuntu圖形界面打開終端完全一樣但好處是你能夠一邊在Windows上查資料一邊在虛擬機里執(zhí)行操作窗口切換成本低很多。數(shù)據(jù)庫實驗還有一個高頻需求是導入數(shù)據(jù)和導出數(shù)據(jù)。比如你在Windows上的Navicat或者DataGrip里編寫SQL需要把數(shù)據(jù)導入Ubuntu的MySQL中。這時候用FinalShell的文件管理把SQL腳本拖拽到用戶目錄然后在終端里執(zhí)行mysql -u root -p -e source /home/用戶名/數(shù)據(jù)腳本.sql或者移動到數(shù)據(jù)庫表所在目錄執(zhí)行source命令。這個流程比在虛擬機里手動創(chuàng)建文件再執(zhí)行方便很多。5.3 日志查看和監(jiān)控的實戰(zhàn)技巧大數(shù)據(jù)實驗和數(shù)據(jù)庫實驗都有個共同點出了問題要看日志。Hadoop的日志在$HADOOP_HOME/logs/userlogsMySQL的錯誤日志一般在/var/log/mysql/error.log這些日志文件用FinalShell查看有一種天然優(yōu)勢支持右鍵“用編輯器打開”或者用tail -f命令實時跟蹤。上面提到的監(jiān)控面板在數(shù)據(jù)庫壓測或者Hadoop跑MapReduce任務(wù)時特別有用。你跑一個WordCount任務(wù)可以看到內(nèi)存和CPU的實時曲線變化能直觀感受到分布式計算對資源的消耗模式。有一次我在實驗課上讓同學們用FinalShell監(jiān)控面板觀察MapReduce任務(wù)運行時的資源占用大家第一次意識到Reduce階段內(nèi)存占用會有一個明顯的尖峰這是只看靜態(tài)截圖學不到的東西。日志滾動也是一個要注意的點。Linux的日志系統(tǒng)默認會做logrotate日志文件到一定大小會自動輪轉(zhuǎn)。如果發(fā)現(xiàn)日志文件特別大或者磁盤空間變化異??梢韵葓?zhí)行journalctl --disk-usage看看systemd日志占了多少空間必要時用sudo journalctl --vacuum-size500M清理舊日志。5.4 多節(jié)點集群時的連接管理如果你的課程設(shè)計需要做多節(jié)點集群比如一個主節(jié)點加兩個從節(jié)點FinalShell的多標簽頁管理就很方便。每個節(jié)點建立一個連接用不同的顏色標記同時打開多個標簽頁可以Parallel地執(zhí)行命令而不需要在多個窗口之間來回切換。更重要的是FinalShell支持“發(fā)送命令到所有會話”功能。選中多個連接后在命令輸入框中輸入同樣的命令時可以選擇發(fā)送到所有的會話。這個功能在批量部署環(huán)境時太有用了比如給三個節(jié)點同時執(zhí)行sudo apt update或者同時修改某個配置文件。不過這里要提醒一句發(fā)送到所有會話的功能一定要確認命令在每臺機器上都是相同的意圖。比如在三個節(jié)點上同時執(zhí)行rm -rf /tmp/test沒問題但如果執(zhí)行sudo systemctl stop mysql而某些節(jié)點根本沒裝MySQL就會報錯。這種誤操作在真實場景中會導致部分服務(wù)異常所以用這個功能時我會格外小心。6. 實驗環(huán)境長期維護與經(jīng)驗總結(jié)6.1 靜態(tài)IP配置防止連接地址漂移做實驗最怕什么上次連接好的虛擬機今天打開準備繼續(xù)實驗發(fā)現(xiàn)IP變了FinalShell里保存的地址連不上了。這個問題在多節(jié)點的集群環(huán)境里尤其致命因為主節(jié)點配置里寫著從節(jié)點的IP一旦從節(jié)點IP變掉整個集群就啟動不了。解決辦法上文提到過就是配置靜態(tài)IP。Ubuntu 18.04以上版本使用netplan管理網(wǎng)絡(luò)。查看配置文件ls /etc/netplan/通常有一個01-network-manager-all.yaml或者01-netcfg.yaml文件打開修改成類似這樣network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.35.100/24 routes: - to: default via: 192.168.35.2 nameservers: addresses: - 114.114.114.114 - 8.8.8.8修改后執(zhí)行sudo netplan apply生效。注意這里的網(wǎng)關(guān)地址要和你VMware的NAT網(wǎng)絡(luò)配置一致。在“虛擬網(wǎng)絡(luò)編輯器”里選中NAT模式可以查看到子網(wǎng)IP和網(wǎng)關(guān)IP。比如子網(wǎng)是192.168.35.0網(wǎng)關(guān)通常是192.168.35.2。如果寫錯網(wǎng)關(guān)虛擬機可以通內(nèi)網(wǎng)但上不了外網(wǎng)。配置完成后重啟虛擬機驗證IP是否還能上網(wǎng)ip addr show ens33 ping 114.114.114.114靜態(tài)IP配置好之后FinalShell里的連接配置就永遠不用改了體驗會好很多。6.2 快照功能與實驗環(huán)境的備份恢復(fù)VMware的快照功能同時也能起到備份作用。我的習慣是在Ubuntu剛裝好、SSH配通、環(huán)境變量配好之后給虛擬機打一個干凈的快照。比如裝好SSH、網(wǎng)絡(luò)配置好后打一個“基礎(chǔ)環(huán)境”然后裝Hadoop之前再打一個“環(huán)境干凈版”安裝配置完成后再打一個“Hadoop集群已配置”。這樣做的意義在于一旦后續(xù)實驗把環(huán)境搞崩了比如配置文件寫錯導致系統(tǒng)起不來或者誤刪了某個目錄只需恢復(fù)到上一個快照幾分鐘就能回到正常狀態(tài)。相比重裝系統(tǒng)快照恢復(fù)的效率高太多而且不會丟失已經(jīng)配好的網(wǎng)絡(luò)、SSH等基礎(chǔ)設(shè)置。創(chuàng)建快照的時機也有講究。我不建議在系統(tǒng)運行大數(shù)據(jù)任務(wù)時打快照那樣快照文件會非常大而且恢復(fù)時可能因為內(nèi)存狀態(tài)不一致導致異常。正確做法是把要備份的虛擬機正常關(guān)機然后在VMware里右鍵虛擬機選擇“快照-拍攝快照”這樣最穩(wěn)定。6.3 常用命令與連接配置速查最后整理一份我平時用得最多的“必備速查表”你可以截圖保存或者收藏后續(xù)做大數(shù)據(jù)實驗遇到問題時直接翻。# SSH服務(wù)管理 sudo systemctl status ssh sudo systemctl start ssh sudo systemctl restart ssh sudo systemctl enable ssh # 網(wǎng)絡(luò)配置 ip addr show sudo netplan apply ping 網(wǎng)關(guān)IP # 防火墻 sudo ufw status sudo ufw allow 22/tcp sudo ufw disable # 磁盤和內(nèi)存 df -h free -h top # 大數(shù)據(jù)常用進程檢查 jps start-dfs.sh start-yarn.sh # 日志實時查看 tail -f $HADOOP_HOME/logs/hadoop-*.log tail -f /var/log/mysql/error.log6.4 最后的經(jīng)驗之談做了這么多年大數(shù)據(jù)和數(shù)據(jù)相關(guān)的實驗教學我個人最大的體會是學大數(shù)據(jù)先把環(huán)境搞穩(wěn)定后面的一切才有意義。很多人一開始就陷入看視頻、背命令的誤區(qū)結(jié)果環(huán)境沒配好所有命令都跑不了越學越?jīng)]信心。而像FinalShell連接Ubuntu這類的“小事”恰恰是把環(huán)境穩(wěn)住的基石。連接通了、文件能傳了、日志能看了整個實驗的反饋路徑就建立起來了。接下來你寫的每一個命令都有實時反饋你看到的每一個報錯都有了排查入口這才是真正高效的學習方式。最后的最后再分享一個很實用的小技巧在FinalShell里給每個連接設(shè)置一個“備注”寫明這臺虛擬機的用途、IP、賬戶名、配置了哪些服務(wù)。比如“Ubuntu-Hadoop集群主節(jié)點-192.168.35.100-hadoop用戶-JDK8Hadoop3.2MySQL8.0”。這樣過兩個星期再回到實驗臺前你掃一眼備注就能想起來這臺機器的所有關(guān)鍵信息不用再重新翻文檔回憶。這個習慣我一直保留到現(xiàn)在不管管理多少臺機器從來不亂。