Zdefiniuj i używaj kontekstów obliczeniowych (samouczek SQL Server i RevoScaleR)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

To jest czwarty samouczek z serii RevoScaleR, jak korzystać z funkcji RevoScaleR z SQL Server.

W poprzednim samouczku używałeś funkcji RevoScaleR do analizowania obiektów danych. Ten samouczek wprowadza funkcję RxInSqlServer, która pozwala zdefiniować kontekst obliczeniowy dla zdalnego SQL Server. W kontekście zdalnym obliczeniowym możesz przenieść wykonanie R z lokalnej sesji na zdalną sesję na serwerze.

  • Poznaj elementy zdalnego kontekstu obliczeniowego SQL Server
  • Włącz śledzenie na obiekcie kontekstu obliczeniowego

RevoScaleR obsługuje wiele kontekstów obliczeniowych: Hadoop, Spark na HDFS oraz SQL Server w bazie danych. W przypadku SQL Server funkcja RxInSqlServer służy do połączeń z serwerem i przekazywania obiektów między komputerem lokalnym a zdalnym kontekstem wykonawczym.

Stwórz i ustaw kontekst obliczeniowy

Funkcja RxInSqlServer tworząca kontekst obliczeniowy SQL Server wykorzystuje następujące informacje:

  • Ciąg połączeń dla instancji SQL Server
  • Specyfikacja sposobu obsługi wyników
  • Opcjonalna specyfikacja współdzielonego katalogu danych
  • Opcjonalne argumenty umożliwiające śledzenie lub określające poziom śladu

Ta sekcja przeprowadza cię przez każdą z nich.

  1. Określ parametry połączenia dla instancji, w której wykonywane są obliczenia. Możesz ponownie użyć parametry połączenia, który wcześniej stworzyłeś.

    Korzystanie z logowania SQL

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

    Korzystanie z Windows authentication

    sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Określ, jak mają zostać obsłużone dane wyjściowe. Poniższy skrypt kieruje lokalną sesję R do oczekiwania na wyniki zadań R na serwerze przed przetworzeniem kolejnej operacji. Blokuje także pojawienie się wyników zdalnych obliczeń w sesji lokalnej.

    sqlWait <- TRUE
    sqlConsoleOutput <- FALSE
    

    Argument wait funkcji RxInSqlServer obsługuje następujące opcje:

    • TRUE. Zadanie jest skonfigurowane jako blokujące i nie wraca, dopóki nie zostanie ukończone lub nie zakończy się niepowodzeniem.

    • FAŁSZ. Zadania są skonfigurowane jako nieblokujące i natychmiast wracają, co pozwala kontynuować uruchamianie innego kodu R. Jednak nawet w trybie nieblokującym połączenie klienta z SQL Server musi być utrzymywane podczas działania zadania.

  3. Opcjonalnie można określić lokalizację lokalnego katalogu do wspólnego użytku przez lokalną sesję R oraz zdalny komputer SQL Server i jego konta.

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

    Jeśli chcesz ręcznie utworzyć konkretny katalog do udostępniania, możesz dodać linię taką:

    dir.create(sqlShareDir, recursive = TRUE)
    
  4. Przekaż argumenty konstruktorowi RxInSqlServer w celu utworzenia obiektu kontekstu obliczeniowego.

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

    Składnia RxInSqlServer wygląda niemal identycznie jak w funkcji RxSqlServerData , której wcześniej użyłeś do definiowania źródła danych. Istnieją jednak pewne istotne różnice.

    • Obiekt źródła danych, zdefiniowany za pomocą funkcji RxSqlServerData, określa, gdzie dane są przechowywane.

    • Natomiast kontekst obliczeniowy, zdefiniowany za pomocą funkcji RxInSqlServer , wskazuje, gdzie mają odbywać się agregacje i inne obliczenia.

    Definiowanie kontekstu obliczeniowego nie wpływa na inne ogólne obliczenia R, które możesz wykonać na swojej stacji roboczej, i nie zmienia źródła danych. Na przykład możesz zdefiniować lokalny plik tekstowy jako źródło danych, ale zmienić kontekst obliczeniowy na SQL Server i wszystkie czytania oraz podsumowania robić na komputerze SQL Server.

  5. Aktywuj zdalny kontekst obliczeniowy.

    rxSetComputeContext(sqlCompute)
    
  6. Zwracaj informacje o kontekście obliczeniowym, w tym jego właściwościach.

    rxGetComputeContext()
    
  7. Zresetuj kontekst obliczeniowy z powrotem do komputera lokalnego, podając słowo kluczowe "lokalne" (następny samouczek pokazuje użycie zdalnego kontekstu obliczeniowego).

    rxSetComputeContext("local")
    

Wskazówka

Aby uzyskać listę innych słów kluczowych obsługiwanych przez tę funkcję, wpisz help("rxSetComputeContext") z wiersza poleceń R.

Włącz śledzenie

Czasami operacje działają w lokalnym środowisku, ale występują problemy podczas działania w zdalnym środowisku obliczeniowym. Jeśli chcesz analizować problemy lub monitorować wydajność, możesz włączyć śledzenie w kontekście obliczeniowym, aby wspierać rozwiązywanie problemów w czasie działania.

  1. Stwórz nowy kontekst obliczeniowy, który używa tego samego parametry połączenia, ale dodaj argumenty traceEnabled i traceLevel do konstruktora RxInSqlServer.

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

    W tym przykładzie właściwość traceLevel jest ustawiona na 7, co oznacza "pokaż wszystkie informacje o śledzeniu".

  2. Użyj funkcji rxSetComputeContext, aby określić kontekst obliczeniowy z włączonym śledzeniem za pomocą nazwy.

    rxSetComputeContext(sqlComputeTrace)
    

Następny krok

Dowiedz się, jak przełączać konteksty obliczeniowe, aby uruchamiać kod R na serwerze lub lokalnie.