Snabbstart: Köra ett R-skript på ett ML Services-kluster i Azure HDInsight med RStudio Server

Viktigt

Det här innehållet dras tillbaka och kommer inte att uppdateras i framtiden. Azure HDInsight klustertypen 3.6 ML Services (Machine Learning Server) togs ur bruk den 31 dec 2020.

ML Services på Azure HDInsight kan R-skript använda Apache Spark Och Apache Hadoop MapReduce för att köra distribuerade beräkningar. ML Services styr hur anrop körs genom att ange beräkningskontexten. Gränsnoden i ett kluster är en praktisk plats för att ansluta till klustret och köra R-skript. Med en kantnod kan du välja att köra de parallelliserade distribuerade funktionerna i RevoScaleR över kärnorna på gränsnodservern. Du kan också köra dem mellan noderna i klustret med hjälp av RevoScaleR:s Hadoop Map Reduce eller Apache Spark-beräkningskontexterna.

I den här snabbstarten lär du dig att köra ett R-skript med RStudio Server som visar hur du använder Spark för distribuerade R-beräkningar. Du definierar en beräkningskontext för att utföra beräkningar lokalt på en kantnod och återigen distribuera över noderna i HDInsight-klustret.

Förutsättning

Ett ML Services-kluster i HDInsight. Se Skapa Apache Hadoop-kluster med Azure Portal och ML Services som Klustertyp.

Anslut till RStudio Server

RStudio Server körs på klustrets kantnod. Gå till följande URL där är CLUSTERNAME namnet på det ML Services-kluster som du skapade:

https://CLUSTERNAME.azurehdinsight.net/rstudio/

Första gången du loggar in måste du autentisera två gånger. För den första autentiseringsuppfråga anger du klusteradministratörsinloggningen och lösenordet. Standardvärdet är admin . För den andra autentiseringsupptolken anger du SSH-inloggningen och lösenordet. Standardvärdet är sshuser . Efterföljande inloggningar kräver endast SSH-autentiseringsuppgifter.

När du är ansluten, bör din skärm likna följande skärmbild:

Översikt över R Studio-webbkonsolen

