Öğretici: Ayıklama, dönüştürme ve Azure HDInsight üzerinde Apache Hive'ı kullanarak veri yüklemeTutorial: Extract, transform, and load data by using Apache Hive on Azure HDInsight

Bu öğreticide, bir ETL işlemi gerçekleştirin: ayıklama, dönüştürme ve veri yükleyebilir.In this tutorial, you perform an ETL operation: extract, transform, and load data. Bir ham CSV verileri dosyası olması, bir Azure HDInsight kümesinde almak, Apache Hive ile dönüştürme ve Apache Sqoop ile bir Azure SQL veritabanına yükleyin.You take a raw CSV data file, import it into an Azure HDInsight cluster, transform it with Apache Hive, and load it into an Azure SQL database with Apache Sqoop.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:In this tutorial, you learn how to:

  • Ayıklayın ve bir HDInsight kümesi için verileri karşıya yükleyin.Extract and upload the data to an HDInsight cluster.
  • Apache Hive'ı kullanarak verileri dönüştürme.Transform the data by using Apache Hive.
  • Sqoop kullanarak bir Azure SQL veritabanına veri yükleme.Load the data to an Azure SQL database by using Sqoop.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

ÖnkoşullarPrerequisites

Uçuş verilerini indirmeDownload the flight data

  1. Gözat araştırma ve yenilikçi teknoloji yönetim, nakliye istatistikleri bürosu.Browse to Research and Innovative Technology Administration, Bureau of Transportation Statistics.

  2. Sayfada aşağıdaki değerleri seçin:On the page, select the following values:

    AdıName DeğerValue
    Yıl FiltresiFilter Year 20132013
    Dönem FiltresiFilter Period OcakJanuary
    AlanlarFields Yıl, FlightDate Reporting_Airline, IATA_CODE_Reporting_Airline, Flight_Number_Reporting_Airline, OriginAirportID, kaynak, OriginCityName, OriginState, DestAirportID, hedef, DestCityName, DestState, DepDelayMinutes, ArrDelay, ArrDelayMinutes, CarrierDelay, WeatherDelay, NASDelay, SecurityDelay, LateAircraftDelay.Year, FlightDate, Reporting_Airline, IATA_CODE_Reporting_Airline, Flight_Number_Reporting_Airline, OriginAirportID, Origin, OriginCityName, OriginState, DestAirportID, Dest, DestCityName, DestState, DepDelayMinutes, ArrDelay, ArrDelayMinutes, CarrierDelay, WeatherDelay, NASDelay, SecurityDelay, LateAircraftDelay.

    Diğer tüm alanları temizleyin.Clear all other fields.

  3. Download (İndir) seçeneğini belirleyin.Select Download. Seçtiğiniz veri alanlarını içeren bir .zip dosyası alırsınız.You get a .zip file with the data fields you selected.

Ayıklama ve verileri yüklemeExtract and upload the data

Bu bölümde, HDInsight kümenize karşıya yüklemek ve ardından verileri Data Lake depolama Gen2 hesabınıza kopyalayın.In this section, you'll upload data to your HDInsight cluster and then copy that data to your Data Lake Storage Gen2 account.

  1. Bir komut istemi açın ve HDInsight küme baş düğümüne .zip dosyasını karşıya yüklemek için aşağıdaki güvenli kopya (Scp) komutunu kullanın:Open a command prompt and use the following Secure Copy (Scp) command to upload the .zip file to the HDInsight cluster head node:

    scp <file-name>.zip <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net:<file-name.zip>
    
    • Değiştirin <file-name> yer tutucu içeren .zip dosyasının adı.Replace the <file-name> placeholder with the name of the .zip file.
    • Değiştirin <ssh-user-name> SSH oturum açma HDInsight kümesi için yer tutucu.Replace the <ssh-user-name> placeholder with the SSH login for the HDInsight cluster.
    • Değiştirin <cluster-name> yer tutucu ile HDInsight kümesinin adı.Replace the <cluster-name> placeholder with the name of the HDInsight cluster.

    SSH oturum açma bilgilerinizi doğrulamak için bir parola kullanıyorsanız parola girmeniz istenir.If you use a password to authenticate your SSH login, you're prompted for the password.

    Ortak anahtar kullanıyorsanız, eşleşen özel anahtarın yolunu belirtmek için -i parametresini kullanmanız gerekebilir.If you use a public key, you might need to use the -i parameter and specify the path to the matching private key. Örneğin, scp -i ~/.ssh/id_rsa <file_name>.zip <user-name>@<cluster-name>-ssh.azurehdinsight.net:.For example, scp -i ~/.ssh/id_rsa <file_name>.zip <user-name>@<cluster-name>-ssh.azurehdinsight.net:.

  2. Karşıya yükleme tamamlandıktan sonra SSH kullanarak kümeye bağlanın.After the upload has finished, connect to the cluster by using SSH. Komut istemine aşağıdaki komutu girin:On the command prompt, enter the following command:

    ssh <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net
    
  3. .zip dosyasını açmak için aşağıdaki komutu kullanın:Use the following command to unzip the .zip file:

    unzip <file-name>.zip
    

    Komut ayıklar bir .csv dosya.The command extracts a .csv file.

  4. Data Lake depolama Gen2'ye dosya sistemi oluşturmak için aşağıdaki komutu kullanın.Use the following command to create the Data Lake Storage Gen2 file system.

    hadoop fs -D "fs.azure.createRemoteFileSystemDuringInitialization=true" -ls abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/
    

    Değiştirin <file-system-name> dosya sisteminize vermek istediğiniz adla yer tutucu.Replace the <file-system-name> placeholder with the name that you want to give your file system.

    Değiştirin <storage-account-name> depolama hesabınızın adıyla yer tutucu.Replace the <storage-account-name> placeholder with the name of your storage account.

  5. Bir dizin oluşturmak için aşağıdaki komutu kullanın.Use the following command to create a directory.

    hdfs dfs -mkdir -p abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data
    
  6. Kopyalamak için aşağıdaki komutu kullanın .csv dosyayı dizine:Use the following command to copy the .csv file to the directory:

    hdfs dfs -put "<file-name>.csv" abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data/
    

    Dosya adı boşluk veya özel karakterler içeriyorsa dosya adını tırnak kullanın.Use quotes around the file name if the file name contains spaces or special characters.

