Dela via


Använda DistCp för att kopiera data mellan Azure Storage Blobs och Azure Data Lake Storage

Du kan använda DistCp för att kopiera data mellan ett allmänt V2-lagringskonto och ett allmänt V2-lagringskonto med hierarkiskt namnområde aktiverat. Den här artikeln innehåller instruktioner om hur du använder DistCp-verktyget.

DistCp innehåller olika kommandoradsparametrar och vi rekommenderar starkt att du läser den här artikeln för att optimera din användning av den. Den här artikeln visar grundläggande funktioner och fokuserar på dess användning för att kopiera data till ett hierarkiskt namnområde aktiverat konto.

Förutsättningar

  • En Azure-prenumeration. Mer information finns i Hämta kostnadsfri utvärderingsversion av Azure.
  • Ett befintligt Azure Storage-konto utan Data Lake Storage-funktioner (hierarkiskt namnområde) aktiverat.
  • Ett Azure Storage-konto med Data Lake Storage-funktioner (hierarkiskt namnområde) aktiverat. Anvisningar om hur du skapar ett finns i Skapa ett Azure Storage-konto
  • En container som har skapats i lagringskontot med hierarkiskt namnområde aktiverat.
  • Ett Azure HDInsight-kluster med åtkomst till ett lagringskonto med funktionen hierarkisk namnrymd aktiverad. Mer information finns i Använda Azure Data Lake Storage med Azure HDInsight-kluster. Se till att du aktiverar Fjärrskrivbord för klustret.

Använda DistCp från ett HDInsight Linux-kluster

Ett HDInsight-kluster levereras med distCp-verktyget, som kan användas för att kopiera data från olika källor till ett HDInsight-kluster. Om du har konfigurerat HDInsight-klustret för att använda Azure Blob Storage och Azure Data Lake Storage tillsammans kan distCp-verktyget även användas för att kopiera data mellan. I det här avsnittet tittar vi på hur du använder DistCp-verktyget.

  1. Skapa en SSH-session till ditt HDInsight-kluster. Mer information finns i Ansluta till ett Linux-baserat HDInsight-kluster.

  2. Kontrollera om du kan komma åt ditt befintliga V2-konto för generell användning (utan hierarkiskt namnområde aktiverat).

    hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
    

    Utdata bör innehålla en lista med innehåll i containern.

  3. På samma sätt kontrollerar du om du kan komma åt lagringskontot med hierarkiskt namnområde aktiverat från klustret. Kör följande kommando:

    hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
    

    Utdata bör innehålla en lista över filer/mappar i Data Lake-lagringskontot.

  4. Använd DistCp för att kopiera data från Windows Azure Storage Blob (WASB) till ett Data Lake Storage-konto.

    hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
    

    Kommandot kopierar innehållet i mappen /example/data/gutenberg/ i Blob Storage till /myfolder i Data Lake Storage-kontot.

  5. På samma sätt kan du använda DistCp för att kopiera data från Data Lake Storage-kontot till Blob Storage (WASB).

    hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
    

    Kommandot kopierar innehållet i /myfolder i Data Lake Store-kontot till mappen /example/data/gutenberg/ i WASB.

Prestandaöverväganden vid användning av DistCp

Eftersom DistCp:s lägsta kornighet är en enda fil är det viktigaste parametern att ange det maximala antalet samtidiga kopior för att optimera den mot Data Lake Storage. Antalet samtidiga kopior är lika med antalet mappningsparameter (m) på kommandoraden. Den här parametern anger det maximala antalet mappare som används för att kopiera data. Standardvärdet är 20.

Exempel

hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder

Hur gör jag för att bestämma antalet mappare som ska användas?

Här är några riktlinjer som du kan använda.

  • Steg 1: Fastställ det totala minne som är tillgängligt för YARN-standardappkön – Det första steget är att fastställa det minne som är tillgängligt för YARN-standardappkön. Den här informationen är tillgänglig i Ambari-portalen som är associerad med klustret. Gå till YARN och visa fliken Konfigurationer för att se YARN-minnet som är tillgängligt för appkön "standard". Det här är det totala tillgängliga minnet för ditt DistCp-jobb (som faktiskt är ett MapReduce-jobb).

  • Steg 2: Beräkna antalet mappare – värdet för m är lika med kvoten för totalt YARN-minne dividerat med YARN-containerns storlek. Informationen om YARN-containerstorleken finns också i Ambari-portalen. Gå till YARN och visa fliken Konfigurationer. YARN-containerstorleken visas i det här fönstret. Ekvationen för att komma fram till antalet mappare (m) är

    m = (antal noder * YARN-minne för varje nod) /YARN-containerstorlek

Exempel

Anta att du har ett 4x D14v2s-kluster och att du försöker överföra 10 TB data från 10 olika mappar. Var och en av mapparna innehåller olika mängder data och filstorlekarna i varje mapp är olika.

  • Totalt YARN-minne: Från Ambari-portalen fastställer du att YARN-minnet är 96 GB för en D14-nod. Därför är det totala YARN-minnet för fyra nodkluster:

    YARN-minne = 4 * 96 GB = 384 GB

  • Antal mappare: Från Ambari-portalen fastställer du att YARN-containerstorleken är 3 072 MB för en D14-klusternod. Så antalet mappare är:

    m = (fyra noder * 96 GB) / 3072 MB = 128 mappare

Om andra program använder minne kan du välja att endast använda en del av klustrets YARN-minne för DistCp.

Kopiera stora datamängder

När storleken på datauppsättningen som ska flyttas är stor (till exempel >1 TB) eller om du har många olika mappar bör du överväga att använda flera DistCp-jobb. Det finns förmodligen ingen prestandaökning, men det sprider ut jobben så att om något jobb misslyckas behöver du bara starta om det specifika jobbet i stället för hela jobbet.

Begränsningar

  • DistCp försöker skapa mappare som liknar storleken för att optimera prestanda. Att öka antalet mappare kanske inte alltid ökar prestandan.

  • DistCp är begränsad till endast en mappare per fil. Därför bör du inte ha fler mappare än du har filer. Eftersom DistCp bara kan tilldela en mappare till en fil begränsar detta mängden samtidighet som kan användas för att kopiera stora filer.

  • Om du har några stora filer bör du dela upp dem i filsegment på 256 MB för att ge dig mer potentiell samtidighet.