本文原先发表在GitChat上面,现在(2020/03/14)冻结时间(一年)已过,这里将其拉回博客。
随着数据时代和 AI 时代的到来,几乎所有的企业都在建设自己的大数据系统。为了提高数据处理能力,突破单机在计算与资源上的瓶颈,诸如 Hadoop、Spark、Flink 等分布式计算框架和基于 HDFS 的分布式存储系统成为大多数选择。实际工作中,大部分时间我们都在研发、部署和维护批处理、流处理程序,完成相应的业务需求,但是相信很多人都遇到过这样的事情:
- 需要对一批数据做探索性分析,所谓探索性即尚且没有明确的思路,需要不断的尝试,这时你无法形成完整方案写到代码文件、打包、正式部署。
- 临时有个任务需要验证一下,特别针对研发人员,你为这个任务写个正式代码文件、打包、部署显然过于繁琐,并且很多线上环境是不允许随便传代码的。
这里的问题就是,如何在分布式计算框架之上实现交互式运行代码? Notebook 显然成为首选。Notebook 是一类基于 Web 的交互式数据分析工具,比较流行的有 Jupyter、Zeppelin 等。Jupyter 是基于 Python 的,前身是 IPython,在单机数据分析上表现非常优异,特别是结合 pandas 库。而 Zeppelin 则以插件的形式对大多数分布式计算引擎提供了友好的支持,尤其是 Spark。
本文重点探讨Spark with Zeppelin,即在 Zeppelin 中通过 Spark 计算引擎进行交互式数据分析。文章假定读者对 Spark 已经有一定的认知,主要围绕 Zeppelin 展开,由浅入深包含以下几方面:
- 介绍 Zeppelin 的基本概念
- 介绍如何在 Zeppelin 中通过 Spark 进行数据分析
- 探讨如何为 Zeppelin 下的 Spark 配置资源
- 探讨 Zeppelin 与 Spark 进行交互的原理
需要说明的是,笔者使用的测试环境为 AWS EMR 5.20.0(Spark 2.4.0 + Zeppelin 0.8.0)。
基本概念
Zeppelin 的核心概念可归为两类:一类与执行引擎相关&#x