准備工作
為了運行Alluxio集群在多個機器上,必須部署Alluxio服務到這些機器上。可以下載伴隨特定Hadoop版本的二進制AlLxio包,也可以從Alluxio源碼中編譯。
當從源碼中編譯時,Alluxio默認是伴隨着Apache HDFS的2.2.0版本編譯的。為了編譯其他的Hadoop版本,需要配置正確的Hadoop選項,在Alluxio安裝目錄下執行一下命令
mvn install -P<YOUR_HADOOP_PROFILE> -D<HADOOP_VERSION> -DskipTests
Alluxio提供預定義的構建配置包含hadoop-1,hadoo-2(默認開啟),hadoop-3分別對應Hadoop的1.x,2.x,3.x版本,如果你想構建Alluxio伴隨着特定的Hadoop版本,你可以在命令中配置版本,例如:
mvn install -Phadoop-2 -Dhadoop.version=2.7.1 -DskipTests
mvn install -Phadoop-3 -Dhadoop.version=3.0.0 -DskipTests
如果構建成功,應該能夠在${ALLUXIO_HOME}/assembly/server/target目錄中看到alluxio-assembly-server-1.8.1-jar-with-dependencies.jar。
基本安裝
為了配置Alluxio使用HDFS作為底層的存儲,你需要修改conf/alluxio-site.properties。如果文件不存在,從模板中創建這個配置文件
cp conf/alluxio-site.properties.template conf/alluxio-site.properties
編輯conf/alluxio-site.properties,設置底層的存儲地址為HDFS namenode地址和你想要掛在到Alluxio的HDFS目錄,例如,如果你想要映射HDFS根目錄到Alluxio中,可以設置存儲地址為hdfs://node-master:9000;如果你僅僅想掛載HDFS的/alluxio/data目錄到Alluxio,可以設置存儲地址為hdfs://node-master:9000/alluxio/data
運行伴隨着HDFS的本地Alluxio
首先確保你的HDFS集群正在運行,映射到Alluxio的目錄存在,開啟Alluxio服務
bin/alluxio format
bin/alluxio-start.sh local
如果你的ramdisk還沒有掛載,可能是因為你是第一次運行Alluxio,可能需要添加SudoMount選項。
bin/alluxio-start.sh local SudoMount
將會在本地開啟一個Alluxio master和一個Alluxio worker。你可以通過http://localhost:19999 進行訪問
一定要在alluxio-site.properties文件中解開alluxio.master.hostname的注釋,要不然啟動不了Alluxio worker
運行一個簡單的例子程序
bin/alluxio runTests
如果伴隨着權限錯誤的測試失敗,確保當前用戶有掛載到Alluxio的HDFS目錄的讀寫權限,默認登錄用戶是當前用戶,為了修改用戶,可以在conf/alluxio-site.properties文件中設置alluxio.security.login.username的值。
當運行例子成功之后,你可以訪問http://localhost:50070 來驗證由Alluxio創建的文件和目錄,在這個測試中,將會看到/default_tests_files/BASIC_CACHE_THROUGH的文件。
關閉Alluxio
bin/alluxio-stop.sh local
高級的設置
指定HDFS配置文件位置
當HDFS沒有默認的配置,你需要配置Alluxio服務能夠訪問正確的HDFS配置文件,只要這個被設置,使用Alluxio客戶端的應用不需要進行特定的配置了。
有兩種方法可以實現:
- 復制或者做象征性鏈接從Hadoop安裝目錄中的hdfs-site.xml,core-site.xml到${ALLUXIO_HOME}/conf,確保這個設置是在所有運行Alluxio服務的機器上。
- 可以在conf/alluxio-site.properties文件中設置alluxio.underfs.hdfs.configuration的值來指向hdfs-site.xml,core-site.xml。確保這個設置是在所有運行Alluxio服務的機器上。
alluxio.underfs.hdfs.configuration=/path/to/hdfs/conf/core-site.xml:/path/to/hdfs/conf/hdfs-site.xml
HDFS Namenode的高可用模式
為了配置Alluxio工作在HDFS namenodes的高可用模式下,首先指定HDFS配置文件位置。
除此之外,設置底層的存儲地址是hdfs://nameservice(nameservice是在core-site.xml中設置的HDFS服務名字)。為了掛載HDFS的子目錄到Alluxio,而不是整個HDFS根目錄,修改底層的存儲地址為:hdfs://nameservice/alluxio/data.
alluxio.master.mount.table.root.ufs=hdfs://nameservice/
用戶權限映射
Alluxio支持POSIX-like文件的用戶和權限檢測,為了確保在HDFS上目錄,文件的權限和Alluxio保持一致(例如,在Alluxio,Foo用戶創建了一個文件,那么持久化到HDFS上,擁有者也是Foo)。開啟Alluxio master和worker進程的用戶必須滿足以下條件之一
- HDFS super user: 那即是,使用開啟HDFS namenode進程的用戶來開啟Alluxio master和worker進程
- 一個HDFS superuser group的成員,編輯hdfs-site.xml文件,檢查dfs.permissions.superusergroup的值,如果這個屬性被設置(例如,hdfs),添加開啟alluxio進程的用戶到這個組(hdfs),如果這個屬性沒有設置,添加一個group到這個屬性,運行Alluxio的用戶添加到這個新增的group。
上面的用戶設置僅僅用來標識開啟Alluxio master和worker進程。只要Alluxio服務開啟,沒有必要使用這個用戶來運行Alluxio客戶端應用。
掛載特定版本的HDFS
有許多方法可以掛載特定版本的HDFS到Alluxio。在掛載特定HDFS版本之前,確保你構建了那個特定HDFS版本的客戶端,你可以在Alluxio安裝目錄中的lib下看是否存在對應的客戶端。
如果你從源碼中構建Alluxio,可以構建額外的客戶端jar包,通過在Alluxio源碼中的underfs目錄下執行mvn命令。例如執行下面的命令可以構建2.6.0版本的客戶端。
mvn -T 4C clean install -Dmaven.javadoc.skip=true -DskipTests \
-Dlicense.skip=true -Dcheckstyle.skip=true -Dfindbugs.skip=true \
-Pufs-hadoop-2 -Dufs.hadoop.version=2.6.0
使用Mount命令
當使用mount Alluxio shell命令時,通過傳遞alluxio.underfs.version參數來指定掛載的HDFS版本,如果沒有版本被設置,默認Alluxio當做HDFS2.2版本。
例如,下面的命令可以掛載兩個HDFS部署,一個是HDFS1.2,另一個是HDFS2.7.分別掛載到/mnt/hdfs12和/mnt/hdfs27下面。
./bin/alluxio fs mount \
--option alluxio.underfs.version=1.2 \
/mnt/hdfs12 hdfs://namenode1:8020/
./bin/alluxio fs mount \
--option alluxio.underfs.version=2.7 \
/mnt/hdfs27 hdfs://namenode2:8020/
使用alluxio-site.properties
當掛載Alluxio的根目錄存儲為特定的HDFS版本,可以添加下面的行到alluxio-site.properties文件
alluxio.master.mount.table.root.ufs=hdfs://namenode1:8020
alluxio.master.mount.table.root.option.alluxio.underfs.version=1.2
支持的HDFS版本號
Alluxio v1.8.1支持下面的HDFS版本作為alluxio.underfs.version參數的值
Apache Hadoop: 1.0, 1.2, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1