在 AKS 上的 HDInsight 中的 Apache Spark™ 群集上提交和管理作业

重要

AKS 上的 Azure HDInsight 已于 2025 年 1 月 31 日停用。 了解此公告的详细信息

需要将工作负荷迁移到 Microsoft Fabric 或等效的 Azure 产品,以避免工作负荷突然终止。

重要

此功能目前以预览版提供。 Microsoft Azure 预览版补充使用条款 包括适用于测试版、预览版或尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览的信息,请参阅 有关在 AKS 上的 Azure HDInsight 的预览信息。 有关问题或功能建议,请在 AskHDInsight 上提交请求,并提供详细信息,并关注我们以获取更多关于 Azure HDInsight 社区的更新。

创建群集后,用户可以使用各种界面来提交和管理作业

  • 使用 Jupyter
  • 使用 Zeppelin 软件
  • 使用 ssh 运行 spark-submit

使用 Jupyter

先决条件

基于 AKS 的 HDInsight 平台上的 Apache Spark™ 群集。 有关详细信息,请参阅 创建 Apache Spark 群集

Jupyter Notebook 是支持各种编程语言的交互式笔记本环境。

创建 Jupyter Notebook

  1. 导航到 Apache Spark™ 群集页并打开“概述” 选项卡。单击 Jupyter,它会要求你进行身份验证并打开 Jupyter 网页。

    如何选择 Jupyter 笔记本的屏幕截图。

  2. 在 Jupyter 网页中,选择“新建”> PySpark 以创建笔记本。

    新 PySpark 页面的屏幕截图。

    新创建并打开的笔记本,名称为 Untitled(Untitled.ipynb)

    注意

    通过使用 PySpark 或 Python 3 内核创建笔记本,在运行第一个代码单元时,系统会自动创建 Spark 会话。 无需显式创建会话。

  3. 将以下代码粘贴到 Jupyter Notebook 的空单元格中,然后按 Shift + ENTER 运行代码。 有关 Jupyter 上的更多控件,请参阅此处

    包含内容的 PySpark 页面的屏幕截图。

    %matplotlib inline
    import pandas as pd
    import matplotlib.pyplot as plt
    data1 = [22,40,10,50,70]
    s1 = pd.Series(data1)   #One-dimensional ndarray with axis labels (including time series).
    
    data2 = data1
    index = ['John','sam','anna','smith','ben']
    s2 = pd.Series(data2,index=index)
    
    data3 = {'John':22, 'sam':40, 'anna':10,'smith':50,'ben':70}
    s3 = pd.Series(data3)
    
    s3['jp'] = 32     #insert a new row
    s3['John'] = 88
    
    names = ['John','sam','anna','smith','ben']
    ages = [10,40,50,48,70]
    name_series = pd.Series(names)
    age_series = pd.Series(ages)
    
    data_dict = {'name':name_series, 'age':age_series}
    dframe = pd.DataFrame(data_dict)   
    #create a pandas DataFrame from dictionary
    
    dframe['age_plus_five'] = dframe['age'] + 5   
    #create a new column
    dframe.pop('age_plus_five')
    #dframe.pop('age')
    
    salary = [1000,6000,4000,8000,10000]
    salary_series = pd.Series(salary)
    new_data_dict = {'name':name_series, 'age':age_series,'salary':salary_series}
    new_dframe = pd.DataFrame(new_data_dict)
    new_dframe['average_salary'] = new_dframe['age']*90
    
    new_dframe.index = new_dframe['name']
    print(new_dframe.loc['sam'])
    
  4. 绘制一张图,将“工资”作为X轴,“年龄”作为Y轴。

  5. 在同一笔记本中,将以下代码粘贴到 Jupyter Notebook 的空单元格中,然后按 SHIFT + ENTER 运行代码。

    %matplotlib inline
    import pandas as pd
    import matplotlib.pyplot as plt
    
    plt.plot(age_series,salary_series)
    plt.show()
    

    图形输出的屏幕截图。

保存笔记本

  1. 在笔记本菜单栏中,导航到“文件”>“保存”和“检查点”。

  2. 关闭笔记本以释放群集资源:在笔记本菜单栏中,导航到“文件 > 关闭并停止。 您还可以在示例文件夹下运行任何笔记本文件。

    如何保存便笺簿的屏幕截图。

使用 Apache Zeppelin 笔记本

在 AKS 上的 HDInsight 中,Apache Spark 群集包括 Apache Zeppelin 笔记本。 使用笔记本运行 Apache Spark 作业。 本文介绍如何在 AKS 群集上的 HDInsight 上使用 Zeppelin 笔记本。

先决条件

AKS 上的 HDInsight 上的 Apache Spark 群集。 有关说明,请参阅 创建 Apache Spark 群集

