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:
Använda en beräkningskontext
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.
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"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: 7Kö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.