快速上手指南 - Alluxio v2.6.2 (stable) Documentation
开发指南 - Alluxio v2.6.2 (stable) Documentation
部署 Alluxio - 在集群上独立运行Alluxio - 《Alluxio 社区版 v2.0官方文档》 - 书栈网 · BookStack
首先要确定部署的环境,可以选择部署在本地、集群、AWS等。即要选择Alluxio的底层存储,是使用本地的文件系统、HDFS、S3等。
提示:可以从 Alluxio 下载页面获取已发布版本。 每个Alluxio发布版本都提供了与不同 Hadoop 版本兼容的预编译好的二进制文件。 从 Master 分支构建 Alluxio页面解释了如何从源代码编译生成Alluxio项目。
下面是在本地或集群模式下运行Alluxio的基本要求:
下面是运行Alluxio Master进程的集群节点所需要的配置。
注意这些是运行最低要求。 大规模高负载下运行Alluxio相应系统要求会随之增加。
http://:19999
下面是运行Alluxio Worker进程的集群节点所需要的配置。
http://:30000
http://:30003
需要为Alluxio Workers配置作为缓存的存储空间。 默认情况下Alluxio为Worker提供一个RAMFS,但是可以对其进行修改以使用其他存储卷的。 通过在alluxio.worker.tieredstore.level%d.dirs.path
中提供其他目录,用户可以指定Alluxio使用不同于默认配置的存储介质和目录。 对于希望一开始使用默认配值的用户,使用任何sudo权限帐户运行命令./bin/alluxio-mount.sh SudoMount worker
。 注意上述命令应在完成alluxio-site.properties
文件中设置alluxio.worker.ramdisk.size
并将所有workers添加到conf/workers
文件后运行。
$ ./bin/alluxio-mount.sh SudoMount workers
Proxy进程提供一个基于REST的客户端,需要:
下面是Alluxio针对运行fuse进程节点要求
注意这些是运行Alluxio软件最低要求。 大规模负载下运行Alluxio Fuse会增加系统要求。
Alluxio还可以将日志汇总到一个远程服务器中以便统一查看。 以下是Logging Server的端口和资源要求。
下面是Alluxio针对运行Remote Logging Server要求:
用本地的文件系统做底层存储。
下载安装包:Try Alluxio in the cloud or download/install where you want it
$ tar -xzf alluxio-bin.tar.gz
$ cd alluxio-2.6.2
#根据模板文件创建conf/alluxio-site.properties配置文件。
$ cp conf/alluxio-site.properties.template conf/alluxio-site.properties
#在conf/alluxio-site.properties文件中将
alluxio.master.hostname=localhost
alluxio.worker.ramdisk.size=1GB #此内存不能超过系统的实际最大内存
$ cp alluxio-env.sh.template alluxio-env.sh
#指定java路径
JAVA_HOME=/usr/java/jdk1.8.0_301
$ sudo ./bin/alluxio-mount.sh SudoMount
注意:这个步骤只有在第一次运行Alluxio系统时才需要执行。 如果用户在已部署好的Alluxio集群上运行格式化命令, 当前服务器上之前保存的Alluxio文件系统的所有数据和元数据都会被清除。 但是,底层数据不会改变。
$ sudo ./bin/alluxio format
$ ./alluxio validateEnv local #检查运行环境
简单运行如下的命令来启动Alluxio文件系统。
# 如果您尚未挂载ramdisk或要重新挂载(如为了改变ramdisk大小)
$ sudo ./bin/alluxio-start.sh local SudoMount
# 或者,如果已经安装了ramdisk
$ sudo ./bin/alluxio-start.sh local
[root@clu02 alluxio-2.6.0]# jps
5059 AlluxioProxy
5688 Jps
4377 AlluxioJobMaster
4268 AlluxioMaster
5053 AlluxioWorker
5055 AlluxioJobWorker
为了确认Alluxio处于运行状态,可以访问 http://localhost:19999 查看 Alluxio master 的运行状态,访问 http://localhost:30000 查看 Alluxio worker 的运行状态。
提示:若外部通过IP访问,访问失败可能是防火墙的问题
运行一个更全面的系统完整性检查:
$ ./bin/alluxio runTests
可以在任意时刻执行以下命令以关闭Alluxio:
$ ./bin/alluxio-stop.sh local
Alluxio shell 包含多种与 Alluxio 交互的命令行操作。如果要查看文件系统操作命令列表,运行:
$ ./bin/alluxio fs
你可以通过ls
命令列出 Alluxio 里的文件。比如列出根目录下所有文件:
$ ./bin/alluxio fs ls /
目前 Alluxio 里没有文件。copyFromLocal
命令可以拷贝本地文件到 Alluxio 中。
$ ./bin/alluxio fs copyFromLocal LICENSE /LICENSE
Copied LICENSE to /LICENSE
再次列出 Alluxio 里的文件,可以看到刚刚拷贝的LICENSE
文件:
$ ./bin/alluxio fs ls /
-rw-r--r-- staff staff 26847 NOT_PERSISTED 01-09-2018 15:24:37:088 100% /LICENSE
输出显示 LICENSE 文件在 Alluxio 中,也包含一些其他的有用信息,比如文件的大小、创建的日期、文件的所有者和组以及 Alluxio 中这个文件的缓存占比。
cat
命令可以打印文件的内容。
$ ./bin/alluxio fs cat /LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
...
默认设置中,Alluxio 使用本地文件系统作为底层文件系统 (UFS)。默认的 UFS 路径是./underFSStorage
。我们可以查看 UFS 中的内容:
$ ls ./underFSStorage/
然而,这个目录不存在!这是由于 Alluxio 默认只写入数据到 Alluxio 存储空间,而不会写入 UFS。
但是,我们可以告诉 Alluxio 将文件从 Alluxio 空间持久化到 UFS。shell 命令persist
可以做到。
$ ./bin/alluxio fs persist /LICENSE
persisted file /LICENSE with size 26847
如果我们现在再次检查 UFS,文件就会出现。
$ ls ./underFSStorage
LICENSE
为了配置 Alluxio 与 Amazon S3 交互,请在
conf/alluxio-site.properties
文件中向 Alluxio 配置添加 AWS 访问信息。以下命令将更新该配置。配置修改后,同步到各个节点,再重新启动
$ echo "aws.accessKeyId=
" >> conf/alluxio-site.properties $ echo "aws.secretKey= " >> conf/alluxio-site.properties 你必须将**
替换成你的 AWS access key id,将
**替换成你的 AWS secret access key。
Alluxio 通过统一命名空间的特性统一了对存储系统的访问。你可以阅读统一命名空间的博客和统一命名空间文档获取更详细的解释。
这个特性允许用户挂载不同的存储系统到 Alluxio 命名空间中并且通过 Alluxio 命名空间无缝地跨存储系统访问文件。
首先,我们在 Alluxio 中创建一个目录作为挂载点。
(base) [root@clu00 alluxio-2.6.0]# alluxio fs mkdir /mnt
Successfully created directory /mnt
接着,我们挂载一个已有的 S3 bucket 到 Alluxio。本指南使用alluxio-quick-start
S3 bucket。
$ ./bin/alluxio fs mount --readonly alluxio://localhost:19998/mnt/s3 s3://alluxio-quick-start/data
Mounted s3://alluxio-quick-start/data at alluxio://localhost:19998/mnt/s3
若前面未配置aws访问秘钥,可以在挂载时指定:
./bin/alluxio fs mount --option aws.accessKeyId=<accessKeyId> --option aws.secretKey=<secretKey> /mnt/s3 s3://data-bucket/
实例:
(base) [root@clu00 alluxio-2.6.0]# alluxio fs mount --option aws.accessKeyId=******* --option aws.secretKey=*************** /mnt/s3 s3://alluxio-quick-start/data
Mounted s3://alluxio-quick-start/data at /mnt/s3
(base) [root@clu00 alluxio-2.6.0]# alluxio fs ls /mnt/s3
-r-x------ song_jie0109 song_jie0109 10077271 PERSISTED 06-21-2016 02:03:30:000 0% /mnt/s3/sample_tweets_10m.csv
-r-x------ song_jie0109 song_jie0109 955610 PERSISTED 06-21-2016 02:03:22:000 0% /mnt/s3/sample_tweets_1m.csv
-r-x------ song_jie0109 song_jie0109 89964 PERSISTED 06-21-2016 02:03:45:000 0% /mnt/s3/sample_tweets_100k.csv
-r-x------ song_jie0109 song_jie0109 157046046 PERSISTED 06-21-2016 02:03:45:000 0% /mnt/s3/sample_tweets_150m.csv
我们可以通过 Alluxio 命名空间列出 S3 中的文件。使用熟悉的ls
命令列出 S3 挂载目录下的文件。
$ ./bin/alluxio fs ls /mnt/s3
-r-x------ staff staff 955610 PERSISTED 01-09-2018 16:35:00:882 0% /mnt/s3/sample_tweets_1m.csv
-r-x------ staff staff 10077271 PERSISTED 01-09-2018 16:35:00:910 0% /mnt/s3/sample_tweets_10m.csv
-r-x------ staff staff 89964 PERSISTED 01-09-2018 16:35:00:972 0% /mnt/s3/sample_tweets_100k.csv
-r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv
新挂载的文件和目录也可以在 Alluxio web UI 中看到。
通过 Alluxio 统一命名空间,你可以无缝地从不同存储系统中交互数据。举个例子,使用ls -R
命令,你可以递归地列举出一个目录下的所有文件。
$ ./bin/alluxio fs ls -R /
-rw-r--r-- staff staff 26847 PERSISTED 01-09-2018 15:24:37:088 100% /LICENSE
drwxr-xr-x staff staff 1 PERSISTED 01-09-2018 16:05:59:547 DIR /mnt
dr-x------ staff staff 4 PERSISTED 01-09-2018 16:34:55:362 DIR /mnt/s3
-r-x------ staff staff 955610 PERSISTED 01-09-2018 16:35:00:882 0% /mnt/s3/sample_tweets_1m.csv
-r-x------ staff staff 10077271 PERSISTED 01-09-2018 16:35:00:910 0% /mnt/s3/sample_tweets_10m.csv
-r-x------ staff staff 89964 PERSISTED 01-09-2018 16:35:00:972 0% /mnt/s3/sample_tweets_100k.csv
-r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv
输出显示了 Alluxio 文件系统根目录下来源于挂载存储系统的所有文件。/LICENSE
文件在本地文件系统中,/mnt/s3/
目录在 S3 中。
由于 Alluxio 利用内存存储数据,它可以加速数据的访问。首先,我们看一看之前从 S3 挂载到 Alluxio 中的一个文件的状态:
$ ./bin/alluxio fs ls /mnt/s3/sample_tweets_150m.csv
-r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv
输出显示了文件 Not In Memory(不在内存中)。该文件是推特的样本。我们统计一下有多少推文提到了单词“kitten”,并计算该操作的耗时。
$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c kitten
889
real 0m22.857s
user 0m7.557s
sys 0m1.181s
取决于你的网络连接状况,该操作可能会超过20秒。如果读取文件时间过长,你可以选择一个小一点的数据集。该目录下的其他文件是该文件的更小子集。 通过将数据放在内存中,Alluxio 可以提高访问该数据的速度。
在通过cat
命令获取文件后,你可以用ls
命令查看文件的状态:
$ ./bin/alluxio fs ls /mnt/s3/sample_tweets_150m.csv
-r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 100% /mnt/s3/sample_tweets_150m.csv
输出显示文件已经 100% 被加载到 Alluxio 中,既然如此,那么再次访问该文件的速度应该会快很多。
现在让我们来统计一下拥有“puppy”这个单词的推文数目。
$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c puppy
1553
real 0m1.917s
user 0m2.306s
sys 0m0.243s
如你所见,因为数据已经存放到了 Alluxio 内存中了,后续读这个相同文件的速度非常快。
现在让我们来统计一下有多少推文包含“bunny”这个词。
$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c bunny
907
real 0m1.983s
user 0m2.362s
sys 0m0.240s
恭喜!你在本地安装了 Alluxio 并且通过 Alluxio 加速了数据访问!
你可以使用如下命令关闭 Alluxio:
$ ./bin/alluxio-stop.sh local
Deploy an Alluxio Cluster with a Single Master - Alluxio v2.6.0 Documentation
最简单的部署Alluxio在集群上的方式,易出现单点故障。
(1)各个节点之间可以免密访问
(2)确保所有节点 RPC 端口开放(默认:19998)
(3)为操作用户赋予sudo的权限,挂载RAMFS时需要。
(base) [root@clu00 ~]# tar -xvf alluxio-2.6.0-bin.tar.gz
(base) [root@clu00 ~]# cd alluxio-2.6.0/
(base) [root@clu00 alluxio-2.6.0]# cd conf/
(base) [root@clu00 conf]# cp alluxio-site.properties.template alluxio-site.properties
(base) [root@clu00 conf]# vim alluxio-site.properties
例如修改内容如下:
alluxio.master.hostname=clu00
alluxio.master.mount.table.root.ufs=hdfs://clu00:9090/alluxio
i)hostname指集群的主节点,可以使用IP,也可以使用域名(要求子节点都可以访问到)
ii) alluxio.master.mount.table.root.ufs指定Alluxio挂载存储的根URL
For example, when HDFS is used as the under storage system, the value of this property can be set to alluxio.master.mount.table.root.ufs=hdfs://1.2.3.4:9000/alluxio/root/
When Amazon S3 is used as the under storage system, the value can be set to alluxio.master.mount.table.root.ufs=s3://bucket/dir/
提示:master配置属性alluxio.master.mount.table.root.ufs
指定的目录挂载到Alluxio命名空间根目录(指Alluxio的基础存储空间),该目录代表Alluxio 的”primary storage”。在此基础上,用户可以通过挂载API添加和删除(指挂载多个底层存储)。
(base) [root@clu00 conf]# cp alluxio-env.sh.template alluxio-env.sh
(base) [root@clu00 conf]# vim alluxio-env.sh
JAVA_HOME=/usr/java/jdk1.8.0_301
(base) [root@clu00 conf]# vim masters
clu00
(base) [root@clu00 conf]# vim workers
clu01
clu02
以上是启动所需的最小配置,其他详细配置如下configuration properties reference
(base) [root@clu00 bin]# ./alluxio copyDir /root/alluxio-2.6.0
RSYNC'ing /root/alluxio-2.6.0 to masters...
clu00
RSYNC'ing /root/alluxio-2.6.0 to workers...
clu01
clu02
第一次启动前,主节点要格式化Alluxio,会删除所有元数据信息,但不会影响底层存储的数据。
(base) [root@clu00 alluxio-2.6.0]# ./bin/alluxio formatMasters
提示:若出现错误,查看日志信息对应修改,JAVA环境问题则需要env.sh中指定
(base) [root@clu00 alluxio-2.6.0]# ./bin/alluxio-start.sh all SudoMount
# all 将启动master节点和所有workers节点
# SudoMount 参数将帮助workers节点挂载到RamFS上,仅仅初次启动需要挂载
......
All tasks finished
-----------------------------------------
Starting to monitor all remote services.
-----------------------------------------
--- [ OK ] The master service @ clu00 is in a healthy state.
--- [ OK ] The job_master service @ clu00 is in a healthy state.
--- [ OK ] The worker service @ clu00 is in a healthy state.
--- [ OK ] The worker service @ clu02 is in a healthy state.
--- [ OK ] The worker service @ clu01 is in a healthy state.
--- [ OK ] The job_worker service @ clu02 is in a healthy state.
--- [ OK ] The job_worker service @ clu01 is in a healthy state.
--- [ OK ] The job_worker service @ clu00 is in a healthy state.
--- [ OK ] The proxy service @ clu01 is in a healthy state.
--- [ OK ] The proxy service @ clu02 is in a healthy state.
--- [ OK ] The proxy service @ clu00 is in a healthy state.
#启动
./bin/alluxio-start.sh all
#关闭
./bin/alluxio-stop.sh all
$ ./bin/alluxio-start.sh masters # starts all masters in conf/masters
$ ./bin/alluxio-start.sh workers # starts all workers in conf/workers
$ ./bin/alluxio-start.sh master # starts the local master
$ ./bin/alluxio-start.sh worker # starts the local worker
网页访问visit http://
查看master节点
网页访问visit http://
查看worker节点
#Master上能看到AlluxioMaster、AlluxioJobMaster、AlluxioProxy
(base) [root@clu00 alluxio-2.6.0]# jps
26578 AlluxioProxy
27190 Jps
15670 NameNode
25515 AlluxioMaster
26014 AlluxioJobMaster
#Worker上能看到AlluxioWorker、AlluxioJobWorker、AlluxioProxy
[root@clu02 ~]# jps
22657 DataNode
25250 AlluxioWorker
25477 AlluxioJobWorker
26151 Jps
25759 AlluxioProxy
动态添加worker到Alluxio集群就像通过适当配置启动新Alluxio worker进程一样简单。 在大多数情况下,新worker配置应与所有其他worker配置相同。 在新worker上运行以下命令,以将其添加到集群。
$ ./bin/alluxio-start.sh worker SudoMount # 启动本地 worker
一旦worker启动,它将在Alluxio master上注册,并成为Alluxio集群的一部分。
减少worker只需要简单停止一个worker进程。
$ ./bin/alluxio-stop.sh worker # 停止本地 worker
一旦worker被停止,master将在预定的超时值(通过master参数alluxio.master.worker.timeout
配置)后将此worker标记为缺失。 主机视worker为“丢失”,并且不再将其包括在集群中。
实际步骤:
1、修改workers文件,添加新服务器
2、scp alluxio目录 到新的服务器节点
3、在新服务节点手动挂载 sudo ./bin/alluxio-mount.sh SudoMount
4、master节点统一启动
1、创建目录
mkdir /mnt/alluxio_data
2、对于与启动Alluxio服务的用户组同组用户应给予770权限。
sudo chmod 770 alluxio_data
3、修改配置文件
alluxio.worker.tieredstore.levels=2
alluxio.worker.tieredstore.level0.alias=MEM
alluxio.worker.tieredstore.level0.dirs.path=/mnt/ramdisk
alluxio.worker.tieredstore.level0.dirs.mediumtype=MEM
alluxio.worker.tieredstore.level0.dirs.quota=1GB
alluxio.worker.tieredstore.level1.alias=HDD
alluxio.worker.tieredstore.level1.dirs.path=/mnt/alluxio_data
alluxio.worker.tieredstore.level1.dirs.mediumtype=HDD
alluxio.worker.tieredstore.level1.dirs.quota=50GB