Bootstrap

基于HDFS的Alluxio分布式缓存部署

引言:Alluxio是一个面向基于云的数据分析和人工智能的开源的数据编排技术。Alluxio为数据驱动型应用和存储系统构建了桥梁,将数据从存储层移动到距离数据驱动型应用更近的位置,从而能够更容易被访问, 同时使得应用程序能够通过一个公共接口连接到许多存储系统。本文的目的在于基于HDFS分布式文件系统,部署Alluxio分布式缓存集群。

基于HDFS的Alluxio分布式缓存部署

使用单个Master运行Alluxio

在集群上部署Alluxio最简单的方法是使用单个master。 但是,这个单个master在Alluxio集群中存在单点故障(SPOF):如果该机器或进程不可用,整个集群将不可用。 建议在生产环境中使用具有高可用性的模式来运行Alluxio masters。

先决条件

  • 要部署Alluxio群集,首先下载 预编译的Alluxio二进制文件,之后上传到linux节点,使用以下命令在主节点解压缩包,并修改相应的配置文件,之后打包发到从节点解压。

    #笔者的压缩包路径:~/pkg/alluxio-2.8.1-bin.tar.gz
    #笔者的解压目标路径:~/bigdata/
    #1.解压压缩包到目标路径
    tar -zvxf ~/pkg/alluxio-2.8.1-bin.tar.gz -C ~/bigdata/
    #2.重命名
    mv ~/bigdata/alluxio* ~/bigdata/alluxio
    
  • 设置不需要密码的从master节点到worker节点的SSH登录。 可以将主机的公共SSH密钥添加到〜/.ssh/authorized_keys中。

  • 开放所有节点之间的TCP通信。 对于基本功能,确保所有节点上RPC端口都是打开的(默认值:19998)。

  • 仅在期望Alluxio自动在worker节点上上安装RAMFS时才需要给将运行Allluxio的OS用户授予sudo特权。若是因为安全性原因,不方便给用户授予sudo权限,则需要root用户先在/mnt/ramdisk挂载RAMFS。

配置环境变量

编辑~/.bashrc文件,添加如下内容:

export ALLUXIO_HOME=/home/ZSX/bigdata/alluxio #读者根据自己的路径更换取值
export PATH=$PATH:$ALLUXIO_HOME/bin

之后执行如下命令更新环境变量:

source ~/.bashrc

修改配置文件(重点)

在主节点上,参照模板conf/alluxio-site.properties.template创建配置文件。

cd $ALLUXIO_HOME
cp conf/alluxio-site.properties.template conf/alluxio-site.properties

在配置文件(conf/alluxio-site.properties)中按如下配置:

alluxio.master.hostname=westgis117
alluxio.master.mount.table.root.ufs=hdfs://westgis117:9000/alluxio/data
alluxio.underfs.hdfs.configuration=/home/ZSX/bigdata/hadoop/etc/hadoop/core-site.xml:/home/ZSX/bigdata/hadoop/etc/hadoop/hdfs-site.xml
  • 第一个属性alluxio.master.hostname设置单个master节点的主机名
  • 第二个属性alluxio.master.mount.table.root.ufs设置为挂载到Alluxio根目录的底层存储URI,一定保证master节点和所有worker节点都可以访问此共享存储。
  • 第三个属性alluxio.underfs.hdfs.configuration用于指定HDFS的配置文件hdfs-site.xmlcore-site.xml的路径。

接下来,将主节点的IP地址或主机名添加到conf/masters文件中,将所有work节点的IP地址或主机名添加到conf/workers文件中,之后打包文件ALLUXIO_HOME对应的文件夹分发到从节点上之后解压。

打包配置好的Alluxio文件夹并分发

#1.进入Alluxio根目录的上级目录
cd $ALLUXIO_HOME/..
#2.打包Alluxio文件夹
tar -zcf alluxio.tar.gz alluxio
#3.分发到从节点并解压
for i in westgis{117..121}
do
  #3-1.分发压缩包到每一个节点上的用户根目录
  scp alluxio.tar.gz $i:~
  #3-2.解压压缩包到和主节点路径一致的目录下,并删除安装包
  ssh $i "tar -zxvf ~/alluxio.tar.gz -C ~/bigdata/;rm ~/alluxio.tar.gz"
  #3-3.在从节点追加环境变量
  ssh $i "echo 'export ALLUXIO_HOME=/home/ZSX/bigdata/alluxio' >> ~/.bashrc"
  ssh $i "echo 'export PATH=$PATH:$ALLUXIO_HOME/bin' >> ~/.bashrc"
  #3-4.刷新从节点的环境变量
  ssh $i "source ~/.bashrc"
