Adatok másolása Data Lake Storage Gen1 és Azure SQL Adatbázis között a Sqoop használatával

Megtudhatja, hogyan importálhat és exportálhat adatokat az Apache Sqoop használatával Azure SQL Database és Azure Data Lake Storage Gen1 között.

Mi az a Sqoop?

A Big Data-alkalmazások természetes választás a strukturálatlan és félig strukturált adatok, például a naplók és a fájlok feldolgozásához. Előfordulhat azonban, hogy a relációs adatbázisokban tárolt strukturált adatokat is fel kell dolgoznia.

Az Apache Sqoop egy olyan eszköz, amely relációs adatbázisok és big data-adattárak közötti adatátvitelre szolgál, például Data Lake Storage Gen1. Segítségével adatokat importálhat egy relációsadatbázis-kezelő rendszerből (RDBMS), például Azure SQL Database-ből a Data Lake Storage Gen1. Ezután big data számítási feladatok használatával átalakíthatja és elemezheti az adatokat, majd újra exportálhatja az adatokat egy RDBMS-be. Ebben a cikkben a Azure SQL Database adatbázisát fogja használni relációs adatbázisként az importáláshoz/exportáláshoz.

Előfeltételek

Mielőtt hozzákezdene, rendelkeznie kell az alábbiakval:

Mintatáblák létrehozása az adatbázisban

  1. Első lépésként hozzon létre két mintatáblát az adatbázisban. A SQL Server Management Studio vagy a Visual Studio használatával csatlakozzon az adatbázishoz, majd futtassa az alábbi lekérdezéseket.

    Tábla létrehozása1

    CREATE TABLE [dbo].[Table1](
    [ID] [int] NOT NULL,
    [FName] [nvarchar](50) NOT NULL,
    [LName] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
           (
                  [ID] ASC
           )
    ) ON [PRIMARY]
    GO
    

    Tábla létrehozása2

    CREATE TABLE [dbo].[Table2](
    [ID] [int] NOT NULL,
    [FName] [nvarchar](50) NOT NULL,
    [LName] [nvarchar](50) NOT NULL,
     CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED
           (
                  [ID] ASC
           )
    ) ON [PRIMARY]
    GO
    
  2. Az alábbi parancs futtatásával adjon hozzá néhány mintaadatot a Table1 táblához. Hagyja üresen a Table2 táblát . Később adatokat fog importálni a Table1 táblából a Data Lake Storage Gen1. Ezután adatokat fog exportálni Data Lake Storage Gen1 a Table2 táblába.

    INSERT INTO [dbo].[Table1] VALUES (1,'Neal','Kell'), (2,'Lila','Fulton'), (3, 'Erna','Myers'), (4,'Annette','Simpson');
    

HdInsight-fürtből származó Sqoop használata Data Lake Storage Gen1

Egy HDInsight-fürt már rendelkezik elérhető Sqoop-csomagokkal. Ha úgy konfigurálta a HDInsight-fürtöt, hogy a Data Lake Storage Gen1 további tárolóként használja, a Sqoop használatával (konfigurációmódosítások nélkül) adatokat importálhat/exportálhat egy relációs adatbázis, például a Azure SQL Database és egy Data Lake Storage Gen1-fiók között.

  1. Ebben a cikkben feltételezzük, hogy létrehozott egy Linux-fürtöt, ezért SSH-val kell csatlakoznia a fürthöz. Lásd: Csatlakozás Linux-alapú HDInsight-fürthöz.

  2. Ellenőrizze, hogy hozzáfér-e az Data Lake Storage Gen1-fiókhoz a fürtből. Futtassa a következő parancsot az SSH-parancssorból:

    hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net/
    

    Ez a parancs a Data Lake Storage Gen1 fiókban található fájlok/mappák listáját tartalmazza.

Adatok importálása Azure SQL adatbázisból Data Lake Storage Gen1

  1. Lépjen arra a könyvtárra, ahol a Sqoop-csomagok elérhetők. Ez a hely általában a következő /usr/hdp/<version>/sqoop/bin: .

  2. Importálja az adatokat a Table1 táblából a Data Lake Storage Gen1 fiókba. Használja a következő szintaxist:

    sqoop-import --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table1 --target-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1
    

    Az sql-database-server-name helyőrző annak a kiszolgálónak a nevét jelöli, amelyen az adatbázis fut. Az sql-database-name helyőrző a tényleges adatbázisnevet jelöli.

    Példa:

    sqoop-import --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table1 --target-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1
    
  3. Ellenőrizze, hogy az adatok át lettek-e adva a Data Lake Storage Gen1 fiókba. Futtassa az alábbi parancsot:

    hdfs dfs -ls adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/
    

    A következő kimenetnek kell megjelennie.

    -rwxrwxrwx   0 sshuser hdfs          0 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/_SUCCESS
    -rwxrwxrwx   0 sshuser hdfs         12 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00000
    -rwxrwxrwx   0 sshuser hdfs         14 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00001
    -rwxrwxrwx   0 sshuser hdfs         13 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00002
    -rwxrwxrwx   0 sshuser hdfs         18 2016-02-26 21:09 adl://hdiadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1/part-m-00003
    

    Minden rész-m-* fájl megfelel a Table1 forrástábla egy sorának. Az ellenőrzéshez megtekintheti a part-m-* fájlok tartalmát.

Adatok exportálása Data Lake Storage Gen1-ból Azure SQL Database-be

  1. Exportálja az adatokat a Data Lake Storage Gen1-fiókból az Azure SQL Database tábla2 táblájába. Használja az alábbi szintaxist.

    sqoop-export --connect "jdbc:sqlserver://<sql-database-server-name>.database.windows.net:1433;username=<username>@<sql-database-server-name>;password=<password>;database=<sql-database-name>" --table Table2 --export-dir adl://<data-lake-storage-gen1-name>.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
    

    Példa:

    sqoop-export --connect "jdbc:sqlserver://mysqoopserver.database.windows.net:1433;username=user1@mysqoopserver;password=<password>;database=mysqoopdatabase" --table Table2 --export-dir adl://myadlsg1store.azuredatalakestore.net/Sqoop/SqoopImportTable1 --input-fields-terminated-by ","
    
  2. Ellenőrizze, hogy az adatok feltöltődtek-e a SQL Database táblába. A SQL Server Management Studio vagy a Visual Studio használatával csatlakozzon a Azure SQL-adatbázishoz, majd futtassa a következő lekérdezést.

    SELECT * FROM TABLE2
    

    Ennek a parancsnak a következő kimenettel kell rendelkeznie.

     ID  FName    LName
    -------------------
    1    Neal     Kell
    2    Lila     Fulton
    3    Erna     Myers
    4    Annette  Simpson
    

Teljesítménnyel kapcsolatos szempontok a Sqoop használata során

A Sqoop-feladat teljesítményhangolásával kapcsolatos információkért az adatok Data Lake Storage Gen1 való másolásához tekintse meg a Sqoop teljesítményével foglalkozó blogbejegyzést.

Következő lépések