Verileri dönüştürmeTransform the data

Bu bölümde, bir Apache Hive işi çalıştırmak için Beeline kullanma.In this section, you use Beeline to run an Apache Hive job.

Apache Hive işi bir parçası olarak, verileri .csv dosyasından adlı bir Apache Hive tablosuna içeri gecikmeleri.As part of the Apache Hive job, you import the data from the .csv file into an Apache Hive table named delays.

  1. Zaten sahip olduğunuz için HDInsight kümesine SSH isteminden adlı yeni bir dosya oluşturup aşağıdaki komutu kullanın. flightdelays.hql:From the SSH prompt that you already have for the HDInsight cluster, use the following command to create and edit a new file named flightdelays.hql:

    nano flightdelays.hql
    
  2. Aşağıdaki metni tarafından değiştir değiştir <file-system-name> ve <storage-account-name> yer tutucuları olan dosya sistemi ve depolama hesabı adı.Modify the following text by replace the <file-system-name> and <storage-account-name> placeholders with your file system and storage account name. Daha sonra kopyalayın ve birlikte sağ fare düğmesine SHIFT tuşuna basarak kullanarak nano konsola metni yapıştırın.Then copy and paste the text into the nano console by using pressing the SHIFT key along with the right-mouse click button.

    DROP TABLE delays_raw;
    -- Creates an external table over the csv file
    CREATE EXTERNAL TABLE delays_raw (
        YEAR string,
        FL_DATE string,
        UNIQUE_CARRIER string,
        CARRIER string,
        FL_NUM string,
        ORIGIN_AIRPORT_ID string,
        ORIGIN string,
        ORIGIN_CITY_NAME string,
        ORIGIN_CITY_NAME_TEMP string,
        ORIGIN_STATE_ABR string,
        DEST_AIRPORT_ID string,
        DEST string,
        DEST_CITY_NAME string,
        DEST_CITY_NAME_TEMP string,
        DEST_STATE_ABR string,
        DEP_DELAY_NEW float,
        ARR_DELAY_NEW float,
        CARRIER_DELAY float,
        WEATHER_DELAY float,
        NAS_DELAY float,
        SECURITY_DELAY float,
        LATE_AIRCRAFT_DELAY float)
    -- The following lines describe the format and location of the file
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    STORED AS TEXTFILE
    LOCATION 'abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data';
    
    -- Drop the delays table if it exists
    DROP TABLE delays;
    -- Create the delays table and populate it with data
    -- pulled in from the CSV file (via the external table defined previously)
    CREATE TABLE delays
    LOCATION 'abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/processed'
    AS
    SELECT YEAR AS year,
        FL_DATE AS flight_date,
        substring(UNIQUE_CARRIER, 2, length(UNIQUE_CARRIER) -1) AS unique_carrier,
        substring(CARRIER, 2, length(CARRIER) -1) AS carrier,
        substring(FL_NUM, 2, length(FL_NUM) -1) AS flight_num,
        ORIGIN_AIRPORT_ID AS origin_airport_id,
        substring(ORIGIN, 2, length(ORIGIN) -1) AS origin_airport_code,
        substring(ORIGIN_CITY_NAME, 2) AS origin_city_name,
        substring(ORIGIN_STATE_ABR, 2, length(ORIGIN_STATE_ABR) -1)  AS origin_state_abr,
        DEST_AIRPORT_ID AS dest_airport_id,
        substring(DEST, 2, length(DEST) -1) AS dest_airport_code,
        substring(DEST_CITY_NAME,2) AS dest_city_name,
        substring(DEST_STATE_ABR, 2, length(DEST_STATE_ABR) -1) AS dest_state_abr,
        DEP_DELAY_NEW AS dep_delay_new,
        ARR_DELAY_NEW AS arr_delay_new,
        CARRIER_DELAY AS carrier_delay,
        WEATHER_DELAY AS weather_delay,
        NAS_DELAY AS nas_delay,
        SECURITY_DELAY AS security_delay,
        LATE_AIRCRAFT_DELAY AS late_aircraft_delay
    FROM delays_raw;
    
  3. Kullanarak dosyayı kaydedin, CTRL + X kullanın ve ardından yazın Y istendiğinde.Save the file by using use CTRL+X and then type Y when prompted.

  4. Hive’ı başlatmak ve flightdelays.hql dosyasını çalıştırmak için aşağıdaki komutu kullanın:To start Hive and run the flightdelays.hql file, use the following command:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
    
  5. flightdelays.hql betiği çalışmayı tamamladıktan sonra aşağıdaki komutu kullanarak etkileşimli bir Beeline oturumu açın:After the flightdelays.hql script finishes running, use the following command to open an interactive Beeline session:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'
    
  6. jdbc:hive2://localhost:10001/> istemini aldığınızda, içeri aktarılan uçuş gecikme verilerini almak için aşağıdaki sorguyu kullanın:When you receive the jdbc:hive2://localhost:10001/> prompt, use the following query to retrieve data from the imported flight delay data:

    INSERT OVERWRITE DIRECTORY '/tutorials/flightdelays/output'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    SELECT regexp_replace(origin_city_name, '''', ''),
        avg(weather_delay)
    FROM delays
    WHERE weather_delay IS NOT NULL
    GROUP BY origin_city_name;
    

    Bu sorgu, hava durumundan kaynaklanan gecikmeler yaşayan şehirlerin bir listesini, ortalama gecikme süresi ile birlikte alır ve abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output konumuna kaydeder.This query retrieves a list of cities that experienced weather delays, along with the average delay time, and saves it to abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. Daha sonra, Sqoop bu konumdaki verileri okur ve Azure SQL Veritabanına aktarır.Later, Sqoop reads the data from this location and exports it to Azure SQL Database.

  7. Beeline’dan çıkmak için isteme !quit girin.To exit Beeline, enter !quit at the prompt.

SQL veritabanı tablosu oluşturmaCreate a SQL database table

Bu işlem için SQL veritabanı, sunucu adı gerekir.You need the server name from your SQL database for this operation. Sunucu adını bulmak için şu adımları tamamlayın.Complete these steps to find your server name.

  1. Azure Portal gidin.Go to the Azure portal.

  2. Seçin SQL veritabanları.Select SQL Databases.

  3. Kullanmayı seçerseniz veritabanının adına filtreleyin.Filter on the name of the database that you choose to use. Sunucu adı, Sunucu adı sütununda listelenir.The server name is listed in the Server name column.

  4. Kullanmak istediğiniz veritabanı adına filtreleyin.Filter on the name of the database that you want to use. Sunucu adı, Sunucu adı sütununda listelenir.The server name is listed in the Server name column.

    Azure SQL server ayrıntılarını almaGet Azure SQL server details

    SQL Veritabanına bağlanıp tablo oluşturmanın çok sayıda yolu vardır.There are many ways to connect to SQL Database and create a table. Aşağıdaki adımlarda HDInsight kümesinden FreeTDS kullanılır.The following steps use FreeTDS from the HDInsight cluster.

  5. FreeTDS yüklemek için küme ile kurulan bir SSH bağlantısından aşağıdaki komutu kullanın:To install FreeTDS, use the following command from an SSH connection to the cluster:

    sudo apt-get --assume-yes install freetds-dev freetds-bin
    
  6. Yükleme tamamlandıktan sonra SQL veritabanı sunucusuna bağlanmak için aşağıdaki komutu kullanın.After the installation completes, use the following command to connect to the SQL Database server.

    TDSVER=8.0 tsql -H '<server-name>.database.windows.net' -U '<admin-login>' -p 1433 -D '<database-name>'
    
    • Değiştirin <server-name> yer tutucusunu SQL veritabanı sunucu adı ile.Replace the <server-name> placeholder with the SQL Database server name.

    • Değiştirin <admin-login> yer tutucusunu SQL veritabanı için yönetici oturum açma ile.Replace the <admin-login> placeholder with the admin login for SQL Database.

    • Değiştirin <database-name> yer tutucu ile veritabanı adıReplace the <database-name> placeholder with the database name

    İstendiğinde, SQL veritabanı Yöneticisi oturum açma bilgileri için parolayı girin.When you're prompted, enter the password for the SQL Database admin login.

    Aşağıdakine benzer bir çıktı alırsınız:You receive output similar to the following text:

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    Default database being set to sqooptest
    1>
    
  7. Adresindeki 1> isteminde, aşağıdaki deyimleri girin:At the 1> prompt, enter the following statements:

    CREATE TABLE [dbo].[delays](
    [OriginCityName] [nvarchar](50) NOT NULL,
    [WeatherDelay] float,
    CONSTRAINT [PK_delays] PRIMARY KEY CLUSTERED
    ([OriginCityName] ASC))
    GO
    
  8. GO deyimi girildiğinde önceki deyimler değerlendirilir.When the GO statement is entered, the previous statements are evaluated.

    Sorgu adlı bir tablo oluşturur gecikmeleri, kümelenmiş dizinine sahip.The query creates a table named delays, which has a clustered index.

  9. Tablo oluşturulduğunu doğrulamak için aşağıdaki sorguyu kullanın:Use the following query to verify that the table is created:

    SELECT * FROM information_schema.tables
    GO
    

    Çıktı aşağıdaki metne benzer:The output is similar to the following text:

    TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME      TABLE_TYPE
    databaseName       dbo             delays        BASE TABLE
    
  10. Tsql yardımcı programından çıkış yapmak için 1> istemine exit girin.Enter exit at the 1> prompt to exit the tsql utility.

Dışarı aktarma ve verileri yüklemeExport and load the data

Önceki bölümde kopyaladığınız konumda dönüştürülmüş verileri abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output.In the previous sections, you copied the transformed data at the location abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. Bu bölümde, verileri dışarı aktarmak için Sqoop kullanma abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output Azure SQL veritabanı'nda, oluşturduğunuz tabloya.In this section, you use Sqoop to export the data from abfs://<file-system-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output to the table you created in the Azure SQL database.

  1. Sqoop’un SQL veritabanınızı görebildiğini doğrulamak için aşağıdaki komutu kullanın:Use the following command to verify that Sqoop can see your SQL database:

    sqoop list-databases --connect jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433 --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD>
    

    Komut, oluşturduğunuz veritabanı dahil olmak üzere, veritabanlarının listesini döndürür gecikmeleri tablo.The command returns a list of databases, including the database in which you created the delays table.

  2. Verileri dışarı aktarmak için aşağıdaki komutu kullanın hivesampletable tablo gecikmeleri tablosu:Use the following command to export data from the hivesampletable table to the delays table:

    sqoop export --connect 'jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433;database=<DATABASE_NAME>' --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD> --table 'delays' --export-dir 'abfs://<file-system-name>@.dfs.core.windows.net/tutorials/flightdelays/output' --fields-terminated-by '\t' -m 1
    

    Sqoop içeren veritabanına bağlayan gecikmeleri tablo ve dışarı veri /tutorials/flightdelays/output dizininden gecikmeleri tablo.Sqoop connects to the database that contains the delays table, and exports data from the /tutorials/flightdelays/output directory to the delays table.

  3. Sonra sqoop komut tamamlandığında, veritabanına bağlanmak için tsql yardımcı programını kullanın:After the sqoop command finishes, use the tsql utility to connect to the database:

    TDSVER=8.0 tsql -H <SERVER_NAME>.database.windows.net -U <ADMIN_LOGIN> -P <ADMIN_PASSWORD> -p 1433 -D <DATABASE_NAME>
    
  4. Verileri dışarı aktarılan doğrulamak için aşağıdaki deyimleri kullanın gecikmeleri tablosu:Use the following statements to verify that the data was exported to the delays table:

    SELECT * FROM delays
    GO
    

    Tabloda verilerin listesini görürsünüz.You should see a listing of data in the table. Tablo, şehir adını ve bu şehre ait ortalama uçuş gecikme süresini içerir.The table includes the city name and the average flight delay time for that city.

  5. Girin exit tsql yardımcı programı'ndan çıkmak için.Enter exit to exit the tsql utility.

Kaynakları temizlemeClean up resources

Bu öğreticide kullanılan tüm kaynakları önceden var olan.All resources used in this tutorial are preexisting. Temizleme gerekli değildir.No cleanup is necessary.

Sonraki adımlarNext steps

HDInsight verilerle çalışma hakkında daha fazla bilgi için şu makaleye bakın:To learn more ways to work with data in HDInsight, see the following article: