Bagikan melalui


Menentukan dan menggunakan konteks komputasi (tutorial SQL Server dan RevoScaleR)

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Ini adalah tutorial 4 dari seri tutorial RevoScaleR tentang cara menggunakan fungsi RevoScaleR dengan SQL Server.

Dalam tutorial sebelumnya, Anda menggunakan fungsi RevoScaleR untuk memeriksa objek data. Tutorial ini memperkenalkan fungsi RxInSqlServer , yang memungkinkan Anda menentukan konteks komputasi untuk SQL Server jarak jauh. Dengan konteks komputasi jarak jauh, Anda dapat mengalihkan eksekusi R dari sesi lokal ke sesi jarak jauh di server.

  • Pelajari elemen konteks komputasi SQL Server jarak jauh
  • Mengaktifkan pelacakan pada objek konteks komputasi

RevoScaleR mendukung beberapa konteks komputasi: Hadoop, Spark di HDFS, dan SQL Server dalam database. Untuk SQL Server, fungsi RxInSqlServer digunakan untuk koneksi server dan meneruskan objek antara komputer lokal dan konteks eksekusi jarak jauh.

Membuat dan mengatur konteks komputasi

Fungsi RxInSqlServer yang membuat konteks komputasi SQL Server menggunakan informasi berikut:

  • String koneksi untuk instans SQL Server
  • Spesifikasi tentang bagaimana output harus ditangani
  • Spesifikasi opsional direktori data bersama
  • Argumen opsional yang mengaktifkan pelacakan atau menentukan tingkat pelacakan

Bagian ini memandikan Anda melalui setiap bagian.

  1. Tentukan string koneksi untuk instans tempat komputasi dilakukan. Anda dapat menggunakan kembali string koneksi yang Anda buat sebelumnya.

    Menggunakan login SQL

    sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
    

    Menggunakan autentikasi Windows

    sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Tentukan bagaimana Anda ingin output ditangani. Skrip berikut mengarahkan sesi R lokal untuk menunggu hasil pekerjaan R di server sebelum memproses operasi berikutnya. Ini juga menekan output dari komputasi jarak jauh agar tidak muncul di sesi lokal.

    sqlWait <- TRUE
    sqlConsoleOutput <- FALSE
    

    Argumen tunggu ke RxInSqlServer mendukung opsi ini:

    • BENAR. Pekerjaan dikonfigurasi sebagai pemblokiran dan tidak kembali hingga selesai atau gagal.

    • FALSE. Pekerjaan dikonfigurasi sebagai tidak memblokir dan segera kembali, memungkinkan Anda untuk terus menjalankan kode R lainnya. Namun, bahkan dalam mode non-pemblokiran, koneksi klien dengan SQL Server harus dipertahankan saat pekerjaan berjalan.

  3. Secara opsional, tentukan lokasi direktori lokal untuk penggunaan bersama oleh sesi R lokal dan oleh komputer SQL Server jarak jauh dan akunnya.

    sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
    

    Jika Anda ingin membuat direktori tertentu secara manual untuk berbagi, Anda bisa menambahkan baris seperti berikut ini:

    dir.create(sqlShareDir, recursive = TRUE)
    
  4. Teruskan argumen ke konstruktor RxInSqlServer untuk membuat objek konteks komputasi.

    sqlCompute <- RxInSqlServer(  
         connectionString = sqlConnString,
         wait = sqlWait,
         consoleOutput = sqlConsoleOutput)
    

    Sintaks untuk RxInSqlServer terlihat hampir identik dengan fungsi RxSqlServerData yang Anda gunakan sebelumnya untuk menentukan sumber data. Namun, ada beberapa perbedaan penting.

    • Objek sumber data, yang ditentukan dengan menggunakan fungsi RxSqlServerData, menentukan tempat data disimpan.

    • Sebaliknya, konteks komputasi, yang ditentukan dengan menggunakan fungsi RxInSqlServer menunjukkan di mana agregasi dan komputasi lainnya akan berlangsung.

    Menentukan konteks komputasi tidak memengaruhi komputasi R generik lainnya yang mungkin Anda lakukan di stasiun kerja Anda, dan tidak mengubah sumber data. Misalnya, Anda dapat menentukan file teks lokal sebagai sumber data tetapi mengubah konteks komputasi ke SQL Server dan melakukan semua pembacaan dan ringkasan Anda pada data di komputer SQL Server.

  5. Aktifkan konteks komputasi jarak jauh.

    rxSetComputeContext(sqlCompute)
    
  6. Mengembalikan informasi tentang konteks komputasi, termasuk propertinya.

    rxGetComputeContext()
    
  7. Reset konteks komputasi kembali ke komputer lokal dengan menentukan kata kunci "lokal" (tutorial berikutnya menunjukkan menggunakan konteks komputasi jarak jauh).

    rxSetComputeContext("local")
    

Tip

Untuk daftar kata kunci lain yang didukung oleh fungsi ini, ketik help("rxSetComputeContext") dari baris perintah R.

Aktifkan pelacakan

Terkadang operasi berfungsi pada konteks lokal Anda, tetapi memiliki masalah saat berjalan dalam konteks komputasi jarak jauh. Jika Anda ingin menganalisis masalah atau memantau performa, Anda dapat mengaktifkan pelacakan dalam konteks komputasi, untuk mendukung pemecahan masalah run-time.

  1. Buat konteks komputasi baru yang menggunakan string koneksi yang sama, tetapi tambahkan argumen traceEnabled dan traceLevel ke konstruktor RxInSqlServer.

    sqlComputeTrace <- RxInSqlServer(
        connectionString = sqlConnString,
        #shareDir = sqlShareDir,
        wait = sqlWait,
        consoleOutput = sqlConsoleOutput,
        traceEnabled = TRUE,
        traceLevel = 7)
    

    Dalam contoh ini, properti traceLevel diatur ke 7, yang berarti "tampilkan semua informasi pelacakan."

  2. Gunakan fungsi rxSetComputeContext untuk menentukan konteks komputasi yang diaktifkan pelacakan berdasarkan nama.

    rxSetComputeContext(sqlComputeTrace)
    

Langkah berikutnya

Pelajari cara beralih konteks komputasi untuk menjalankan kode R di server atau secara lokal.