لامعة على خادم RStudio المستضاف

Shiny هي حزمة R، متوفرة على CRAN، تستخدم لبناء تطبيقات R التفاعلية ولوحات المعلومات. يمكنك استخدام لامعة داخل خادم RStudio استضافت على مجموعات Azure Databricks. يمكنك أيضا تطوير التطبيقات اللامعة واستضافتها ومشاركتها مباشرة من دفتر ملاحظات Azure Databricks. راجع مشاركة عنوان URL لتطبيق لامع.

للبدء مع لامعة، راجع الدروس لامعة.

توضح هذه المقالة كيفية تشغيل التطبيقات لامعة على RStudio على Azure Databricks واستخدام أباتشي سبارك داخل التطبيقات لامعة.

المتطلبات

هام

مع Pro ملقم RStudio يجب تعطيل المصادقة الوكيلة. تأكد من auth-proxy=1 عدم وجود داخل /etc/rstudio/rserver.conf .

بدء الاستخدام مع لامعة

  1. فتح RStudio على أزور داتابريكس.

  2. في RStudio، استيراد حزمة لامعة وتشغيل التطبيق المثال 01_hello على النحو التالي:

    > library(shiny)
    > runExample("01_hello")
    
    Listening on http://127.0.0.1:3203
    

    يظهر إطار جديد، يعرض التطبيق لامعة.

    أول تطبيق لامع

تشغيل تطبيق لامع من برنامج نصي R

لتشغيل تطبيق لامع من برنامج نصي R، افتح برنامج R النصي في محرر RStudio وانقر فوق الزر تشغيل التطبيق في أعلى اليمين.

لامعة تشغيل التطبيق

استخدام اباتشي سبارك داخل تطبيقات لامعة

يمكنك استخدام اباتشي سبارك عند تطوير تطبيقات لامعة على Azure Databricks. يمكنك التفاعل مع Spark باستخدام كل من SparkR و Sparklyr. تحتاج إلى عامل واحد على الأقل لبدء مهام Spark.

يستخدم المثال التالي SparkR لإطلاق وظائف Spark. ويستخدم المثال مجموعة بيانات الماس ggplot2 لرسم سعر الماس بالقييراط. يمكن تغيير نطاق القيراط باستخدام شريط التمرير في الجزء العلوي من التطبيق، وسيتغير نطاق المحور x للمؤامرة وفقا لذلك.

library(SparkR)
library(sparklyr)
library(dplyr)
library(ggplot2)
sparkR.session()

sc <- spark_connect(method = "databricks")
diamonds_tbl <- spark_read_csv(sc, path = "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")

# Define the UI
ui <- fluidPage(
  sliderInput("carat", "Select Carat Range:",
              min = 0, max = 5, value = c(0, 5), step = 0.01),
  plotOutput('plot')
)

# Define the server code
server <- function(input, output) {
  output$plot <- renderPlot({
    # Select diamonds in carat range
    df <- diamonds_tbl %>%
      dplyr::select("carat", "price") %>%
      dplyr::filter(carat >= !!input$carat[[1]], carat <= !!input$carat[[2]])

    # Scatter plot with smoothed means
    ggplot(df, aes(carat, price)) +
      geom_point(alpha = 1/2) +
      geom_smooth() +
      scale_size_area(max_size = 2) +
      ggtitle("Price vs. Carat")
  })
}

# Return a Shiny app object

shinyApp(ui = ui, server = server)

سبارك لامعة التطبيق

الأسئلة المتداولة (FAQ)

كيف يمكنني تثبيت لامعة على Databricks وقت التشغيل 6.4 الدعم الموسع و Databricks وقت التشغيل 5.5 LTS؟

تثبيت حزمة لامعة مكتبة Azure Databricks على الكتلة. قد لا يعمل استخدام install.packages(‘shiny’) في وحدة تحكم RStudio أو استخدام إدارة حزمة RStudio.

لماذا يتم رمادي التطبيق لامعة بعد بعض الوقت؟

إذا لم يكن هناك تفاعل مع تطبيق Shiny، يتم إغلاق الاتصال بالتطبيق بعد حوالي 4 دقائق.

لإعادة الاتصال، قم بتحديث صفحة التطبيق اللامع. يتم إعادة تعيين حالة لوحة المعلومات.

لماذا تختفي نافذة المشاهد اللامع بعد فترة؟

إذا اختفت نافذة عارض لامعة بعد التسكع لعدة دقائق، فإنه يرجع إلى نفس المهلة مثل السيناريو "رمادي خارج".

تعطل التطبيق الخاص بي مباشرة بعد الإطلاق، ولكن يبدو أن التعليمات البرمجية صحيحة. ماذا يحدث؟

هناك حد 20 ميغابايت على إجمالي كمية البيانات التي يمكن عرضها في تطبيق لامع على Azure Databricks. إذا تجاوز إجمالي حجم البيانات للتطبيق هذا الحد، فإنه سيتم تعطل مباشرة بعد بدء التشغيل. لتجنب ذلك، توصي Databricks بتقليل حجم البيانات، على سبيل المثال عن طريق تقليل حجم البيانات المعروضة أو تقليل دقة الصور.

لماذا لا تعود وظائف Spark الطويلة أبدا؟

هذا أيضا بسبب مهلة الخمول. أية مهمة Spark قيد التشغيل لفترة أطول من المهلات المذكورة سابقا غير قادر على تقديم النتيجة الخاصة به لأن الاتصال يغلق قبل إرجاع المهمة.