done

基于HDFS运行Alluxio

在开始本步骤之前,请确保HDFS集群已经启动运行并且映射到Alluxio根目录下的HDFS目录已经存在,笔者设置的路径为hdfs://westgis117:9000/alluxio/data,还未在HDFS上进行创建,因此需要执行如下命令:

#1.启动HDFS
start-dfs.sh
#2.创建alluxio配置文件中指定的根目录
hdfs dfs -mkdir -p /alluxio/data #读者根据自己的设置修改

创建成功之后,我们还需要挂载ramfs,但是该命令仅root用户可执行

for i in westgis{117..121}
do
  ssh $i "mount -t tmpfs -o size=12G tmpfs /mnt/ramdisk"
  #ssh $i "umount /mnt/ramdisk" #取消挂载
done

启动Alluxio,观察一切是否正常运行,在主节点上执行如下命令:

#1.格式化Alluxio的Master
alluxio formatMaster
#2.格式化Alluxio的Workers
alluxio formatWorker
#3.启动Alluxio集群
alluxio-start.sh all 
  1. 如果命令执行成功,则说明之前环境变量配置的步骤配置成功,执行成功的提示如下:

    --- [ OK ] The job_master service @ westgis117 is in a healthy state.
    --- [ OK ] The worker service @ westgis118 is in a healthy state.
    --- [ OK ] The worker service @ westgis121 is in a healthy state.
    --- [ OK ] The worker service @ westgis120 is in a healthy state.
    --- [ OK ] The worker service @ westgis119 is in a healthy state.
    --- [ OK ] The job_worker service @ westgis121 is in a healthy state.
    --- [ OK ] The job_worker service @ westgis118 is in a healthy state.
    --- [ OK ] The job_worker service @ westgis119 is in a healthy state.
    --- [ OK ] The job_worker service @ westgis120 is in a healthy state.
    --- [ OK ] The proxy service @ westgis118 is in a healthy state.
    --- [ OK ] The proxy service @ westgis120 is in a healthy state.
    --- [ OK ] The proxy service @ westgis117 is in a healthy state.
    --- [ OK ] The proxy service @ westgis121 is in a healthy state.
    --- [ OK ] The proxy service @ westgis119 is in a healthy state.
    

    在主节点上应有AlluxioJobMasterAlluxioMasterAlluxioProxy三个守护进程被成功启动,从节点上应有AlluxioJobWorkerAlluxioworkerAlluxioProxy三个守护进程被成功启动。

    从上面的提示中我们可以看到每一个守护进程的监控状况都是健康的,也可以使用jps命令在每个节点上查看是否都有对应的守护进程,命令如下:

    for i in westgis{117..121}
    do
      ssh $i  "hostname;jps;echo"
    done
    

    成功时得到的运行结果类似:

     westgis117
     4081 NameNode
     27857 AlluxioJobMaster
     29122 AlluxioProxy
     4375 SecondaryNameNode
     4023 Jps
     27194 AlluxioMaster
    
     westgis118
     26482 AlluxioProxy
     25513 AlluxioJobWorker
     24942 AlluxioWorker
     10687 DataNode
     30655 Jps
    
     westgis119
     20226 Jps
     16506 AlluxioWorker
     17227 DataNode
     17549 AlluxioProxy
     16862 AlluxioJobWorker
    
     westgis120
     31857 AlluxioProxy
     30790 AlluxioJobWorker
     30216 AlluxioWorker
     3176 Jps
     30030 DataNode
    
     westgis121
     7616 Jps
     4628 AlluxioProxy
     3594 AlluxioWorker
     4140 DataNode
     3949 AlluxioJobWorker
    
  2. 如果命令执行失败报错bash: alluxio: command not found...,则说明环境变量配置失败,需要重新配置。

  3. 如果命令执行失败报其它错误,大概率是配置文件出问题了。如果配置文件出现问题,则根据错误提示重新修改配置文件,并重新分发到从节点上的对应路径,再在所有节点上删除$ALLUXIO_HOME/logs/下的所有文件,并重新初始化。

    假设读者更新好了配置文件则可以执行如下命令:

    #1.分发配置文件
    cd $ALLUXIO_HOME
    alluxio copyDir conf
    #2.删除之前Alluxio遗留的日志文件
    for i in westgis{117..121}
    do
      ssh $i  "rm -rf $ALLUXIO_HOME/logs/*"
    done
    #3.重新格式化
    alluxio formatMaster
    alluxio formatWorker
    #4.重新启动Alluxio集群
    alluxio-start.sh all 
    

