EMR Studio:新一代开源大数据开发平台开启公测

作者

简锋, 阿里云 EMR Studio 负责人

2021年11月,EMR Studio:新一代开源大数据开发平台正式开启公测。EMR Studio 能够无缝关联 EMR 集群(EMR on ECS 和 EMR on ACK)的计算引擎提交任务,提供了交互式开发、任务调度和任务监控等开源大数据开发使用服务。覆盖了大数据处理 ETL、交互式数据分析、机器学习和实时计算等多种应用场景。

本文主要介绍 EMR-Studio 的架构,以及 EMR-Studio 是如何解决常见大数据框架的易用性问题来提升工程师工作效率的。

1

背景介绍   

众所周知,大数据领域发展这么多年,各种计算框架层出不穷,Spark,Flink,Hive,Presto 等等都是很优秀的框架,但是易用性以及使用门槛高一直是大数据领域的一个很棘手的问题。

在用这些工具开发的时候你有可能会碰到如下的问题:

  • 环境配置麻烦

  • 提交作业响应速度慢

  • 作业运行失败,错误信息不全,没法找到对应的log(或者需要很复杂的步骤才能找到对应的log)

  • 在开发集群上能正常跑的作业,切换到生产集群就出现各种奇怪的问题

  • PySpark需要定义自己的Python环境,需要自己维护集群每个节点的Python环境,即使有Python虚拟环境的解决方案,使用起来也是很不方便。

这边只列举以上5个典型的问题,实际工作当中一定存在很多其他的问题。为了解决这些问题,EMR Studio 应运而生。EMR Studio 是阿里云最新推出的基于开源组件的一站式大数据开发平台。

2

EMR Studio 架构   

EMR Studio 提供深度优化的开源组件使用体验,100%兼容开源大数据生态。您无需修改任务代码,即可平滑迁移上云。通过 EMR Studio 数据开发工作台,您可以在开源组件原生 UI 的基础上无缝衔接开发环节和生产调度环节,下图是 EMR-Studio 的整体架构和功能模块:

f04ced907515d3b19dd381ab91a02784.png

EMR-Studio 的角色就是一个具备大数据开发功能的节点或集群,负责作业的提交和调度,作业本身执行还是在 EMR Hadoop 集群里。一个 EMR-Studio 可以往多个 EMR Hadoop 集群提交作业,用户可以灵活切换。EMR-Studio 里总共有4个组件,我们可以分为3类:

  • Zeppelin,Jupyter  -- 负责作业开发提交

  • Airflow -- 负责作业生产调度

  • Cluster Manager -- 负责计算集群管理

dc53a871148bf2f6d7705a79c6dd32d8.png

EMR-Studio 和 EMR Hadoop 集群关系图

3

EMR Studio 组件及功能   

Zeppelin+Jupyter:作业开发

Zeppelin 和 Jupyter 都是开源的交互式 Notebook,我们选用 Zeppelin + Jupyter 作为大数据开发工具是因为他们具备非常好的交互性,而且都是比较成熟的大数据开发工具。开源的Zeppelin 和 Jupyter 都需要一定的配置才能跑各种类型的大数据作业,比如在 Zeppelin 里跑 Spark 作业,你需要配置 SPARK_HOME 才能正确的跑 Spark 作业,如果你有 Hive 还需要配置 HIVE_CONF_DIR。

EMR-Studio 在开源的基础上对他们做了增强和改进,用户无需任何配置,就可以在 Zeppelin 和 Jupyter 里往 EMR Hadoop 集群提交任何类型的作业(包括 Spark,Flink, Hive, Presto, Clickhouse 等等)。

此外如果你要为 PySpark 作业配置不同的 Python 环境,EMR-Studio 提供了很方便的解决方案。你只要遵循以下步骤就可以为你的 PySpark 作业创建不同的 Python 环境,做到 Python 环境的互相隔离。

  • 步骤1. 在 Zeppelin 里用 conda 创建 Python 环境并打包

  • 步骤2. 上传 Python 环境到 OSS

  • 步骤3. 在 Zeppelin 里配置 PySpark 作业

dd2454eb460dffcf6824067ec67d50f1.png

3675f0e6a0f30b09eb6c4cfcd299854e.png

353f73c5e3aa714ebbef17ac60df2374.png

以上是在 EMR-Studio 里 Zeppelin 的操作截屏,步骤1和步骤2是一次性的,除非你要更改 Python 环境才需要重做步骤1和2。

