Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här självstudien ska du utföra en ETL-åtgärd: extrahera, transformera och läsa in data. Du tar en RÅDATA-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 självstudien lär du 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 hjälp av Sqoop.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Förutsättningar
- Ett lagringskonto som har ett hierarkiskt namnområde (Azure Data Lake Storage) som har konfigurerats för HDInsight - Se Använda Azure Data Lake Storage med Azure HDInsight-kluster. 
- Ett Linux-baserat Hadoop-kluster i HDInsight - Se Snabbstart: Kom igång med Apache Hadoop och Apache Hive i Azure HDInsight med hjälp av Azure Portal. 
- Azure SQL Database - Du använder Azure SQL Database som måldatalager. Om du inte har någon databas i SQL Database kan du läsa Skapa en databas i Azure SQL Database i Azure Portal. 
- Azure CLI - Om du inte har installerat Azure CLI läser du Installera Azure CLI. 
- En SSH-klient (Secure Shell) - Mer information finns i Ansluta till HDInsight (Hadoop) med hjälp av SSH. 
Ladda ned, extrahera och ladda sedan upp data
I det här avsnittet laddar du ned exempel på flygdata. Sedan laddar du upp dessa data till ditt HDInsight-kluster och kopierar sedan dessa data till ditt Data Lake Storage-konto.
- Ladda ned filen On_Time_Reporting_Carrier_On_Time_Performance_1987_present_2016_1.zip . Den här filen innehåller flygdata. 
- Öppna en kommandotolk och använd följande Secure Copy-kommando (Scp) för att ladda upp .zip-filen till HDInsight-klustrets huvudnod: - scp On_Time_Reporting_Carrier_On_Time_Performance_1987_present_2016_1.zip <ssh-user-name>@<cluster-name>-ssh.azurehdinsight.net:- 
              <ssh-user-name>Ersätt platshållaren med SSH-användarnamnet 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 ditt SSH-användarnamn 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. Exempel:- scp -i ~/.ssh/id_rsa <file_name>.zip <user-name>@<cluster-name>-ssh.azurehdinsight.net:
- 
              
- 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.net
- Använd följande kommando för att packa upp .zip-filen: - unzip <file-name>.zip- Kommandot extraherar en .csv-fil. 
- Använd följande kommando för att skapa Data Lake Storage-containern. - hadoop fs -D "fs.azure.createRemoteFileSystemDuringInitialization=true" -ls abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/- <container-name>Ersätt 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/data
- Använd följande kommando för att kopiera .csv-filen till katalogen: - hdfs dfs -put "On_Time_Reporting_Carrier_On_Time_Performance_(1987_present)_2016_1.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. 
Omvandla 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 - <container-name>ersätta platshållarna och- <storage-account-name>med containern och lagringskontots namn. Kopiera och klistra sedan in texten i nanokonsolen genom att trycka på SKIFT-tangenten tillsammans med höger musmarkeringsknappen.- 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 FlightDate, substring(UNIQUE_CARRIER, 2, length(UNIQUE_CARRIER) -1) AS IATA_CODE_Reporting_Airline, substring(CARRIER, 2, length(CARRIER) -1) AS Reporting_Airline, substring(FL_NUM, 2, length(FL_NUM) -1) AS Flight_Number_Reporting_Airline, ORIGIN_AIRPORT_ID AS OriginAirportID, substring(ORIGIN, 2, length(ORIGIN) -1) AS OriginAirportSeqID, substring(ORIGIN_CITY_NAME, 2) AS OriginCityName, substring(ORIGIN_STATE_ABR, 2, length(ORIGIN_STATE_ABR) -1) AS OriginState, DEST_AIRPORT_ID AS DestAirportID, substring(DEST, 2, length(DEST) -1) AS DestAirportSeqID, substring(DEST_CITY_NAME,2) AS DestCityName, substring(DEST_STATE_ABR, 2, length(DEST_STATE_ABR) -1) AS DestState, DEP_DELAY_NEW AS DepDelay, ARR_DELAY_NEW AS ArrDelay, CARRIER_DELAY AS CarrierDelay, WEATHER_DELAY AS WeatherDelay, NAS_DELAY AS NASDelay, SECURITY_DELAY AS SecurityDelay, LATE_AIRCRAFT_DELAY AS LateAircraftDelay FROM delays_raw;
- Spara filen genom att skriva CTRL+X och sedan skriva - Ynär du uppmanas till det.
- Om du vill starta Hive och köra - flightdelays.hqlfilen använder du följande kommando:- beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -f flightdelays.hql
- När skriptet - flightdelays.hqlhar körts kan du använda 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(OriginCityName, '''', ''), avg(WeatherDelay) FROM delays WHERE WeatherDelay IS NOT NULL GROUP BY OriginCityName;- 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-bin
- Nä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>'- <server-name>Ersätt platshållaren med det logiska SQL-servernamnet.
- <admin-login>Ersätt platshållaren med administratörsanvändarnamnet 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 administratörsanvändarnamnet för SQL Database. - 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)) GO
- Nä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 GO- De utdata som genereras liknar följande text: - TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE databaseName dbo delays BASE TABLE
- Skriv - exitvid uppmaningen- 1>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 från abfs://<container-name>@<storage-account-name>.dfs.core.windows.net/tutorials/flightdelays/output till den tabell 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 1- Sqoop 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 GO- Du 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: