1、在 HDFS 上配置 Alluxio
注意:這裡使用單個 master。 但是,這個單個 master 在 Alluxio 叢集中存在單點故障(SPOF),即如果該機器或程式不可用,整個叢集將不可用。
1.1、節點角色
採用 3 臺虛擬機器
主機名 | IP地址 | 角色 |
---|---|---|
node1 | 192.168.253.131 | master |
node2 | 192.168.253.132 | worker |
node3 | 192.168.253.133 | worker |
1.2、軟體版本
軟體 | 版本 |
---|---|
JDK | jdk1.8.0_281 |
HADOOP | hadoop-2.7.3 |
ALLUXIO | alluxio-2.1.0 |
1.3、準備工作
1.3.1、設定 SSH 免密登入
三臺虛擬機器可以互相免密登入
1.3.2、安裝 JDK
1.3.3、安裝 Hadoop
完全分散式安裝
1.5、安裝 Alluxio
在 node1 上,下載、解壓、配置環境變數:
[root@node1 opt]# tar -zxvf alluxio-2.1.0-bin.tar.gz
[root@node1 opt]# ls
alluxio-2.1.0 alluxio-2.1.0-bin.tar.gz hadoop-2.7.3
[root@node1 opt]# vi /etc/profile
[root@node1 opt]# source /etc/profile
[root@node1 opt]# cat /etc/profile
# /etc/profile
...
export JAVA_HOME=/opt/jdk1.8.0_281
export HADOOP_HOME=/opt/hadoop-2.7.3
export ALLUXIO_HOME=/opt/alluxio-2.1.0
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$ALLUXIO_HOME/bin:$PATH
將 /etc/profile
檔案分發到其他三個節點,並執行 source /etc/profile
[root@node1 opt]# scp /etc/profile node2:/etc
.....
[root@node1 opt]# source /etc/profile
配置配置檔案:
[root@node1 conf]# pwd
/opt/alluxio-2.1.0/conf
[root@node1 conf]# cat alluxio-site.properties
...
alluxio.master.hostname=node1
alluxio.master.mount.table.root.ufs=hdfs://node1:9000/alluxio
[root@node1 conf]# cat masters
node1
[root@node1 conf]# cat workers
node2
node3
node4
[root@node1 conf]# cat alluxio-env.sh
export JAVA_HOME=/opt/jdk1.8.0_281
將配置檔案複製到所有其他 Alluxio 節點:
# 要在各個節點安裝RSYNC:yum -y install RSYNC
[root@node1 alluxio-2.1.0]# bin/alluxio copyDir conf/
RSYNC'ing /opt/alluxio-2.1.0/conf to masters...
node1
RSYNC'ing /opt/alluxio-2.1.0/conf to workers...
node2
node3
node4
將 Alluxio 掛載到本地磁碟
[root@node1 alluxio-2.1.0]# bin/alluxio-mount.sh Mount workers
檢查 Alluxio 執行環境
[root@node1 alluxio-2.1.0]# bin/alluxio validateEnv master
[root@node1 alluxio-2.1.0]# bin/alluxio validateEnv workers
在 node1 節點上,使用以下命令進行格式化
# 在首次啟動Alluxio之前,必須先格式化
[root@node1 alluxio-2.1.0]# bin/alluxio format
Executing the following command on all worker nodes and logging to /opt/alluxio-2.1.0/logs/task.log: /opt/alluxio-2.1.0/bin/alluxio formatWorker
Waiting for tasks to finish...
All tasks finished
Executing the following command on all master nodes and logging to /opt/alluxio-2.1.0/logs/task.log: /opt/alluxio-2.1.0/bin/alluxio formatJournal
Waiting for tasks to finish...
All tasks finished
在 node1 節點上,使用以下命令啟動 Alluxio 叢集
[root@node1 alluxio-2.1.0]# bin/alluxio-start.sh all
[root@node1 alluxio-2.1.0]# jps
1809 NameNode
2082 ResourceManager
57514 AlluxioMaster
57836 AlluxioJobMaster
59004 Jps
58317 AlluxioProxy
[root@node2 opt]# jps
30433 AlluxioWorker
1988 NodeManager
1815 DataNode
30585 AlluxioJobWorker
30762 AlluxioProxy
31165 Jps
1902 SecondaryNameNode
瀏覽器輸入 http://node1:19999/
檢視 web 介面
測試:
[root@node1 alluxio-2.1.0]# bin/alluxio fs mkdir /test
Successfully created directory /test
[root@node1 alluxio-2.1.0]# bin/alluxio fs ls /
drwxr-xr-x root root 0 NOT_PERSISTED 04-02-2021 14:20:06:985 DIR /test
# 在 Alluxio 中讀寫示例檔案
[root@node1 alluxio-2.1.0]# bin/alluxio runTests
# 掛載目錄下檢視
[root@node1 alluxio-2.1.0]# hadoop fs -ls /alluxio
Found 1 items
drwxr-xr-x - root root 0 2021-04-02 14:21 /alluxio/default_tests_files
再次在 web 檢視
1.6、問題
問題一:安裝 2.5.0 版本時,出現 No Under File System Factory found for: hdfs://node1:9000/alluxio/underFSStorage
錯誤。
問題二:執行 alluxio-start.sh all
命令重新啟動 Alluxio 後,AlluxioWorker 程式啟動失敗,出現 WARN RetryUtils - Failed to load cluster default configuration with master (attempt 16): alluxio.exception.status.UnavailableException: Failed to handshake with master node1:19998 to load cluster default configuration values: UNAVAILABLE: io exception
。執行 alluxio-start.sh all Mount
則成功啟動。
2、在 Alluxio 上執行 MapReduce
2.1、前提
- 已安裝 JDK
- 已安裝 Alluxio
2.2、配置
將 Alluxio Client 的 Jar 包包含在各個 MapReduce 節點的 classpaths 中。
[root@node1 ~]# cd /opt/alluxio-2.1.0/client/
[root@node1 client]# ls
alluxio-2.1.0-client.jar presto
[root@node1 client]# cp alluxio-2.1.0-client.jar /opt/hadoop-2.7.3/share/hadoop/mapreduce/
[root@node1 client]# scp alluxio-2.1.0-client.jar node2:/opt/hadoop-2.7.3/share/hadoop/mapreduce/
.....
在 node1 節點上,將以下兩個屬性新增到 core-site.xml 檔案中
<property>
<name>fs.alluxio.impl</name>
<value>alluxio.hadoop.FileSystem</value>
<description>The Alluxio FileSystem (Hadoop 1.x and 2.x)</description>
</property>
<property>
<name>fs.AbstractFileSystem.alluxio.impl</name>
<value>alluxio.hadoop.AlluxioFileSystem</value>
<description>The Alluxio AbstractFileSystem (Hadoop 2.x)</description>
</property>
在 node1 節點上,修改 hadoop-env.sh 檔案中的 $HADOOP_CLASSPATH
[root@node1 hadoop]# cat hadoop-env.sh
.....
export HADOOP_CLASSPATH=/opt/alluxio-2.1.0/client/alluxio-2.1.0-client.jar:${HADOOP_CLASSPATH}
.....
將上述修改的 core-site.xml 和 hadoop-env.sh 檔案分發到其他節點
[root@node1 hadoop]# scp hadoop-env.sh node2:/opt/hadoop-2.7.3/etc/hadoop/
.....
[root@node1 hadoop]# scp core-site.xml node2:/opt/hadoop-2.7.3/etc/hadoop/
.....
檢查 MapReduce 與 Alluxio 的整合
[root@node1 alluxio-2.1.0]# integration/checker/bin/alluxio-checker.sh mapreduce
.....
***** Integration test passed. *****
2.3、測試 WordCount
在 Alluxio 中加入輸入檔案,在 Alluxio 目錄中執行:
[root@node1 ~]# alluxio fs copyFromLocal wc.txt /
Copied file:///root/wc.txt to /
[root@node1 ~]# alluxio fs cat /wc.txt
aa
bb
aa
cc
[root@node1 ~]# alluxio fs ls /
-rw-r--r-- root root 12 PERSISTED 04-03-2021 21:58:56:558 100% /wc.txt
執行一個 WordCount 的 MapReduce 作業
[root@node1 ~]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount \
alluxio://node1:19998/wc.txt \
alluxio://node1:19998/wc-out
檢視結果
[root@node1 ~]# alluxio fs ls /wc-out
-rw-r--r-- root root 0 PERSISTED 04-03-2021 22:01:52:905 100% /wc-out/_SUCCESS
-rw-r--r-- root root 15 PERSISTED 04-03-2021 22:01:51:718 100% /wc-out/part-r-00000
[root@node1 ~]# alluxio fs cat /wc-out/part-r-00000
aa 2
bb 1
cc 1