另外你在 Notebook 里可以很快定位到错误以及 Log,比如下面的 Hive 作业就有对应 Yarn App 的链接,你可以很方便定位到 Yarn App Log。

53b15d426f100935d0f255adea3439f6.png

以上列举了一些我们针对 Notebook 改进易用性的点,还有很多特性这里就不一一例举,EMR-Studio 里提供了很多教程,方便大家学习使用。

6bc0a47318866a9de01a491dddf5c15b.png

Airflow :作业调度

Airflow 是目前最流行也是最成熟的开源调度器。从下面的 github star 数我们就可以得出这个结论,这也是我们为什么选择 Airflow 作为 EMR-Studio 的调度器解决方案。

91008a551745a7de19716c383eb10a74.png

除了支持开源 Airflow 的功能之外,我们对 EMR-Studio 里的 Airflow 做了优化与整合,主要的改进有:

  • 支持 Log 存储在 OSS 上

  • 支持 DAG 文件存储在 OSS 上

  • 支持 DAG 文件在线编辑

  • 支持 Zeppelin 和 Jupyter 的调度

  • 支持 EMR 集群的切换

  • 整合阿里云监控告警功能

这里我们重点介绍下 Airflow 与 Zeppelin 的整合,假设你已经在 Zeppelin 里完成了作业开发,这里例举一个简单的 ETL 例子:

  • 步骤1:用 shell 生成原始文本 csv 数据

  • 步骤2:用 Spark 将 csv 数据转换为 parquet 格式

  • 步骤3:用 Spark 对 parquet 数据查询

每个步骤我们都在 Zeppelin 里用一个 note 来完成,现在只要编写下面的 DAG 文件就可以将这些 task 串起来构成一个定时调度的工作流。这里最重要的是我们用到了 ZeppelinOperator,在这个 Operator 里,我们只要指定 noteId 就可以了。

from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.operators.zeppelin_operator import ZeppelinOperator


default_args = {
  'owner': 'airflow',
  'depends_on_past': False,
  'start_date': datetime(2018, 1, 1),
  'email_on_failure': False,
  'email_on_retry': False,
  'retries': 0,
  'retry_delay': timedelta(minutes=5),
}




with DAG('zeppelin_etl_note_dag',
     max_active_runs=5,
     schedule_interval='0 0 * * *',
     default_args=default_args) as dag:


    execution_date = "{{ ds }}"


    raw_data_task = ZeppelinOperator(
        task_id='raw_data_task',
        conn_id='zeppelin_default',
    note_id='2FZWJTTPS',
    params= {'dt' : execution_date}
  )


    spark_etl_task = ZeppelinOperator(
        task_id='spark_etl_task',
        conn_id='zeppelin_default',
    note_id='2FX3GJW67',
    params= {'dt' : execution_date}
    )


    spark_query_task = ZeppelinOperator(
        task_id='spark_query_task',
        conn_id='zeppelin_default',
    note_id='2FZ8H4JPV',
    params= {'dt' : execution_date}
    )




    raw_data_task >> spark_etl_task >> spark_query_task

Cluster Manager :集群管理

Cluster Manager 是 EMR-Studio 定制的一个组件,负责管理各个 Hadoop 计算集群的配置。EMR-Studio 一个很大的优势在于可以任意切换集群,在切换集群之前需要做管理集群的操作:

6bedd78cd9bbb9b07474c063f8a28cbf.png

然后你就可以在 Notebook 里通过下拉框的方式来切换集群,比如你一开始选择一个开发集群来做开发,等作业开发完之后想切换到生产集群,你只需下拉框选择对应的集群就可以,如下图所示:

d7f41fae6fc0cd1b98666a98b6b4c3be.png

Airflow 也是类似,你可以在 Airflow 的 DAG 脚本里指定对应的 clusterId,如下图所示:

30e893ccdacf8c3d786f08aeb9c78a50.png

4

总结   

本文介绍了 EMR-Studio 的整体架构以及每个组件的功能。作为一个一站式大数据开发平台,EMR-Studio 奉行开源,简单,轻量的原则,旨在解决大数据框架的易用性问题,提高数据开发工程师的工作效率。

点击阅读原文或以下链接,获取更多 EMR-Studio 相关资料:
https://help.aliyun.com/document_detail/208107.html

欢迎大家使用 EMR-Studio,提升您的工作效率。

END

钉钉扫描下方二维码加入 EMR Studio 用户钉钉交流群,了解产品最新功能及相关活动。

fcdc9cb9ec01743a93ce5b668358b591.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值