Använda en beräkningskontext

  1. Från RStudio Server använder du följande kod för att läsa in exempeldata till standardlagringen för HDInsight:

    # Set the HDFS (WASB) location of example data
     bigDataDirRoot <- "/example/data"
    
     # create a local folder for storing data temporarily
     source <- "/tmp/AirOnTimeCSV2012"
     dir.create(source)
    
     # Download data to the tmp folder
     remoteDir <- "https://packages.revolutionanalytics.com/datasets/AirOnTimeCSV2012"
     download.file(file.path(remoteDir, "airOT201201.csv"), file.path(source, "airOT201201.csv"))
     download.file(file.path(remoteDir, "airOT201202.csv"), file.path(source, "airOT201202.csv"))
     download.file(file.path(remoteDir, "airOT201203.csv"), file.path(source, "airOT201203.csv"))
     download.file(file.path(remoteDir, "airOT201204.csv"), file.path(source, "airOT201204.csv"))
     download.file(file.path(remoteDir, "airOT201205.csv"), file.path(source, "airOT201205.csv"))
     download.file(file.path(remoteDir, "airOT201206.csv"), file.path(source, "airOT201206.csv"))
     download.file(file.path(remoteDir, "airOT201207.csv"), file.path(source, "airOT201207.csv"))
     download.file(file.path(remoteDir, "airOT201208.csv"), file.path(source, "airOT201208.csv"))
     download.file(file.path(remoteDir, "airOT201209.csv"), file.path(source, "airOT201209.csv"))
     download.file(file.path(remoteDir, "airOT201210.csv"), file.path(source, "airOT201210.csv"))
     download.file(file.path(remoteDir, "airOT201211.csv"), file.path(source, "airOT201211.csv"))
     download.file(file.path(remoteDir, "airOT201212.csv"), file.path(source, "airOT201212.csv"))
    
     # Set directory in bigDataDirRoot to load the data into
     inputDir <- file.path(bigDataDirRoot,"AirOnTimeCSV2012")
    
     # Make the directory
     rxHadoopMakeDir(inputDir)
    
     # Copy the data from source to input
     rxHadoopCopyFromLocal(source, bigDataDirRoot)
    

    Det här steget kan ta cirka 8 minuter att slutföra.

  2. Skapa lite datainformation och definiera två datakällor. Ange följande kod i RStudio:

    # Define the HDFS (WASB) file system
     hdfsFS <- RxHdfsFileSystem()
    
     # Create info list for the airline data
     airlineColInfo <- list(
          DAY_OF_WEEK = list(type = "factor"),
          ORIGIN = list(type = "factor"),
          DEST = list(type = "factor"),
          DEP_TIME = list(type = "integer"),
          ARR_DEL15 = list(type = "logical"))
    
     # get all the column names
     varNames <- names(airlineColInfo)
    
     # Define the text data source in hdfs
     airOnTimeData <- RxTextData(inputDir, colInfo = airlineColInfo, varsToKeep = varNames, fileSystem = hdfsFS)
    
     # Define the text data source in local system
     airOnTimeDataLocal <- RxTextData(source, colInfo = airlineColInfo, varsToKeep = varNames)
    
     # formula to use
     formula = "ARR_DEL15 ~ ORIGIN + DAY_OF_WEEK + DEP_TIME + DEST"
    
  3. Kör en logistisk regression över data med hjälp av den lokala beräkningskontexten. Ange följande kod i RStudio:

    # Set a local compute context
     rxSetComputeContext("local")
    
     # Run a logistic regression
     system.time(
        modelLocal <- rxLogit(formula, data = airOnTimeDataLocal)
     )
    
     # Display a summary
     summary(modelLocal)
    

    Beräkningarna bör slutföras inom cirka 7 minuter. Du bör se utdata som slutar med rader som liknar följande kodfragment:

    Data: airOnTimeDataLocal (RxTextData Data Source)
     File name: /tmp/AirOnTimeCSV2012
     Dependent variable(s): ARR_DEL15
     Total independent variables: 634 (Including number dropped: 3)
     Number of valid observations: 6005381
     Number of missing observations: 91381
     -2*LogLikelihood: 5143814.1504 (Residual deviance on 6004750 degrees of freedom)
    
     Coefficients:
                      Estimate Std. Error z value Pr(>|z|)
      (Intercept)   -3.370e+00  1.051e+00  -3.208  0.00134 **
      ORIGIN=JFK     4.549e-01  7.915e-01   0.575  0.56548
      ORIGIN=LAX     5.265e-01  7.915e-01   0.665  0.50590
      ......
      DEST=SHD       5.975e-01  9.371e-01   0.638  0.52377
      DEST=TTN       4.563e-01  9.520e-01   0.479  0.63172
      DEST=LAR      -1.270e+00  7.575e-01  -1.676  0.09364 .
      DEST=BPT         Dropped    Dropped Dropped  Dropped
    
      ---
    
      Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    
      Condition number of final variance-covariance matrix: 11904202
      Number of iterations: 7
    
  4. Kör samma logistiska regression med Spark-kontexten. Spark-kontexten distribuerar bearbetningen mellan alla arbetsnoder i HDInsight-klustret. Ange följande kod i RStudio:

    # Define the Spark compute context
     mySparkCluster <- RxSpark()
    
     # Set the compute context
     rxSetComputeContext(mySparkCluster)
    
     # Run a logistic regression
     system.time(  
        modelSpark <- rxLogit(formula, data = airOnTimeData)
     )
    
     # Display a summary
     summary(modelSpark)
    

    Beräkningarna bör slutföras inom cirka 5 minuter.

Rensa resurser

När du har slutfört snabbstarten kanske du vill ta bort klustret. Med HDInsight lagras dina data i Azure Storage så att du på ett säkert sätt kan ta bort ett kluster när det inte används. Du debiteras också för ett HDInsight-kluster, även när det inte används. Eftersom avgifterna för klustret är flera gånger större än avgifterna för lagring är det ekonomiskt sett bra att ta bort kluster när de inte används.

Information om hur du tar bort ett kluster finns i Ta bort ett HDInsight-kluster med hjälp av webbläsaren, PowerShell eller Azure CLI.

Nästa steg

I den här snabbstarten har du lärt dig att köra ett R-skript med RStudio Server som demonstrerade användningen av Spark för distribuerade R-beräkningar. Gå vidare till nästa artikel om du vill lära dig vilka alternativ som är tillgängliga för att ange om och hur körningen ska parallelliseras mellan kärnor i kantnoden eller HDInsight-klustret.

Anteckning

Den här sidan beskriver funktionerna i RStudio-programvaran. Microsoft Azure HDInsight är inte anslutet till RStudio, Inc.