Självstudie: Extrahera, transformera och läsa in data med hjälp av Azure HDInsight
I den här självstudien ska du utföra en ETL-åtgärd: extrahera, transformera och läsa in data. Du tar en CSV-rådatafil, importerar den till ett Azure HDInsight-kluster, transformerar den med Apache Hive och läser in den i Azure SQL Database med Apache Sqoop.
I den här guiden får du lära dig att:
- Extrahera och ladda upp data till ett HDInsight-kluster.
- Transformera data med hjälp av Apache Hive.
- Läs in data till Azure SQL Database med sqoop.
Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
Ett Azure Data Lake Storage Gen2-lagringskonto som har konfigurerats för HDInsight
Se Använda Azure Data Lake Storage Gen2 med Azure HDInsight-kluster.
Ett Linux-baserat Hadoop-kluster i HDInsight
Azure SQL Database: Du använder Azure SQL Database som måldatalager. Om du inte har en databas i SQL Database kan du se Skapa en databas i Azure SQL Database i Azure Portal.
Azure CLI: Om du inte har installerat Azure CLI kan du gå till Installera Azure CLI.
En Secure Shell-klient (SSH): Mer information finns i Anslut till HDInsight (Hadoop) med hjälp av SSH.
Ladda ned flygdata
Gå till Research and Innovative Technology Administration, Bureau of Transportation Statistics.
Välj följande värden på sidan:
Name Värde Filtrera år 2013 Filtrera period Januari Fält 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. Rensa alla andra fält.
Välj Hämta. Du får en .zip-fil med de datafält du valde.
Extrahera och ladda upp data
I det här avsnittet laddar du upp data till ditt HDInsight-kluster och kopierar sedan dessa data till ditt Data Lake Storage Gen2-konto.
Öppna en kommandotolk och använd följande Secure Copy-kommando (Scp) för att ladda upp .zip-filen till HDInsight-klustrets huvudnod:
scp <file-name>.zip <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net:<file-name.zip>- Ersätt platshållaren
<file-name>med namnet på .zip-filen. - Ersätt platshållaren
<ssh-user-name>med SSH-inloggningen för HDInsight-klustret. - Ersätt platshållaren
<cluster-name>med namnet på HDInsight-klustret.
Om du använder ett lösenord för att autentisera din SSH-inloggning uppmanas du att ange lösenordet.
Om du använder en offentlig nyckel kan du behöva använda
-i-parametern och ange sökvägen till motsvarande privata nyckel. Till exempelscp -i ~/.ssh/id_rsa <file_name>.zip <user-name>@<cluster-name>-ssh.azurehdinsight.net:.- Ersätt platshållaren
När uppladdningen är klar kan du ansluta till klustret med hjälp av SSH. Öppna kommandotolken och ange följande kommando:
ssh <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.netAnvänd följande kommando för att packa upp .zip-filen:
unzip <file-name>.zipKommandot extraherar en .csv-fil.
Använd följande kommando för att skapa Data Lake-Storage Gen2-containern.
hadoop fs -D "fs.azure.createRemoteFileSystemDuringInitialization=true" -ls abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/Ersätt
<container-name>platshållaren med det namn som du vill ge containern.Ersätt platshållaren
<storage-account-name>med namnet på ditt lagringskonto.Använd följande kommando för att skapa en katalog.
hdfs dfs -mkdir -p abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/dataAnvänd följande kommando för att kopiera .csv-filen till katalogen:
hdfs dfs -put "<file-name>.csv" abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/data/Använd citattecken runt filnamnet om filnamnet innehåller blanksteg eller specialtecken.
Transformera data
I det här avsnittet ska du använda Beeline för att köra ett Apache Hive-jobb.
Som en del av Apache Hive-jobbet importerar du data från CSV-filen till en Apache Hive-tabell med namnet delays.
Från den SSH-prompt som du redan har för HDInsight-klustret använder du följande kommando för att skapa och redigera en ny fil med namnet flightdelays.hql:
nano flightdelays.hqlÄndra följande text genom att ersätta
<container-name><storage-account-name>platshållarna och med namnet på containern och lagringskontot. Kopiera och klistra sedan in texten i nano-konsolen genom att trycka på Skift-tangenten tillsammans med höger musknapp.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://<container-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://<container-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;Spara filen med hjälp av CTRL+X och skriv sedan
Ynär du tillfrågas.Starta Hive och kör
flightdelays.hqlfilen med följande kommando:beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hqlNär skriptet
flightdelays.hqlhar körts klart använder du följande kommando för att öppna en interaktiv Beeline-session:beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http'När du får uppmaningen
jdbc:hive2://localhost:10001/>ska du använda följande fråga för att hämta data från de importerade flygförseningsdata: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;Frågan returnerar en lista över städer som berörs av förseningar på grund av vädret samt genomsnittlig förseningstid och sparar det till
abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. Senare läser Sqoop data från den här platsen och exporterar dem till Azure SQL Database.Om du vill avsluta Beeline skriver du
!quitvid uppmaningen.
Skapa en SQL-databastabell
Du behöver servernamnet från SQL Database för den här åtgärden. Slutför stegen nedan för att hitta namnet på servern.
Gå till Azure-portalen.
Välj SQL-databaser.
Filtrera efter namnet på den databas som du vill använda. Serverns namn finns i kolumnen Servernamn.
Filtrera efter namnet på den databas som du vill använda. Serverns namn finns i kolumnen Servernamn.

