Azure Data Box ile şirket içi HDFS deposundan Azure Depolama'a geçiş

Data Box cihazı kullanarak Hadoop kümenizin şirket içi HDFS deposundaki verileri Azure Depolama'a (blob depolama veya Data Lake Storage 2. Nesil) geçirebilirsiniz. Data Box Disk, 80 TB Data Box veya 770 TB Data Box Heavy arasından seçim yapabilirsiniz.

Bu makale şu görevleri tamamlamanıza yardımcı olur:

  • Verilerinizi geçirmeye hazırlanma
  • Verilerinizi bir Data Box Diskine, Data Box'a veya Data Box Heavy cihazına kopyalama
  • Cihazı Microsoft'a geri gönderme
  • Dosyalara ve dizinlere erişim izinleri uygulama (yalnızca Data Lake Storage 2. Nesil)

Ön koşullar

Geçişi tamamlamak için bu işlemlere ihtiyacınız vardır.

Hazırsanız başlayalım.

Verilerinizi Data Box cihazına kopyalama

Verileriniz tek bir Data Box cihazına sığıyorsa, verileri Data Box cihazına kopyalarsınız.

Veri boyutunuz Data Box cihazının kapasitesini aşıyorsa, isteğe bağlı yordamı kullanarak verileri birden çok Data Box cihazına bölün ve bu adımı gerçekleştirin.

Şirket içi HDFS deponuzdaki verileri data Box cihazına kopyalamak için birkaç şey ayarlayıp DistCp aracını kullanırsınız.

