Alluxio+HDFS+MapReduce集成及測試


1、在 HDFS 上配置 Alluxio

注意:這里使用單個 master。 但是,這個單個 master 在 Alluxio 集群中存在單點故障(SPOF),即如果該機器或進程不可用,整個集群將不可用。

1.1、節點角色

采用 3 台虛擬機

主機名 IP地址 角色
node1 192.168.xxx.xx1 master
node2 192.168.xxx.xx2 worker
node3 192.168.xxx.xx3 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

完全分布式安裝

以上配置安裝參考:https://github.com/ZGG2016/knowledgesystem/blob/master/06%20Hadoop/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%EF%BC%9A%E5%AE%8C%E5%85%A8%E5%88%86%E5%B8%83.md

1.4、安裝 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
# 要先創建此目錄,不然在驗證階段會出現如下錯誤:
# Unable to access under file system path hdfs://node1:9000/alluxio/: File does not exist: hdfs://node1:9000/alluxio/.
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 界面

env01

測試:

[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 查看

env02

1.5、問題

問題一:安裝 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 則成功啟動。

1.6、添加內嵌掛載點

在 alluxio 根目錄下掛載多個存儲系統。

命令:

bin/alluxio fs mount <alluxio path> <ufs path>

例如:

# 掛載本地文件系統下的目錄:
bin/alluxio fs mount /lustre file:///mnt/lustre/alluxio

# 掛載 HDFS 下的目錄:
bin/alluxio fs mount /hdfstest  hdfs://node1:9000/in

如:

[root@node1 alluxio-2.1.0]# alluxio fs ls /
drwxr-xr-x  root           supergroup                   0       PERSISTED 06-08-2021 15:03:51:621  DIR /hdfstest
drwxr-xr-x  root           root                         2       PERSISTED 06-09-2021 11:29:07:000  DIR /lustre

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM