1. 程式人生 > >基於記憶體的分散式檔案儲存系統Alluxio

基於記憶體的分散式檔案儲存系統Alluxio

如果是隻有欄位快取的話,redis應該是夠用了。但是如果涉及到大量檔案,尤其是用hdfs作為底層儲存結構的,建議用alluxio升級一下。一方面有利於spark資源控制,另一方面也可以統一入口便於擴充套件。

1 叢集規劃

三臺伺服器hadoop-master-001、hadoop-slave-001、hadoop-slave-002,節點與名稱相同。部署spark standalone叢集、hadoop standalone叢集、alluxio叢集。

2 軟體版本

jdk-8u144
scala-2.11.8
spark-2.2.0-hadoop2.7
hadoop-2.7.3
alluxio-1.8.0

3 配置

3.1 下載並解壓

root使用者下
wget http://alluxio.org/downloads/files/1.8.0/alluxio-1.8.0-bin.tar.gz
mkdir –p /app/alluxio/
tar -zxvf alluxio-1.8.0-bin.tar.gz -C /app/alluxio/

3.2 修改配置檔案alluxio-env.sh

cd /app/alluxio/alluxio-1.8.0/ conf
cp alluxio-env.sh.template alluxio-env.sh
vim alluxio-env.sh

鍵入
export JAVA_HOME=/app/soft/jdk1.8.0_144
export ALLUXIO_MASTER_HOSTNAME=hadoop-master-001
export ALLUXIO_WORKER_MEMORY_SIZE=4096M
export ALLUXIO_UNDERFS_ADDRESS=hdfs://hadoop-master-001:9000


其中第一行是JDK路徑、第二行是master的hostname(alluxio均是以hostname命名各伺服器)、第三行是worker的執行記憶體、第四行為hdfs的地址。

3.3 修改配置檔案alluxio-site.properties

# cp alluxio-site.properties.template alluxio-site.properties
vim alluxio-site.properties

鍵入
alluxio.master.hostname=hadoop-master-001

3.4 修改配置檔案workers

vim workers
鍵入
hadoop-slave-001
hadoop-slave-002

3.5 修改一點啟動小bug

為防止依賴庫的啟動java路徑錯誤,建議修改啟動指令碼$ALLUXIO_HOME/libexec/alluxio-config.sh,禁止which java檢索,而改為固定路徑。
#if [[ -z "$(which java)" ]]; then
# echo "Cannot find the 'java' command."
# exit 1
#fi
JAVA_HOME=/app/soft/jdk1.8.0_144
#JAVA_HOME=${JAVA_HOME:-"$(dirname $(which java))/.."}

3.6 複製到worker節點

scp -r /app/alluxio/ [email protected]:/app/
scp -r /app/alluxio/ [email protected]:/app/

3.7 格式化

../bin/alluxio format

3.8 啟動

../bin/alluxio-start.sh all SudoMount

3.9 檢查是否成功

可以從logs/資料夾下檢視記錄,或者web瀏覽:masterIP:19999/

3.10 Spark與alluxio連線

需要保證alluxio在各節點均為相同路徑後,在Spark目錄下conf/spark-default.conf中追加
#alluxio
spark.driver.extraClassPath /app/alluxio/alluxio-1.8.0/client/alluxio-1.8.0-client.jar
spark.executor.extraClassPath /app/alluxio/alluxio-1.8.0/client/alluxio-1.8.0-client.jar

修改完成後在shell進行測試
如在原hdfs存放一個圖片檔案在/image/out1/180129175801175-0.jpg路徑下。
從shell中讀取
val file = sc.textFile("alluxio://hadoop-master-001:19998/image/out1/180129175801175-0.jpg")

至於HA如何在Zookeeper中如何設定,官方文件寫的很清楚,自己拿去玩吧。