Blob/Nesne depolamanın REST API'leri aracılığıyla Data Box cihazınıza veri kopyalamak için bu adımları izleyin. REST API arabirimi, cihazın kümenizde HDFS deposu olarak görünmesini sağlar.

  1. VERILERI REST aracılığıyla kopyalamadan önce Data Box veya Data Box Heavy'de REST arabirimine bağlanmak için güvenlik ve bağlantı temel öğelerini belirleyin. Data Box'ın yerel web kullanıcı arabiriminde oturum açın ve Bağlan ve kopyalama sayfasına gidin. Cihazınızın Azure depolama hesaplarında, Erişim ayarları'nın altında REST'i bulun ve seçin.

  2. Depolama hesabına eriş ve verileri karşıya yükle iletişim kutusunda Blob hizmet uç noktasını ve Depolama hesap anahtarını kopyalayın. Blob hizmeti uç noktasından https:// ve sonundaki eğik çizgiyi atlar.

    Bu durumda uç nokta: https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/. Kullandığınız URI'nin konak kısmı: mystorageaccount.blob.mydataboxno.microsoftdatabox.com. Bir örnek için bkz. http üzerinden REST'e nasıl Bağlan.

  3. Her düğüme uç noktayı ve Data Box veya Data Box Heavy düğüm IP adresini /etc/hosts ekleyin.

    10.128.5.42  mystorageaccount.blob.mydataboxno.microsoftdatabox.com
    

    DNS için başka bir mekanizma kullanıyorsanız Data Box uç noktasının çözümlenebilmesini sağlamanız gerekir.

  4. Kabuk değişkenini azjars ve azure-storage jar dosyalarının konumuna hadoop-azure ayarlayın. Bu dosyaları Hadoop yükleme dizini altında bulabilirsiniz.

    Bu dosyaların mevcut olup olmadığını belirlemek için şu komutu kullanın: ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure. Yer tutucuyu <hadoop_install_dir> Hadoop'u yüklediğiniz dizinin yoluyla değiştirin. Tam yolları kullandığınızdan emin olun.

    Örnekler:

    azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar

  5. Veri kopyalama için kullanmak istediğiniz depolama kapsayıcısını oluşturun. Bu komutun bir parçası olarak bir hedef dizin de belirtmelisiniz. Bu, bu noktada sahte bir hedef dizin olabilir.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -mkdir -p  wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Yer tutucusunu <blob_service_endpoint> blob hizmet uç noktanızın adıyla değiştirin.

    • Yer tutucuyu <account_key> hesabınızın erişim anahtarıyla değiştirin.

    • Yer tutucuyu <container-name> kapsayıcınızın adıyla değiştirin.

    • Yer tutucuyu <destination_directory> , verilerinizi kopyalamak istediğiniz dizinin adıyla değiştirin.

  6. Kapsayıcınızın ve dizininizin oluşturulduğunu sağlamak için bir liste komutu çalıştırın.

    hadoop fs -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \
    -ls -R  wasb://<container_name>@<blob_service_endpoint>/
    
    • Yer tutucusunu <blob_service_endpoint> blob hizmet uç noktanızın adıyla değiştirin.

    • Yer tutucuyu <account_key> hesabınızın erişim anahtarıyla değiştirin.

    • Yer tutucuyu <container-name> kapsayıcınızın adıyla değiştirin.

  7. Hadoop HDFS'den Data Box Blob depolama alanına verileri daha önce oluşturduğunuz kapsayıcıya kopyalayın. Kopyaladığınız dizin bulunamazsa, komut dizini otomatik olarak oluşturur.

    hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \
    -filters <exclusion_filelist_file> \
    [-f filelist_file | /<source_directory> \
           wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
    
    • Yer tutucusunu <blob_service_endpoint> blob hizmet uç noktanızın adıyla değiştirin.

    • Yer tutucuyu <account_key> hesabınızın erişim anahtarıyla değiştirin.

    • Yer tutucuyu <container-name> kapsayıcınızın adıyla değiştirin.

    • Yer tutucuyu <exlusion_filelist_file> , dosya dışlama listenizi içeren dosyanın adıyla değiştirin.

    • Yer tutucuyu <source_directory> , kopyalamak istediğiniz verileri içeren dizinin adıyla değiştirin.

    • Yer tutucuyu <destination_directory> , verilerinizi kopyalamak istediğiniz dizinin adıyla değiştirin.

    -libjars seçeneği ve bağımlı azure-storage*.jar dosyalarını için kullanılabilir hale getirmek hadoop-azure*.jar için distcpkullanılır. Bu, bazı kümeler için zaten oluşabilir.

    Aşağıdaki örnekte, komutun distcp verileri kopyalamak için nasıl kullanıldığı gösterilmektedir.

     hadoop distcp \
    -libjars $azjars \
    -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \
    -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \
    -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \
    /data/testfiles \
    wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
    

    Kopyalama hızını artırmak için:

    • Eşleştirici sayısını değiştirmeyi deneyin. (Varsayılan eşleştirici sayısı 20'dir. Yukarıdaki örnekte = 4 eşleyici kullanılır m .)

    • öğesini deneyin -D fs.azure.concurrentRequestCount.out=<thread_number> . değerini eşleyici başına iş parçacığı sayısıyla değiştirin <thread_number> . Eşleyici sayısının ve eşleyici başına m*<thread_number>iş parçacığı sayısının çarpımının 32'yi aşmaması gerekir.

    • Birden çok distcp öğesini paralel olarak çalıştırmayı deneyin.

    • Büyük dosyaların küçük dosyalardan daha iyi performans sergilediğini unutmayın.

    • 200 GB'tan büyük dosyalarınız varsa, aşağıdaki parametrelerle blok boyutunu 100 MB olarak değiştirmenizi öneririz:

    hadoop distcp \ 
    -libjars $azjars \ 
    -Dfs.azure.write.request.size= 104857600 \ 
    -Dfs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ 
    -Dfs.azure.account.key.<blob_service_endpoint<>=<account_key> \ 
    -strategy dynamic \ 
    -Dmapreduce.map.memory.mb=16384 \ 
    -Dfs.azure.concurrentRequestCount.out=8 \ 
    -Dmapreduce.map.java.opts=-Xmx8196m \ 
    -m 4 \ 
    -update \ 
    /data/bigfile wasb://hadoop@mystorageaccount.blob.core.windows.net/bigfile
    

Data Box'ı Microsoft'a gönderme

Data Box cihazını hazırlamak ve Microsoft'a göndermek için bu adımları izleyin.

  1. İlk olarak, Data Box veya Data Box Heavy'nizde göndermeye hazırlanın.

  2. Cihaz hazırlığı tamamlandıktan sonra ÜRÜN REÇETESI dosyalarını indirin. Daha sonra Azure'a yüklenen verileri doğrulamak için bu ürün reçetesini veya bildirim dosyalarını kullanırsınız.

  3. Cihazı kapatın ve kabloları çıkarın.

  4. UPS ile teslim alma zamanı planlayın.

  5. Microsoft cihazınızı aldıktan sonra veri merkezi ağına bağlanır ve veriler, cihaz siparişini gönderdiğinizde belirttiğiniz depolama hesabına yüklenir. Ürün reçetesi dosyalarında tüm verilerinizin Azure'a yüklendiğini doğrulayın.

Dosyalara ve dizinlere erişim izinleri uygulama (yalnızca Data Lake Storage 2. Nesil)

Veriler Azure Depolama hesabınızda zaten var. Artık dosyalara ve dizinlere erişim izinleri uygulayacaksınız.

Dekont

Bu adım yalnızca veri deponuz olarak Azure Data Lake Storage 2. Nesil kullanıyorsanız gereklidir. Veri deponuz olarak hiyerarşik ad alanı olmayan yalnızca bir blob depolama hesabı kullanıyorsanız, bu bölümü atlayabilirsiniz.

Azure Data Lake Storage 2. Nesil etkin hesabınız için hizmet sorumlusu oluşturma

Hizmet sorumlusu oluşturmak için bkz . Nasıl yapılır: Kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturmak için portalı kullanma.

  • Makalenin Bir role uygulamayı atama bölümündeki adımları gerçekleştirirken, Depolama Blob Veri Katkıda Bulunanı rolünü hizmet sorumlusuna atadığınızdan emin olun.

  • Makalenin Oturum açmak için değerleri alma bölümündeki adımları gerçekleştirirken, uygulama kimliğini ve istemci gizli dizi değerlerini bir metin dosyasına kaydedin. Yakında lazım olacak.

İzinleriyle kopyalanan dosyaların listesini oluşturma

Şirket içi Hadoop kümesinden şu komutu çalıştırın:


sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json

Bu komut, izinleriyle kopyalanan dosyaların listesini oluşturur.

Dekont

HDFS'deki dosya sayısına bağlı olarak, bu komutun çalıştırılması uzun sürebilir.

Kimlik listesi oluşturma ve bunları Microsoft Entra kimliklerine eşleme

  1. Betiği copy-acls.py indirin. Bu makalenin Yardımcı betikleri indirme ve kenar düğümünüzü çalıştıracak şekilde ayarlama bölümüne bakın.

  2. Benzersiz kimliklerin listesini oluşturmak için bu komutu çalıştırın.

    
    ./copy-acls.py -s ./filelist.json -i ./id_map.json -g
    

    Bu betik, ADD tabanlı kimliklerle eşlemeniz gereken kimlikleri içeren adlı id_map.json bir dosya oluşturur.

  3. id_map.json Dosyayı bir metin düzenleyicisinde açın.

  4. Dosyada görünen her JSON nesnesi için, microsoft Entra kullanıcı asıl adı (UPN) veya ObjectId (OID) özniteliğini uygun eşlenmiş kimlikle güncelleştirin target . İşiniz bittiğinde dosyayı kaydedin. Sonraki adımda bu dosyaya ihtiyacınız olacak.

Kopyalanan dosyalara izinler uygulama ve kimlik eşlemeleri uygulama

Data Lake Storage 2. Nesil etkin hesaba kopyaladığınız verilere izinler uygulamak için şu komutu çalıştırın:

./copy-acls.py -s ./filelist.json -i ./id_map.json  -A <storage-account-name> -C <container-name> --dest-spn-id <application-id>  --dest-spn-secret <client-secret>
  • Yer tutucuyu <storage-account-name> depolama hesabınızın adıyla değiştirin.

  • Yer tutucuyu <container-name> kapsayıcınızın adıyla değiştirin.

  • <application-id> ve <client-secret> yer tutucularını, hizmet sorumlusunu oluştururken topladığınız uygulama kimliği ve istemci gizli dizisiyle değiştirin.

Ek: Verileri birden çok Data Box cihazı arasında bölme

Verilerinizi bir Data Box cihazına taşımadan önce bazı yardımcı betikleri indirmeniz, verilerinizin bir Data Box cihazına sığacak şekilde düzenlendiğinden emin olmanız ve gereksiz dosyaları dışlamanız gerekir.

Yardımcı betikleri indirin ve kenar düğümünüzü bunları çalıştıracak şekilde ayarlayın

  1. Şirket içi Hadoop kümenizin kenar veya baş düğümünden şu komutu çalıştırın:

    
    git clone https://github.com/jamesbak/databox-adls-loader.git
    cd databox-adls-loader
    

    Bu komut, yardımcı betikleri içeren GitHub deposunu klonlar.

  2. Yerel bilgisayarınızda yüklü olan jq paketinin bu olduğundan emin olun.

    
    sudo apt-get install jq
    
  3. İstekler python paketini yükleyin.

    
    pip install requests
    
  4. Gerekli betiklerde yürütme izinlerini ayarlayın.

    
    chmod +x *.py *.sh
    
    

Verilerinizin bir Data Box cihazına sığacak şekilde düzenlendiğinden emin olun

Verilerinizin boyutu tek bir Data Box cihazının boyutunu aşarsa, dosyaları birden çok Data Box cihazına depolayabileceğiniz gruplara bölebilirsiniz.

Verileriniz tekil bir Data Box cihazının boyutunu aşmazsa sonraki bölüme geçebilirsiniz.

  1. Yükseltilmiş izinlerle, önceki bölümdeki generate-file-list yönergeleri izleyerek indirdiğiniz betiği çalıştırın.

    Komut parametrelerinin açıklaması aşağıdadır:

    sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME]
                     [-f LOG_CONFIG] [-l LOG_FILE]
                     [-v {DEBUG,INFO,WARNING,ERROR}]
                     path
    
    where:
    positional arguments:
    path                  The base HDFS path to process.
    
    optional arguments:
    -h, --help            show this help message and exit
    -s DATABOX_SIZE, --databox-size DATABOX_SIZE
                         The size of each Data Box in bytes.
    -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME
                         The base name for the output filelists. Lists will be
                         named basename1, basename2, ... .
    -f LOG_CONFIG, --log-config LOG_CONFIG
                         The name of a configuration file for logging.
    -l LOG_FILE, --log-file LOG_FILE
                         Name of file to have log output written to (default is
                         stdout/stderr)
    -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR}
                         Level of log information to output. Default is 'INFO'.
    
  2. Oluşturulan dosya listelerini HDFS'ye kopyalayarak DistCp işi tarafından erişilebilir olmasını sağlayın.

    hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
    

Gereksiz dosyaları dışlama

Bazı dizinleri DisCp işinin dışında tutmanız gerekir. Örneğin, kümeyi çalışır durumda tutan durum bilgileri içeren dizinleri hariç tutun.

DistCp işini başlatmayı planladığınız şirket içi Hadoop kümesinde, dışlamak istediğiniz dizinlerin listesini belirten bir dosya oluşturun.

Bir örnek aşağıda verilmiştir:

.*ranger/audit.*
.*/hbase/data/WALs.*

Sonraki adımlar

Data Lake Storage 2. Nesil HDInsight kümeleriyle nasıl çalıştığını öğrenin. Daha fazla bilgi için bkz. Azure HDInsight kümeleriyle Azure Data Lake Storage 2. Nesil hizmetini kullanma.