Det finns många sätt att ansluta till SQL Database och skapa en tabell. Följande steg använder FreeTDS från HDInsight-klustret.
För att installera FreeTDS använder du följande kommando från en SSH-anslutning till klustret:
sudo apt-get --assume-yes install freetds-dev freetds-binNär installationen är klar använder du följande kommando för att ansluta till SQL Database.
TDSVER=8.0 tsql -H '<server-name>.database.windows.net' -U '<admin-login>' -p 1433 -D '<database-name>'Ersätt
<server-name>platshållaren med det logiska SQL servernamnet.Ersätt platshållaren
<admin-login>med administratörsinloggningen för SQL Database.Ersätt platshållaren
<database-name>med databasnamnet
När du uppmanas att göra det anger du lösenordet för SQL Database-administratörsinloggningen.
Du får utdata som liknar följande text:
locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" Default database being set to sqooptest 1>Ange följande instruktion vid
1>-prompten:CREATE TABLE [dbo].[delays]( [OriginCityName] [nvarchar](50) NOT NULL, [WeatherDelay] float, CONSTRAINT [PK_delays] PRIMARY KEY CLUSTERED ([OriginCityName] ASC)) GONär instruktionen
GOhar angivits värderas de föregående instruktionerna.Frågan skapar en tabell med namnet delays, som har ett grupperat index.
Använd följande fråga för att kontrollera att tabellen har skapats:
SELECT * FROM information_schema.tables GODe utdata som genereras liknar följande text:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE databaseName dbo delays BASE TABLESkriv
exitvid uppmaningen1>för att avsluta tsql-verktyget.
Exportera och läsa in data
I föregående avsnitt kopierade du transformerade data på platsen abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output. I det här avsnittet använder du Sqoop för att exportera data abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output från till tabellen som du skapade i Azure SQL Database.
Använd följande kommando för att verifiera att Sqoop kan se din SQL-databas:
sqoop list-databases --connect jdbc:sqlserver://<SERVER_NAME>.database.windows.net:1433 --username <ADMIN_LOGIN> --password <ADMIN_PASSWORD>Det här kommandot returnerar en lista med databaser, däribland databasen som du skapade delays-tabellen i.
Använd följande kommando för att exportera data från tabellen hivesampletable till tabellen delays:
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://<container-name>@.dfs.core.windows.net/tutorials/flightdelays/output' --fields-terminated-by '\t' -m 1Sqoop ansluter till databasen som innehåller tabellen delays och exporterar data från
/tutorials/flightdelays/output-katalogen till tabellen delays.När
sqoop-kommandot avslutas använder du tsql-verktyget för att ansluta till databasen:TDSVER=8.0 tsql -H <SERVER_NAME>.database.windows.net -U <ADMIN_LOGIN> -P <ADMIN_PASSWORD> -p 1433 -D <DATABASE_NAME>Använd följande instruktioner för att verifiera att data exporterades till tabellen delays:
SELECT * FROM delays GODu ska se en lista över data i tabellen. Tabellen innehåller stadens namn och genomsnittlig flygförseningstid för den staden.
Skriv
exitför att avsluta tsql-verktyget.
Rensa resurser
Alla resurser som använts i den här självstudien fanns redan. Ingen rensning krävs.
Nästa steg
Mer information om att arbeta med data i HDInsight finns i följande artikel: