Aracılığıyla paylaş


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

Data Box cihazı kullanarak Hadoop kümenizin şirket içi HDFS deposundaki verileri Azure Depolama'ya (blob depolama veya Data Lake Storage) geçirebilirsiniz. Data Box Disk, 80, 120 veya 525 TiB kapasiteye sahip bir Data Box ya da 770 TiB 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)

Önkoş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 kopyala 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şme ve verileri karşıya yükleme iletişim kutusunda Blob hizmet uç noktasını ve Depolama hesabı anahtarını kopyalayın. Blob hizmeti uç noktasından https:// ve sonundaki eğik çizgiyi çıkartın.

    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 bağlanma.

  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, hadoop-azure ve azure-storage jar dosyalarının konumuna 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. Yüklediğiniz Hadoop dizininin yolunu <hadoop_install_dir> yer tutucusunun yerine koyun. Tam nitelikli 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 noktada bu, 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.

    • <account_key> yer tutucusunu 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.

    • Hesabınıza ait erişim anahtarını <account_key> yer tutucusuyla 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.

    • <account_key> yer tutucusunu 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 <exclusion_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, hadoop-azure*.jar ve bağımlı azure-storage*.jar dosyalarını distcp için kullanılabilir hale getirmek amacıyla kullanılır. Bazı kümeler için bu, zaten gerçekleşebilir.

    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 .)

    • 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önderim için hazırlanın.

  2. Cihaz hazırlığı tamamlandıktan sonra BOM dosyalarını indir. Daha sonra Azure'a yüklenen verileri doğrulamak için bu BOM veya manifest dosyalarını kullanırsınız.

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

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

    • Data Box cihazları için bkz Data Box'unuzu Gönderme.

    • Data Box Heavy cihazları için 'Data Box Heavy'i Gönderme' kısmına bakı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)

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

Not

Bu adım yalnızca veri deponuz olarak Azure Data Lake Storage 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 özellikli 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 Uygulamayı bir role atama bölümündeki adımları gerçekleştirirken, Depolama Blob Verileri 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.

Not

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 bunları çalıştıracak şekilde kenar düğümünüzü 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 dosyasını bir metin düzenleyicisinde açın.

  4. tr-TR: Dosyada görünen her JSON nesnesi için, bir Microsoft Entra kullanıcı asıl adı (UPN) veya ObjectId (OID) özniteliğini uygun eşlenmiş kimlikle güncelleyiniz 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 etkin hesabına 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.

  • "<container-name> yer tutucu ögesini 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 anahtarıyla 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 uç 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'ın HDInsight kümeleriyle nasıl çalıştığını öğrenin. Daha fazla bilgi için bkz . Azure HDInsight kümeleri ile Azure Data Lake Storage'ı kullanma.