能在集群里編譯軟體嗎
A. 在MPI集群上使用CUDA
CUDA給的例子中有simpleMPI程序,給每台電腦上安裝好了CUDA(也可能安裝好驅動就好了),它可以在集群上運行,在不同節點上跑,各個節點都可以調用自己的GPU計算。為了大幅提升數據傳輸性能,我們必須啟用CUDA-aware技術,它使得不同節點之間的GPU數據可以直接經過網卡傳輸,不需要通過主機內存。為了使數據傳輸能達到最大性能,CUDA-aware需要一系列技術支持,包括GPUDirect RDMA、Unified Virtual Address等。主流版本的MPI都可以支持這些技術,為了完整支持這些技術,MPI的編譯比原先稍微復雜了一些。以 openmpi 為例,官網上給出了如何安裝,如何運行的講解。
How do I build Open MPI with CUDA-aware support?
What kind of CUDA support exists in Open MPI?
**配置和編譯 Open MPI >= 2.0.0 **
官方推薦使用最新版本,我也就用最新版本。
關於GDRCopy:顧名思義,它是基於GPUDirect RDMA的庫,用於數據拷貝。以下僅是個人理解,GPUDirect RDMA技術支持第三方設備有直接讀寫GPU內存的能力,比如一塊GPU直接通過網卡讀寫另一塊GPU的內存,CPU也可以直接通過網卡直接讀寫另一塊GPU的內存。GPU不像CPU一樣低延遲,用CPU讀寫遠程GPU內存延遲低一些。
關於UCX:統一通信。MPI的通信層。
我不太懂這兩個庫,不管怎麼樣,按照官方推薦把這兩個安裝上去就好了,我們不會直接調用這兩個庫。
B. 不同配置的幾台PC電腦,可以組成linux集群或者windows集群嗎
可以,集群不要求配置一樣~
集群是一組相互獨立的、通過高速網路互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的伺服器。集群配置是用於提高可用性和可縮放性。--網路
集群下不同節點去實現對應的功能,可以對應功能去搭配合適的硬體,所以不會要求配置一樣。
C. 如何在hadoop-2.6.0上編譯運行自己編寫的java代碼
在不使用eclipse情況使java程序在hadoop 2.2中運行的完整過程。整個過程中其實分為java程序的編譯,生成jar包,運行測試。
這三個步驟運用的命令都比較簡單,主要的還是如何找到hadoop 2.2提供給java程序用來編譯的jar包。具體可以查看:
HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib目錄
下面會通過一個在hadoop中創建一個目錄的JAVA例子來進行演示
具體代碼如下:
package com.wan.demo;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HADemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
mkdir(args[0]);
}
public static void mkdir(String dir){
Configuration configuration=new Configuration();
FileSystem fs;
try {
fs = FileSystem.get(configuration);
fs.mkdirs(new Path(dir));
fs.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
把HADemo.java文件拷貝到linux環境中
配置HADOOP_HOME/bin到環境中,啟動集群,進入HADemo.java文件目錄中
注:下面的lib目錄裡面的文件由HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/ webhdfs/WEB-INF/lib目錄中獲取,下面做的目的是為了縮減命令長度
1.編譯java
# mkdir class
#Javac -classpath .:lib/hadoop-common-2.2.0.jar:lib/hadoop-annotations-2.2.0.jar -d class HADemo.java
2.生成jar包
#jar -cvf hademo.jar -C class/ .
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/wan/(in = 0) (out= 0)(stored 0%)
adding: com/wan/demo/(in = 0) (out= 0)(stored 0%)
adding: com/wan/demo/HADemo.class(in = 844) (out= 520)(deflated 38%)
3.測試運行
#hadoop jar hademo.jar com.wan.demo.HADemo /test
檢測:
#hadoop fs -ls /
結束!
D. redis集群-keepalived+redis
Redis 集群配置與 Keepalived 結合使用,以實現數據冗餘與高可用性。此過程涉及多個步驟,從安裝與配置 Redis 到集成 Keepalived,以實現自動化的主從切換與負載均衡。
首先,我們需要安裝 Redis。這包括安裝編譯工具、下載並解壓 Redis 安裝包、執行編譯和安裝命令。確保 Redis 主伺服器安裝於公網 IP 與內網 IP 相應的伺服器上,從伺服器同樣如此,但需確保它們各自獨立並相互獨立運行。
接著,為了方便管理,我們需要在特定目錄創建文件夾,如 /usr/local/redis 等,並將配置文件復制到該目錄下。這一步確保了我們可以通過統一的目錄管理所有的 Redis 服務配置。
配置 sysctl.conf 文件是另一個關鍵步驟,目的是啟用內核參數,確保 Redis 在重啟或停止時不會報錯,並且能自動在停止服務前同步數據到磁碟上。
為了允許外部訪問 Redis,我們需要編輯 redis.conf 文件,以便設置外部訪問許可權。這包括調整監聽 IP 地址和埠,以允許從網路中訪問 Redis 服務。
啟動 Redis 服務時,我們有多種方式,如前台或後台啟動。後台啟動服務時,我們還需要指定配置文件,確保服務的正確初始化與運行。
外部 IP 地址訪問 Redis 需要通過命令行操作,如通過 ip a 命令查看網路介面,然後使用 redis-cli 命令連接到特定的 Redis 實例,執行相應的操作,例如查看埠號、執行數據存儲與檢索操作。
關閉 Redis 服務同樣有多種方式,如前台或後台關閉,甚至可以通過系統命令來實現。正常關機時,Redis 會自動啟動,確保服務的連續性。
為了實現高可用性,我們需要安裝並配置 Keepalived。這涉及安裝必要的編譯工具與庫文件、下載並解壓 Keepalived 安裝包、執行編譯與安裝命令。配置文件 keepalived.conf 的調整是關鍵,我們需要創建與 Redis 集成的腳本來實現主從切換、狀態監控與故障轉移。
在配置 Keepalived 時,需要為每個 Redis 實例創建相應的腳本,如 redis_check.sh、redis_master.sh、redis_backup.sh、redis_fault.sh 和 redis_stop.sh,這些腳本負責監控 Redis 狀態、執行主從切換操作、處理故障轉移、檢測故障以及停止服務。
確保所有腳本可執行後,我們啟動與關閉 Keepalived 服務。在啟動 Keepalived 之前,確保 Redis 服務已經啟動,以避免 Keepalived 直接停止 Redis 服務,導致主節點切換到從節點時可能出現的問題。
設置 Keepalived 為開機自啟動,我們需要復制與修改相關腳本,確保其能夠與系統服務集成。這包括在特定目錄下創建與配置 Keepalived 相關的腳本,並為這些服務添加可執行許可權與開機自啟動選項。
測試 Keepalived 與 Redis 集群的高可用性,我們驗證虛擬 IP 地址能在主從節點之間切換,檢查 Redis 集群狀態是否能正常切換,以及在主節點宕機時數據的完整性和一致性。測試包括在主從節點上執行數據操作,驗證數據同步與故障轉移機制的正確性。
通過以上步驟,我們實現了 Redis 集群與 Keepalived 的集成,確保了系統的高可用性與數據一致性,為應用程序提供了穩定與可靠的 Redis 服務。