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:
- Egy Azure-előfizetés. Lásd: Ingyenes Azure-fiók létrehozása.
- Egy Azure Data Lake Storage Gen1-fiók. A fiók létrehozásával kapcsolatos utasításokért lásd: Első lépések az Azure Data Lake Storage Gen1-ben
- Azure HDInsight-fürt egy Data Lake Storage Gen1-fiókhoz való hozzáféréssel. Lásd: HDInsight-fürt létrehozása Data Lake Storage Gen1. Ez a cikk feltételezi, hogy rendelkezik egy HDInsight Linux-fürttel Data Lake Storage Gen1 hozzáféréssel.
- Azure SQL Database Az adatbázis Azure SQL database-ben való létrehozásával kapcsolatos utasításokért lásd: Adatbázis létrehozása Azure SQL Database-ben
Mintatáblák létrehozása az adatbázisban
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
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.
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.
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
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
: .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
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
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 ","
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.