本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DistributedCache 是一項 Hadoop 功能,可在地圖或減少任務需要存取常用資料時提高效率。如果您的叢集取決於建立叢集時未安裝的現有應用程式或二進位檔案,您可以使用 DistributedCache 匯入這些檔案。此功能可讓叢集節點從其本機檔案系統讀取匯入的檔案,而不是從其他叢集節點擷取檔案。
如需詳細資訊,請前往 http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/DistributedCache.html。
您叫用 DistributedCache 當您建立叢集時。Hadoop 任務開始之前會將檔案快取,並在任務期間保持快取。您可以快取存放在任何 Hadoop 相容檔案系統上的檔案,例如 HDFS或 Amazon S3。檔案快取的預設大小為 10 GB。若要變更快取大小,請使用引導操作重新設定 Hadoop 參數 local.cache.size
。如需詳細資訊,請參閱建立引導動作以使用 Amazon EMR叢集安裝其他軟體。
支援的檔案類型
DistributedCache 允許單一檔案和封存。個別檔案會快取成唯讀檔案。可執行檔和二進位檔有執行權限設定。
封存是使用公用程式 (例如,gzip
) 來封裝一或多個檔案。DistributedCache 會將壓縮檔案傳遞至每個核心節點,並將封存解壓縮為快取的一部分。DistributedCache 支援下列壓縮格式:
快取檔案的位置
DistributedCache 只會將檔案複製到核心節點。如果叢集中沒有核心節點,DistributedCache 會將檔案複製到主要節點。
DistributedCache 使用符號連結將快取檔案與映射器和還原器的目前工作目錄建立關聯。符號連結是檔案位置的別名,而非實際的檔案位置。參數的值 (yarn-site.xml
中的 yarn.nodemanager.local-dirs
) 會指定暫時檔案的位置。Amazon 會根據執行個體類型和EMR版本,EMR將此參數設定為 /mnt/mapred
或一些變化。例如,設定可能會有 /mnt/mapred
和 /mnt1/mapred
,因為執行個體類型有兩個暫時性磁碟區。快取檔案位於 /mnt/mapred/taskTracker/archive
中的臨時檔案位置的子目錄。
如果您快取單一檔案,DistributedCache 會將 檔案放入 archive
目錄中。如果您快取封存,DistributedCache 解壓縮 檔案,在 中建立子目錄/archive
,其名稱與封存檔案名稱相同。個別檔案位於新的子目錄。
您可以使用...DistributedCache 只有在使用 Streaming 時。
從串流應用程式存取快取檔案
若要從您的映射器或縮減器應用程式存取快取的檔案,務必將目前的工作目錄 (./) 新增到您的應用程式,並且如同目前工作目錄中的檔案一般參考快取的檔案。
從串流應用程式存取快取檔案
您可以使用 AWS Management Console 和 AWS CLI 來建立使用分散式快取的叢集。
- Console
-
使用新主控台來指定分散式快取檔案
-
登入 AWS Management Console,並在 https://console.aws.amazon.com/emr 開啟 Amazon EMR主控台。
-
在左側導覽窗格中的 EMR下EC2,選擇叢集,然後選擇建立叢集。
-
在步驟下,選擇新增步驟。這會開啟新增步驟對話方塊。在引數欄位中,納入檔案和存檔以儲存至快取。檔案大小 (或在封存檔案中的檔案大小總和) 必須少於分配的快取大小。
如果要將個別檔案新增至分散式快取,在檔案放置在本機快取中時,在檔案的名稱和位置、井字號 (#),以及您想要提供給檔案的名稱後面接著指定 -cacheFile
。下列範例示範如何將個別檔案新增至分散式快取。
-cacheFile \
s3://amzn-s3-demo-bucket
/file-name
#cache-file-name
如果要將封存檔案新增至分散式快取,請在 Amazon S3 中的檔案的位置、井字號 (#),以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 -cacheArchive
。下列範例示範如何將封存檔案新增至分散式快取。
-cacheArchive \
s3://amzn-s3-demo-bucket
/archive-name
#cache-archive-name
在其他對話方塊欄位中輸入適當的值。選項視步驟類型而異。若要新增步驟並結束對話方塊,請選擇新增步驟。
-
選擇適用於您的叢集的任何其他選項。
-
若要啟動您的叢集,請選擇建立叢集。
- CLI
-
使用 指定分散式快取檔案 AWS CLI
-
若要在叢集建立時提交串流步驟,輸入含 create-cluster
參數的 --steps
命令。若要使用 指定分散式快取檔案 AWS CLI,請在提交串流步驟時指定適當的引數。
如果要將個別檔案新增至分散式快取,在檔案放置在本機快取中時,在檔案的名稱和位置、井字號 (#),以及您想要提供給檔案的名稱後面接著指定 -cacheFile
。
如果要將封存檔案新增至分散式快取,請在 Amazon S3 中的檔案的位置、井字號 (#),以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 -cacheArchive
。下列範例示範如何將封存檔案新增至分散式快取。
如需在 中使用 Amazon EMR命令的詳細資訊 AWS CLI,請參閱 https://docs.aws.amazon.com/cli/latest/reference/emr。
範例 1
輸入以下命令來啟動叢集並提交使用 -cacheFile
的串流步驟,將一個檔案 sample_dataset_cached.dat
新增至快取。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]
如果您在未使用 --instance-groups
參數的情況下指定執行個體計數,即會啟動單一主節點,且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。
如果您先前尚未建立預設EMR服務角色和EC2執行個體描述檔,請在輸入create-cluster
子命令之前輸入 aws emr create-default-roles
來建立它們。
範例 2
以下命令會顯示串流叢集的建立,並使用 -cacheArchive
將封存檔案新增到快取。
aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]
如果您在未使用 --instance-groups
參數的情況下指定執行個體計數,即會啟動單一主節點,且剩餘執行個體會以核心節點的形式啟動。所有節點都將使用命令中指定的執行個體類型。
如果您先前尚未建立預設EMR服務角色和EC2執行個體描述檔,請在輸入create-cluster
子命令之前輸入 aws emr create-default-roles
來建立它們。