Aracılığıyla paylaş


Sqoop kullanarak Data Lake Storage 1. Nesil ve Azure SQL Veritabanı arasında veri kopyalama

Azure SQL Veritabanı ile Azure Data Lake Storage 1. Nesil arasında verileri içeri ve dışarı aktarmak için Apache Sqoop'un nasıl kullanılacağını öğrenin.

Sqoop nedir?

Büyük veri uygulamaları, günlükler ve dosyalar gibi yapılandırılmamış ve yarı yapılandırılmış verileri işlemek için doğal bir seçimdir. Ancak ilişkisel veritabanlarında depolanan yapılandırılmış verileri işlemeniz de gerekebilir.

Apache Sqoop, ilişkisel veritabanları ile Data Lake Storage 1. Nesil gibi büyük bir veri deposu arasında veri aktarmak için tasarlanmış bir araçtır. Azure SQL Veritabanı gibi bir ilişkisel veritabanı yönetim sisteminden (RDBMS) verileri Data Lake Storage 1. Nesil aktarmak için bunu kullanabilirsiniz. Daha sonra büyük veri iş yüklerini kullanarak verileri dönüştürüp analiz edebilir ve ardından verileri bir RDBMS'ye geri aktarabilirsiniz. Bu makalede, Azure SQL Veritabanı'ndaki bir veritabanını içeri/dışarı aktarmak için ilişkisel veritabanınız olarak kullanırsınız.

Önkoşullar

Başlamadan önce aşağıdakilere sahip olmanız gerekir:

Veritabanında örnek tablolar oluşturma

  1. Başlamak için veritabanında iki örnek tablo oluşturun. Veritabanına bağlanmak için SQL Server Management Studio veya Visual Studio'yu kullanın ve ardından aşağıdaki sorguları çalıştırın.

    Tablo1 Oluştur

    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
    

    Tablo2 Oluştur

    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. Tablo1'e örnek veriler eklemek için aşağıdaki komutu çalıştırın. Tablo2'i boş bırakın. Daha sonra Tablo1'den Data Lake Storage 1. Nesil'a veri aktaracaksınız. Ardından verileri Data Lake Storage 1. Nesil Tablo2'ye aktaracaksınız.

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

Data Lake Storage 1. Nesil erişimi olan bir HDInsight kümesinden Sqoop kullanma

HDInsight kümesinde Sqoop paketleri zaten mevcuttur. HDInsight kümesini ek depolama alanı olarak Data Lake Storage 1. Nesil kullanacak şekilde yapılandırdıysanız, Azure SQL Veritabanı gibi bir ilişkisel veritabanı ile Data Lake Storage 1. Nesil hesabı arasında verileri içeri/dışarı aktarmak için Sqoop'u (yapılandırma değişiklikleri olmadan) kullanabilirsiniz.

  1. Bu makalede, kümeye bağlanmak için SSH kullanmanız gerektiği için bir Linux kümesi oluşturduğunuz varsayılır. Bkz . Linux tabanlı HDInsight kümesine bağlanma.

  2. kümeden Data Lake Storage 1. Nesil hesabına erişip erişemeyeceğinizi doğrulayın. SSH isteminden aşağıdaki komutu çalıştırın:

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

    Bu komut, Data Lake Storage 1. Nesil hesabındaki dosyaların/klasörlerin listesini sağlar.

Azure SQL Veritabanından Data Lake Storage 1. Nesil'a veri aktarma

  1. Sqoop paketlerinin kullanılabildiği dizine gidin. Genellikle, bu konum şeklindedir /usr/hdp/<version>/sqoop/bin.

  2. Tablo1'den verileri Data Lake Storage 1. Nesil hesabına aktarın. Aşağıdaki söz dizimini kullanın:

    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
    

    sql-database-server-name yer tutucusu, veritabanının çalıştığı sunucunun adını temsil eder. sql-database-name yer tutucusu gerçek veritabanı adını temsil eder.

    Örneğin,

    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. Verilerin Data Lake Storage 1. Nesil hesabına aktarıldığını doğrulayın. Şu komutu çalıştırın:

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

    Aşağıdaki çıkışı görmelisiniz.

    -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
    

    Her part-m-* dosyası, kaynak tablodaki Tablo1 satırına karşılık gelir. Doğrulamak için part-m-* dosyalarının içeriğini görüntüleyebilirsiniz.

verileri Data Lake Storage 1. Nesil Azure SQL Veritabanına aktarma

  1. Data Lake Storage 1. Nesil hesabındaki verileri Azure SQL Veritabanındaki boş tablo olan Tablo2'ye aktarın. Aşağıdaki söz dizimini kullanın.

    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 ","
    

    Örneğin,

    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. Verilerin SQL Veritabanı tablosuna yüklendiğini doğrulayın. Azure SQL Veritabanına bağlanmak için SQL Server Management Studio veya Visual Studio'yu kullanın ve ardından aşağıdaki sorguyu çalıştırın.

    SELECT * FROM TABLE2
    

    Bu komut aşağıdaki çıkışa sahip olmalıdır.

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

Sqoop kullanırken performansla ilgili dikkat edilmesi gerekenler

verileri Data Lake Storage 1. Nesil kopyalamak için Sqoop işinizin performansını ayarlama hakkında bilgi için Sqoop performans blog gönderisine bakın.

Sonraki adımlar