Alluxio與CDH組件集成
一、運行 CDH MapReduce
1. 配置core-site.xml
您需要將以下屬性添加到中core-site.xml。只有使用HA模式的群集才需要ZooKeeper屬性。同樣,只有使用嵌入式日志的HA群集才需要嵌入式日志屬性。
<property>
<name>fs.alluxio.impl</name>
<value>alluxio.hadoop.FileSystem</value>
</property>
<property>
<name>alluxio.zookeeper.enabled</name>
<value>true</value>
</property>
<property>
<name>alluxio.zookeeper.address</name>
<value>zknode1:2181,zknode2:2181,zknode3:2181</value>
</property>
<property>
<name>alluxio.master.embedded.journal.addresses</name>
<value>alluxiomaster1:19200,alluxiomaster2:19200,alluxiomaster3:19200</value>
</property>
要將配置屬性添加到core-site.xmlCloudera Manager中,請在Cloudera Manager中選擇“ HDFS”組件,選擇“配置”,然后搜索“ core-site.xml的群集范圍內的高級配置代碼段(安全閥)”。可以對其進行修改以添加所需的屬性。請參考下圖。

然后,保存配置,Cloudera Manager會通知您應該部署配置并重新啟動受影響的組件。接受這些選項以繼續(xù)。
2. 配置HADOOP_CLASSPATH
為了使Alluxio客戶端jar可用于MapReduce應用程序,必須將Alluxio Hadoop客戶端jar添加到中的$HADOOP_CLASSPATH環(huán)境變量hadoop-env.sh。
在Cloudera Manager的“ YARN(包括MR2)”部分的“配置”選項卡中,搜索參數(shù)“ hadoop-env.sh的網(wǎng)關客戶端環(huán)境高級配置代碼段(安全閥)”。然后將以下行添加到腳本中:
HADOOP_CLASSPATH=/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar:${HADOOP_CLASSPATH}
它看起來應該像這樣:

保存配置后,Cloudera Manager將通知您需要重新部署陳舊的配置文件,并且需要重新啟動受影響的組件。確保接受兩個選項并重新啟動服務。如果將Alluxio與HDFS日記一起使用,請確保在重新啟動HDFS之前停止Alluxio。
在客戶端配置環(huán)境變量:
[hadoop@dn75 ~]$ vim .bashrc
# set alluxio env
export ALLUXIO_HOME=/home/hadoop/app/alluxio
export PATH=$PATH:$ALLUXIO_HOME/bin
export HADOOP_CLASSPATH=/home/hadoop/app/alluxio/client/alluxio-2.4.1-1-client.jar:${HADOOP_CLASSPATH}
3. 安全
由于MapReduce在YARN上運行,因此需要配置非安全的Alluxio,以允許yarn用戶模擬其他用戶。為此,將以下屬性添加到alluxio-site.propertiesAlluxio Masters和Workers上,然后重新啟動Alluxio群集。
alluxio.master.security.impersonation.yarn.users=*
如果對Alluxio和YARN進行了kerberized和Secured,則不需要這樣做。
4. 運行MapReduce應用程序
為了使MapReduce應用程序能夠在Alluxio中讀取和寫入文件,必須將Alluxio客戶端jar分發(fā)到群集中的所有YARN節(jié)點,并將其添加到應用程序類路徑中。
以下是分發(fā)客戶端jar的2種主要替代方法的說明。
4.1 使用-libjars命令行選項
-libjars在yarn jar ...將/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar用作參數(shù)時, 可以使用命令行選項來運行作業(yè)。這會將jar放置在Hadoop DistributedCache中,使其可用于所有節(jié)點。例如,以下命令將Alluxio客戶端jar添加到該-libjars選項:
$ yarn jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomtextwriter -libjars /path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar <OUTPUT URI>
4.2 設置類路徑配置變量
如果Alluxio客戶端jar已分發(fā)到同一路徑中的所有節(jié)點,則可以使用mapreduce.application.classpath變量將該jar添加到類路徑。
在Cloudera Manager中,您可以mapreduce.application.classpath在“配置”選項卡的“ YARN(包括MR2)”組件中找到變量。對于“ MR應用程序類路徑”,將Alluxio Hadoop客戶端jar添加為新條目。
/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar
這將添加到mapreduce.application.classpath參數(shù)中。它看起來應該像這樣:

保存配置后,重新啟動受影響的組件。
alluxio client jar及其所有父目錄必須要有755權限,才能讀到
5. 運行示例MapReduce應用程序
[hadoop@dn75 ~]$ hadoop jar /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-examples-3.0.0-cdh6.3.4.jar wordcount \
-libjars /opt/alluxio/client/alluxio-enterprise-2.5.0-1.1-client.jar \
alluxio:///wordcount/input.txt \
alluxio:///wordcount/output
二、運行CDH Spark
要與Alluxio一起運行CDH Spark應用程序,需要對應用程序進行其他配置。
Spark和Alluxio部署有兩種方案。如果您已經(jīng)在群集的所有節(jié)點上安裝了Alluxio Spark客戶端jar,則只需為類路徑指定正確的路徑即可。否則,您可以允許Spark為應用程序的每次調用將Alluxio Spark客戶端jar分發(fā)到每個Spark節(jié)點。
1. 每個節(jié)點上已經(jīng)有Alluxio Spark客戶端jar
如果Alluxio客戶端jar已存在于每個節(jié)點上,則必須將該路徑添加到Spark驅動程序和執(zhí)行程序的類路徑中。為此,請使用spark.driver.extraClassPath或--driver-java-options 和spark.executor.extraClassPath變量。
注意:如果設置多次
spark.executor.extraClassPath,spark.driver.extraClassPath將覆蓋。如果應用程序已經(jīng)設置了此參數(shù),則需要將Alluxio客戶端jar添加到設置此屬性的位置。
對于spark-submit一個例子如下所示。(在示例中,替換MASTER_HOSTNAME為實際的Alluxio主主機名。)
$ spark-submit --master yarn --conf "spark.driver.extraClassPath=/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar" --conf "spark.executor.extraClassPath=/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar" --class org.apache.spark.examples.JavaWordCount /opt/cloudera/parcels/CDH/lib/spark/examples-1.6.0-cdh5.14.4-hadoop2.6.0-cdh5.14.4.jar alluxio://MASTER_HOSTNAME:19998/testing/randomtext/
注意:此示例將對Alluxio path下的所有文本文件運行字數(shù)統(tǒng)計
/testing/randomtext/。
同樣,對于spark-shell,下面是一個示例:
$ spark-shell --master yarn --driver-class-path "/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar" --conf "spark.executor.extraClassPath=/path/to/alluxio/client/alluxio-enterprise-2.4.1-1.1-client.jar"
2. 為每個應用程序分配Alluxio Spark客戶端jar
如果尚未在每臺計算機上安裝Alluxio客戶端jar,則可以使用該--jars選項為每個應用程序分發(fā)jar。
例如,使用spark-submit看起來像:
$ spark-submit --master yarn --jars /path/to/alluxio/spark/alluxio-enterprise-2.4.1-1.1-client.jar ...
3. CDH界面配置Alluxio Spark客戶端jar
將 Alluxio 客戶端 jar 包添加到 Spark driver 和 executor 的 classpath 中,以便 Spark 應用程序能夠使用客戶端 jar 包在 Alluxio 中讀取和寫入文件。具體來說,在運行 Spark 的每個節(jié)點上,將以下幾行添加到spark/conf/spark-defaults.conf中。
spark.driver.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-2.5.0-client.jar
spark.executor.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-2.5.0-client.jar

