使用分散式快取匯入檔案 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用分散式快取匯入檔案

DistributedCache 是 Hadoop 功能,可在映射或降低任務需要存取共用資料時提升效率。如果您的叢集是根據現有的應用程式或是在建立叢集時未安裝的二進位,您可以使用 DistributedCache 來匯入這些檔案。此功能可讓叢集節點從其本機檔案系統讀取匯入的檔案,而不是從其他叢集節點擷取檔案。

欲了解更多信息,請訪問 http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/ DistributedCache。

建立叢集時,您會調用 DistributedCache。Hadoop 任務開始之前會將檔案快取,並在任務期間保持快取。您可以快取儲存在任何 Hadoop 相容的檔案系統的檔案,例如,HDFS 或 Amazon S3。檔案快取的預設大小為 10 GB。若要變更快取大小,請使用引導操作重新設定 Hadoop 參數 local.cache.size。如需詳細資訊,請參閱 建立引導操作以安裝其他軟體

支援的檔案類型

DistributedCache 可允許單一檔案和存檔。個別檔案會快取成唯讀檔案。可執行檔和二進位檔有執行權限設定。

存檔是使用公用程式 (例如 gzip) 封裝的一個或多個檔案。DistributedCache 將壓縮檔案傳遞至每個核心節點,並將存檔解壓縮為快取的一部分。DistributedCache 支援以下壓縮格式:

  • zip

  • tgz

  • tar.gz

  • tar

  • jar

快取檔案的位置

DistributedCache 僅會將檔案複製到核心節點。如果叢集中沒有核心節點,則 DistributedCache 會將檔案複製到主節點。

DistributedCache 會使用 symlinks 將快取檔案關聯至映射器和縮減器的目前工作目錄。符號連結是檔案位置的別名,而非實際的檔案位置。參數的值 (yarn-site.xml 中的 yarn.nodemanager.local-dirs) 會指定暫時檔案的位置。Amazon EMR 會將此參數設定為 /mnt/mapred,或根據執行個體類型和 EMR 版本而變化。例如,設定可能會有 /mnt/mapred/mnt1/mapred,因為執行個體類型有兩個暫時性磁碟區。快取檔案位於 /mnt/mapred/taskTracker/archive 中的臨時檔案位置的子目錄。

如果您快取單一檔案,DistributedCache 會將該檔案放在 archive 目錄中。如果您快取存檔,DistributedCache 會解壓縮檔案,在 /archive 中建立子目錄,其名稱與封存檔案名稱相同。個別檔案位於新的子目錄。

您只能在使用串流時使用 DistributedCache。

從串流應用程式存取快取檔案

若要從您的映射器或縮減器應用程式存取快取的檔案,務必將目前的工作目錄 (./) 新增到您的應用程式,並且如同目前工作目錄中的檔案一般參考快取的檔案。

從串流應用程式存取快取檔案

您可以使用 AWS Management Console 和 AWS CLI 來建立使用分散式快取的叢集。

注意

我們已重新設計 Amazon EMR 主控台,可讓您更輕鬆地使用。請參閱 Amazon EMR 控制台 以了解舊的和新的主控台體驗之間的差異。

New console
使用新主控台來指定分散式快取檔案
  1. 登入並開啟 Amazon EMR 主控台 AWS Management Console,網址為 https://console.aws.amazon.com/emr

  2. 在左側導覽窗格中的 EC2 上的 EMR 下,選擇叢集,然後選擇建立叢集

  3. 步驟下,選擇新增步驟。這會開啟新增步驟對話方塊。在引數欄位中,納入檔案和存檔以儲存至快取。檔案大小 (或在封存檔案中的檔案大小總和) 必須少於分配的快取大小。

    如果要將個別檔案新增至分散式快取,在檔案放置在本機快取中時,在檔案的名稱和位置、井字號 (#),以及您想要提供給檔案的名稱後面接著指定 -cacheFile。下列範例示範如何將個別檔案新增至分散式快取。

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file-name#cache-file-name

    如果要將封存檔案新增至分散式快取,請在 Amazon S3 中的檔案的位置、井字號 (#),以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 -cacheArchive。下列範例示範如何將封存檔案新增至分散式快取。

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive-name#cache-archive-name

    在其他對話方塊欄位中輸入適當的值。選項視步驟類型而異。若要新增步驟並結束對話方塊,請選擇新增步驟

  4. 選擇適用於您的叢集的任何其他選項。

  5. 若要啟動您的叢集,請選擇建立叢集

Old console
使用舊主控台來指定分散式快取檔案
  1. 導覽至新的 Amazon EMR 主控台,然後從側邊導覽選取切換至舊主控台。如需有關切換至舊主控台時預期情況的詳細資訊,請參閱使用舊主控台

  2. 選擇建立叢集

  3. 選擇 Step execution (步驟執行) 做為啟動模式。

  4. Steps (步驟) 部分,於 Add step (新增步驟) 欄位中,從清單中選擇 Streaming program (串流程式),然後按一下 Configure and add (設定和新增)

  5. 引數欄位中,納入檔案和存檔以儲存至快取,然後選擇新增。檔案大小 (或在封存檔案中的檔案大小總和) 必須少於分配的快取大小。

    如果要將個別檔案新增至分散式快取,在檔案放置在本機快取中時,在檔案的名稱和位置、井字號 (#),以及您想要提供給檔案的名稱後面接著指定 -cacheFile。下列範例示範如何將個別檔案新增至分散式快取。

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file_name#cache_file_name

    如果要將封存檔案新增至分散式快取,請在 Amazon S3 中的檔案的位置、井字號 (#),以及您想要提供給本機快取中檔案集合的名稱後面接著輸入 -cacheArchive。下列範例示範如何將封存檔案新增至分散式快取。

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive_name#cache_archive_name
  6. 繼續設定和啟動您的叢集。您的叢集在處理任何叢集步驟前,會將檔案複製到快取位置。

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 執行個體設定檔,請先鍵入 aws emr create-default-roles 來建立這些設定檔,然後再鍵入 create-cluster 子命令。

範例 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 執行個體設定檔,請先鍵入 aws emr create-default-roles 來建立這些設定檔,然後再鍵入 create-cluster 子命令。