كيف يمكنني تجنب المهلة؟

  • هناك حل مقترح في مؤشر ترابط هذه المشكلة. يرسل الحل نبضات القلب للحفاظ على websocket على قيد الحياة عندما يكون التطبيق خاملا. ومع ذلك، إذا تم حظر التطبيق بواسطة حساب طويل الأمد، لا يعمل هذا الحل البديل.

  • لامعة لا يعتمد المهام طويلة الأمد. توصي مشاركة مدونة Shiny باستخدام الوعود والعقود الآجلة لتشغيل المهام الطويلة بشكل غير متزامن والحفاظ على التطبيق غير محظور. هنا مثال يستخدم ضربات القلب للحفاظ على التطبيق لامعة على قيد الحياة، ويدير وظيفة سبارك طويلة الأمد في future بناء.

    # Write an app that uses spark to access data on Databricks
    # First, install the following packages:
    install.packages(‘future’)
    install.packages(‘promises’)
    
    library(shiny)
    library(promises)
    library(future)
    plan(multisession)
    
    HEARTBEAT_INTERVAL_MILLIS = 1000  # 1 second
    
    # Define the long Spark job here
    run_spark <- function(x) {
      # Environment setting
      library("SparkR", lib.loc = "/databricks/spark/R/lib")
      sparkR.session()
    
      irisDF <- createDataFrame(iris)
      collect(irisDF)
      Sys.sleep(3)
      x + 1
    }
    
    run_spark_sparklyr <- function(x) {
      # Environment setting
      library(sparklyr)
      library(dplyr)
      library("SparkR", lib.loc = "/databricks/spark/R/lib")
      sparkR.session()
      sc <- spark_connect(method = "databricks")
    
      iris_tbl <- copy_to(sc, iris, overwrite = TRUE)
      collect(iris_tbl)
      x + 1
    }
    
    ui <- fluidPage(
      sidebarLayout(
        # Display heartbeat
        sidebarPanel(textOutput("keep_alive")),
    
        # Display the Input and Output of the Spark job
        mainPanel(
          numericInput('num', label = 'Input', value = 1),
          actionButton('submit', 'Submit'),
          textOutput('value')
        )
      )
    )
    server <- function(input, output) {
      #### Heartbeat ####
      # Define reactive variable
      cnt <- reactiveVal(0)
      # Define time dependent trigger
      autoInvalidate <- reactiveTimer(HEARTBEAT_INTERVAL_MILLIS)
      # Time dependent change of variable
      observeEvent(autoInvalidate(), {  cnt(cnt() + 1)  })
      # Render print
      output$keep_alive <- renderPrint(cnt())
    
      #### Spark job ####
      result <- reactiveVal() # the result of the spark job
      busy <- reactiveVal(0)  # whether the spark job is running
      # Launch a spark job in a future when actionButton is clicked
      observeEvent(input$submit, {
        if (busy() != 0) {
          showNotification("Already running Spark job...")
          return(NULL)
        }
        showNotification("Launching a new Spark job...")
        # input$num must be read outside the future
        input_x <- input$num
        fut <- future({ run_spark(input_x) }) %...>% result()
        # Or: fut <- future({ run_spark_sparklyr(input_x) }) %...>% result()
        busy(1)
        # Catch exceptions and notify the user
        fut <- catch(fut, function(e) {
          result(NULL)
          cat(e$message)
          showNotification(e$message)
        })
        fut <- finally(fut, function() { busy(0) })
        # Return something other than the promise so shiny remains responsive
        NULL
      })
      # When the spark job returns, render the value
      output$value <- renderPrint(result())
    }
    shinyApp(ui = ui, server = server)
    

يوصي ستريك البيانات بما يصل إلى 20.

هل يمكنني استخدام إصدار مختلف من الحزمة لامعة من تلك المثبتة في Databricks وقت التشغيل؟

نعم. راجع إصلاح إصدار حزم R.

كيف يمكنني تطوير تطبيق لامع يمكن نشره على خادم لامع والوصول إلى البيانات على Azure Databricks؟

بينما يمكنك الوصول إلى البيانات بشكل طبيعي باستخدام SparkR أو sparklyr أثناء التطوير والاختبار على Azure Databricks ، بعد نشر تطبيق Shiny إلى خدمة استضافة مستقلة ، فإنه لا يمكنه الوصول مباشرة إلى البيانات والجداول على Azure Databricks.

لتمكين التطبيق الخاص بك للعمل خارج Azure Databricks، يجب إعادة كتابة كيفية الوصول إلى البيانات. هناك بعض الخيارات:

توصي Databricks بالعمل مع فريق حلول Azure Databricks للعثور على أفضل طريقة لبنية البيانات والتحليلات الحالية.

كيف يمكنني حفظ التطبيقات اللامعة التي أقوم بتطويرها على Azure Databricks؟

يمكنك إما حفظ رمز التطبيق الخاص بك على DBFS من خلال تحميل FUSE أو التحقق من التعليمات البرمجية الخاصة بك في التحكم بالإصدار.

هل يمكنني تطوير تطبيق لامع داخل دفتر ملاحظات Azure Databricks؟

نعم، يمكنك تطوير تطبيق لامع داخل دفتر ملاحظات Azure Databricks. لمزيد من التفاصيل راجع استخدام لامعة داخل دفاتر البيانات.