Öğretici: Azure Data Lake Depolama 2. Nesil, Azure Databricks & Spark

Bu öğreticide, Azure Databricks kümenizi Azure Data Lake Depolama 2. Nesil'in etkin olduğu bir Azure depolama hesabında depolanan verilere nasıl bağlayacağını gösterir. Bu bağlantı, verileriniz üzerinde kümenizin sorgularını ve analizlerini yerel olarak çalıştırmanızı sağlar.

Bu öğreticide şunları yapacaksınız:

  • Databricks kümesi oluşturma
  • Yapılandırılmamış verileri bir depolama hesabına alma
  • Blob depolamada verileriniz üzerinde analiz çalıştırma

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

Uçuş verilerini indirme

Bu öğreticide ETL işleminin nasıl gerçekleştiriliş gösteriliştirilen Ulaşım İstatistikleri Bürosu'ndan gelen uçuş verileri kullanılır. Öğreticiyi tamamlamak için bu verileri indirmeniz gerekir.

  1. Araştırma ve Yenilikçi Teknoloji Yönetimi, Ulaşım İstatistikleri Bürosu'na gidin.

  2. Tüm veri alanlarını seçmek için Önceden Sıkıştırılmış Dosya onay kutusunu seçin.

  3. İndir düğmesini seçin ve sonuçları bilgisayarınıza kaydedin.

  4. Sıkıştırılmış dosyanın içeriğinin sıkıştırması açın ve dosyanın adını ve yolunu not kaydedin. Bu bilgilere sonraki bir adımda ihtiyacınız olacak.

Azure Databricks oluşturma

Bu bölümde, Azure Databricks kullanarak bir Azure portal hizmeti Azure portal.

  1. Kaynak Azure portal Kaynak analizi oluştur'Azure Databricks. > >

    Azure portal üzerinde Databricks

  2. Hizmet Azure Databricks altında, bir Databricks hizmeti oluşturmak için aşağıdaki değerleri sağlar:

    Özellik Açıklama
    Çalışma alanı adı Databricks çalışma alanınız için bir ad sağlayın.
    Abonelik Açılan listeden Azure aboneliğinizi seçin.
    Kaynak grubu Yeni bir kaynak grubu oluşturmayı veya mevcut bir kaynak grubunu kullanmayı seçin. Kaynak grubu, bir Azure çözümüne ilişkin kaynakları tutan bir kapsayıcıdır. Daha fazla bilgi için bkz. Azure Kaynak Grubuna genel bakış.
    Konum Batı ABD 2'yi seçin. Kullanılabilir diğer bölgeler için bkz. Bölgeye göre kullanılabilir Azure hizmetleri.
    Fiyatlandırma Katmanı Standart'ı seçin.

    Azure Databricks çalışma alanı oluşturma

  3. Hesabın oluşturulması birkaç dakika sürer. İşlem durumunu izlemek için üstteki ilerleme çubuğunu görüntüleme.

  4. Panoya sabitle’yi ve sonra Oluştur’u seçin.

Azure Databricks’te Spark kümesi oluşturma

  1. Veri Azure portal oluşturduğunuz Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.

  2. Azure Databricks portalına yönlendiriliyoruz. Portaldan Küme’yi seçin.

    Azure'da Databricks

  3. Yeni küme sayfasında, bir küme oluşturmak için değerleri girin.

    Azure'da Databricks Spark kümesi oluşturma

    Aşağıdaki alanlara değerleri girin ve diğer alanlar için varsayılan değerleri kabul edin:

    • Küme için bir ad girin.

    • 120 dakika işlem yapılmadığında sonlandır onay kutusunu seçtiğinizden emin olun. Küme kullanılmazsa kümenin sonlandırılması için biz süre (dakika cinsinden) belirtin.

  4. Küme oluştur'a seçin. Küme çalıştır edildikten sonra, kümeye not defterleri iliştirin ve Spark işlerini çalıştırabilirsiniz.

Veriyi çekme

Kaynak verilerini depolama hesabına kopyalama

.csvDosyanız'dan Data Lake Depolama 2. Nesil hesabınıza veri kopyalamak için AzCopy kullanın.

  1. Bir komut istemi penceresi açın ve depolama hesabınızla oturum açmak için aşağıdaki komutu girin.

    azcopy login
    

    Kullanıcı hesabınız için kimlik doğrulaması yapmak için komut istemi penceresinde görünen yönergeleri izleyin.

  2. .csv hesabından veri kopyalamak için aşağıdaki komutu girin.

    azcopy cp "<csv-folder-path>" https://<storage-account-name>.dfs.core.windows.net/<container-name>/folder1/On_Time.csv
    
    • Yer tutucu <csv-folder-path> değerini, dosyanın .csvdeğiştirin.

    • yer <storage-account-name> tutucu değerini depolama hesabının adıyla değiştirin.

    • yer <container-name> tutucusunu depolama hesabınıza kapsayıcının adıyla değiştirin.

Kapsayıcı oluşturma ve bağlama