启动 Apache Zeppelin 笔记本

  1. 导航到 Apache Spark 群集概述页,然后从群集仪表板中选择 Zeppelin 笔记本。 它会提示进行身份验证并打开 Zeppelin 页面。

    如何选择 Zeppelin 的屏幕截图。

  2. 创建新的笔记本。 在标题窗格中,导航到笔记本 > 创建新笔记。 确保笔记本标题栏显示为已连接状态。 它表示右上角的绿色点。

    如何创建 zeppelin 笔记本的屏幕截图。

  3. 在 Zeppelin Notebook 中运行以下代码:

    %livy.pyspark
    import pandas as pd
    import matplotlib.pyplot as plt
    data1 = [22,40,10,50,70]
    s1 = pd.Series(data1)   #One-dimensional ndarray with axis labels (including time series).
    
    data2 = data1
    index = ['John','sam','anna','smith','ben']
    s2 = pd.Series(data2,index=index)
    
    data3 = {'John':22, 'sam':40, 'anna':10,'smith':50,'ben':70}
    s3 = pd.Series(data3)
    
    s3['jp'] = 32     #insert a new row
    
    s3['John'] = 88
    
    names = ['John','sam','anna','smith','ben']
    ages = [10,40,50,48,70]
    name_series = pd.Series(names)
    age_series = pd.Series(ages)
    
    data_dict = {'name':name_series, 'age':age_series}
    dframe = pd.DataFrame(data_dict)   #create a pandas DataFrame from dictionary
    
    dframe['age_plus_five'] = dframe['age'] + 5   #create a new column
    dframe.pop('age_plus_five')
    #dframe.pop('age')
    
    salary = [1000,6000,4000,8000,10000]
    salary_series = pd.Series(salary)
    new_data_dict = {'name':name_series, 'age':age_series,'salary':salary_series}
    new_dframe = pd.DataFrame(new_data_dict)
    new_dframe['average_salary'] = new_dframe['age']*90
    
    new_dframe.index = new_dframe['name']
    print(new_dframe.loc['sam'])
    
  4. 点击段落中的 播放 按钮以运行代码片段。 段落右侧的状态应从 READY、PENDING、RUNNING 到 FINISHED 进行。 输出显示在同一段落底部。 屏幕截图如下图所示:

    如何运行 Zeppelin 笔记本的屏幕截图。

    输出:

    Zeppelin 笔记本输出的屏幕截图。

使用 Spark 提交作业

  1. 使用以下命令“#vim samplefile.py”创建文件

  2. 此命令将打开 vim 文件

  3. 将以下代码粘贴到 vim 文件中

    import pandas as pd
    import matplotlib.pyplot as plt
    
    From pyspark.sql import SparkSession
    Spark = SparkSession.builder.master('yarn').appName('SparkSampleCode').getOrCreate()
    # Initialize spark context
    data1 = [22,40,10,50,70]
    s1 = pd.Series(data1)   #One-dimensional ndarray with axis labels (including time series).
    
    data2 = data1
    index = ['John','sam','anna','smith','ben']
    s2 = pd.Series(data2,index=index)
    
    data3 = {'John':22, 'sam':40, 'anna':10,'smith':50,'ben':70}
     s3 = pd.Series(data3)
    
    s3['jp'] = 32     #insert a new row
    
    s3['John'] = 88
    
    names = ['John','sam','anna','smith','ben']
    ages = [10,40,50,48,70]
    name_series = pd.Series(names)
    age_series = pd.Series(ages)
    
    data_dict = {'name':name_series, 'age':age_series}
    dframe = pd.DataFrame(data_dict)   #create a pandas DataFrame from dictionary
    
    dframe['age_plus_five'] = dframe['age'] + 5   #create a new column
    dframe.pop('age_plus_five')
    #dframe.pop('age')
    
    salary = [1000,6000,4000,8000,10000]
    salary_series = pd.Series(salary)
    new_data_dict = {'name':name_series, 'age':age_series,'salary':salary_series}
    new_dframe = pd.DataFrame(new_data_dict)
    new_dframe['average_salary'] = new_dframe['age']*90
    
    new_dframe.index = new_dframe['name']
    print(new_dframe.loc['sam'])
    
  4. 使用以下方法保存文件。

    1. 按下Escape键
    2. 输入命令 :wq
  5. 运行以下命令以运行作业。

    /spark-submit --master yarn --deploy-mode cluster <filepath>/samplefile.py

    显示如何运行 Spark 提交作业的屏幕截图。

在 AKS 上的 HDInsight 中监视 Apache Spark 群集上的查询

Spark 历史记录 UI

  1. 在“概述”选项卡中单击“Spark History Server UI”。

    显示 Spark UI 的 屏幕截图。

  2. 使用同一应用程序 ID 从 UI 中选择最近的运行。

    显示如何运行 Spark UI 的屏幕截图。

  3. 在 Spark History 服务器 UI 中查看有向无环图周期和作业的阶段。

    DAG 周期的屏幕截图。

Livy 会话 UI

  1. 若要打开 Livy 会话 UI,请在浏览器中键入以下命令 https://<CLUSTERNAME>.<CLUSTERPOOLNAME>.<REGION>.projecthilo.net/p/livy/ui

    如何打开 Livy 会话 UI 的屏幕截图。

  2. 单击日志下的驱动程序选项查看驱动程序日志。

Yarn UI

  1. 在“概述”选项卡中单击“Yarn”,然后打开 Yarn UI。

    如何选择 Yarn UI 的屏幕截图。

  2. 您可以通过相同的应用程序 ID 跟踪您最近运行的任务。

  3. 单击 Yarn 中的应用程序 ID 以查看作业的详细日志。

    查看日志。

参考