查看WebUI

在浏览器的网址栏输入:主节点IP地址:19999,进入Alluxio的监控界面,内容如下图所示:

webUI

可以发现Alluxio的WebUI的导航栏有多个标签,读者可以一一点开观看:

  • In-Alluxio data导航到的网页用于显示当前在Alluxio缓存空间内的数据。

  • logs导航到的网页用于显示当前在Alluxio的运行日志。

  • Configuration导航到的网页用于显示当前Alluxio的配置信息。

  • wokers导航到的网页用于显示当前Alluxio从节点的具体信息,如下图:
    webUI_workers

  • Metrics导航到的网页包含集群运行性能的多个指标评分,属于进阶内容,也是使用Alluxio最应该掌握的内容,但是因为内容较多,故不展开,读者可自行了解。

运行测试程序

Alluxio带有一个简单的程序可以在Alluxio中读写示例文件,使用以下命令运行示例程序:

alluxio runTests

运行结束后在WebUI的In-Alluxio data页面可以看到如下内容:

result_runTests

Alluxio Shell的简单使用

如果读者有HDFS的使用基础,则很快就可以上手Alluxio Shell,因为后者的命令格式与前者类似。

  1. 如果要查看Alluxio文件系统操作命令列表,可以运行:

    alluxio fs
    
  2. 如果想要查看Alluxio系统的文件,可以使用如下命令:

    alluxio fs ls 目标路径
    

    值得一提的是,Alluxio文件系统的根目录/就是在文件alluxio-site.properties中指定的alluxio.master.mount.table.root.ufs的取值,在笔者的教程案例中该配置属性的取值为hdfs://westgis117:9000/alluxio/data

    因此,一定程度上,alluxio fs ls /等价于hdfs dfs -ls /alluxio/data

    [ZSX@westgis117 ~]$ alluxio fs ls /
    drwxr-xr-x  ZSX            ZSX                         24       PERSISTED 10-13-2022 09:59:19:612  DIR /default_tests_files
    [ZSX@westgis117 ~]$ hdfs dfs -ls /alluxio/data/
    Found 2 items
    drwxr-xr-x   - ZSX ZSX          0 2022-10-13 09:59 /alluxio/data/.alluxio_ufs_persistence
    drwxr-xr-x   - ZSX ZSX          0 2022-10-13 09:59 /alluxio/data/default_tests_files
    

    可以发现执行结果中都包含data/default_tests_file文件目录,而后者比前者的返回结果多了一个.alluxio_ufs_persistence,该文件是关于alluxio文件系统持久化策略的配置文件,在Alluxio文件系统下是隐含的。

  3. 如果想将本地文件拷贝到Alluxio中,可以使用copyFromLocal命令,例如:

    #命令格式:alluxio fs copyFromLocal 本地文件 Alluxio系统上的目标路径
    alluxio fs copyFromLocal $ALLUXIO_HOME/LICENSE /LICENSE
    

    此时再次列出 Alluxio 里的文件,可以看到刚刚拷贝的LICENSE文件

    [ZSX@westgis117 ~]$ alluxio fs ls /
    -rw-r--r--  ZSX            ZSX                      27040       PERSISTED 10-13-2022 10:48:36:805 100% /LICENSE
    drwxr-xr-x  ZSX            ZSX                         24       PERSISTED 10-13-2022 09:59:19:612  DIR /default_tests_files
    
  4. 如果要打印Alluxio文件系统中文件的内容,可以使用cat命令:

    #命令格式:alluxio fs cat 目标文件
    alluxio fs cat /LICENSE
    

    输出结果如下:

    Apache License
                               Version 2.0, January 2004
                            http://www.apache.org/licenses/
    
       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    ……
    ……(内容过长,故省略)
    
  5. 删除Alluxio文件系统中的文件:

    #命令格式:alluxio fs rm 目标文件
    alluxio fs rm /LICENSE
    
  6. 关闭Alluxio文件系统:

    alluxio-stop.sh all 
    

参考博客及文档

Alluxio官方文档:

  1. 本地运行Alluxio - Alluxio v2.0 Documentation

  2. 在集群上独立运行Alluxio - Alluxio v2.0 Documentation

  3. 在HDFS上配置Alluxio - Alluxio v2.0 Documentation

  4. 快速上手指南 - Alluxio v2.0 Documentation

其它博主博客:

  1. Alluxio部署实践_约翰-117的博客-CSDN博客_alluxio安装部署
;