Bu bölümde, depolama hesabınız içinde bir kapsayıcı ve klasör oluşturacaksınız.

  1. Uygulama Azure portal,oluşturduğunuz Azure Databricks hizmetine gidin ve Çalışma Alanını Başlat'ı seçin.

  2. Sol tarafta Çalışma Alanı'ı seçin. Çalışma Alanı açılır listesinden Oluştur > Not Defteri’ni seçin.

    Databricks'te not defteri oluşturma

  3. Not Defteri Oluştur iletişim kutusunda, not defterinizin adını girin. Dil olarak Python'ı ve ardından daha önce oluşturduğunuz Spark kümesi'ni seçin.

  4. Oluştur’u seçin.

  5. Aşağıdaki kod bloğuna kopyalayıp ilk hücreye yapıştırın, ancak henüz bu kodu çalıştırmayın.

    configs = {"fs.azure.account.auth.type": "OAuth",
           "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
           "fs.azure.account.oauth2.client.id": "<appId>",
           "fs.azure.account.oauth2.client.secret": "<clientSecret>",
           "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<tenant>/oauth2/token",
           "fs.azure.createRemoteFileSystemDuringInitialization": "true"}
    
    dbutils.fs.mount(
    source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/folder1",
    mount_point = "/mnt/flightdata",
    extra_configs = configs)
    
  6. Bu kod bloğunda, bu kod bloğundaki , , ve yer tutucu değerlerini bu öğreticinin önkoşullarını tamamladıktan sonra appId clientSecret tenant storage-account-name toplanmış değerlerle değiştirin. yer container-name tutucu değerini kapsayıcının adıyla değiştirin.

  7. Bu blokta kodu çalıştırmak için SHIFT + ENTER tuşlarına basın.

Daha sonra komut ekleyeceğimiz için bu not defterini açık durumda tutabilirsiniz.

Databricks Not Defteri'ni kullanarak CSV'yi Parquet biçimine dönüştürme

Daha önce oluşturduğunuz not defterinde yeni bir hücre ekleyin ve aşağıdaki kodu bu hücreye yapıştırın.

# Use the previously established DBFS mount point to read the data.
# create a data frame to read data.

flightDF = spark.read.format('csv').options(
    header='true', inferschema='true').load("/mnt/flightdata/*.csv")

# read the airline csv file and write the output to parquet format for easy query.
flightDF.write.mode("append").parquet("/mnt/flightdata/parquet/flights")
print("Done")

Verileri inceleme

AzCopy aracılığıyla karşıya yüklenen CSV dosyalarının listesini almak için yeni bir hücreye aşağıdaki kodu yapıştırın.

import os.path
import IPython
from pyspark.sql import SQLContext
display(dbutils.fs.ls("/mnt/flightdata"))

Yeni bir dosya oluşturmak ve parquet/flights klasöründeki dosyaları listelemek için şu betiği çalıştırın:

dbutils.fs.put("/mnt/flightdata/1.txt", "Hello, World!", True)
dbutils.fs.ls("/mnt/flightdata/parquet/flights")

Bu kod örnekleriyle Data Lake Storage 2. Nesil etkin bir depolama hesabında depolanan verileri kullanarak HDFS’nin hiyerarşik özelliklerini keşfettiniz.

Verileri sorgulama

Bir sonraki adımda depolama hesabınıza yüklediğiniz verileri sorgulamaya başlayabilirsiniz. Aşağıdaki kod bloklarını Cmd 1 bölümüne girin ve Cmd + Enter tuşlarına basarak Python betiğini çalıştırın.

Veri kaynaklarınız için veri çerçeveleri oluşturmak için aşağıdaki betiği çalıştırın:

  • <csv-folder-path>Yer tutucu değerini .csv dosyasının yoluyla değiştirin.
# Copy this into a Cmd cell in your notebook.
acDF = spark.read.format('csv').options(
    header='true', inferschema='true').load("/mnt/flightdata/On_Time.csv")
acDF.write.parquet('/mnt/flightdata/parquet/airlinecodes')

# read the existing parquet file for the flights database that was created earlier
flightDF = spark.read.format('parquet').options(
    header='true', inferschema='true').load("/mnt/flightdata/parquet/flights")

# print the schema of the dataframes
acDF.printSchema()
flightDF.printSchema()

# print the flight database size
print("Number of flights in the database: ", flightDF.count())

# show the first 20 rows (20 is the default)
# to show the first n rows, run: df.show(n)
acDF.show(100, False)
flightDF.show(20, False)

# Display to run visualizations
# preferably run this in a separate cmd cell
display(flightDF)

Verilerin bazı temel analiz sorgularını çalıştırmak için bu betiği girin.

# Run each of these queries, preferably in a separate cmd cell for separate analysis
# create a temporary sql view for querying flight information
FlightTable = spark.read.parquet('/mnt/flightdata/parquet/flights')
FlightTable.createOrReplaceTempView('FlightTable')

# create a temporary sql view for querying airline code information
AirlineCodes = spark.read.parquet('/mnt/flightdata/parquet/airlinecodes')
AirlineCodes.createOrReplaceTempView('AirlineCodes')

# using spark sql, query the parquet file to return total flights in January and February 2016
out1 = spark.sql("SELECT * FROM FlightTable WHERE Month=1 and Year= 2016")
NumJan2016Flights = out1.count()
out2 = spark.sql("SELECT * FROM FlightTable WHERE Month=2 and Year= 2016")
NumFeb2016Flights = out2.count()
print("Jan 2016: ", NumJan2016Flights, " Feb 2016: ", NumFeb2016Flights)
Total = NumJan2016Flights+NumFeb2016Flights
print("Total flights combined: ", Total)

# List out all the airports in Texas
out = spark.sql(
    "SELECT distinct(OriginCityName) FROM FlightTable where OriginStateName = 'Texas'")
print('Airports in Texas: ', out.show(100))

# find all airlines that fly from Texas
out1 = spark.sql(
    "SELECT distinct(Reporting_Airline) FROM FlightTable WHERE OriginStateName='Texas'")
print('Airlines that fly to/from Texas: ', out1.show(100, False))

Kaynakları temizleme

Artık gerekli olmadığında kaynak grubunu ve tüm ilgili kaynakları silin. Bunu yapmak için depolama hesabına ait kaynak grubunu seçin ve Sil' i seçin.

Sonraki adımlar