官网介绍
Apache Zeppelin提供了web版的类似ipython的notebook,用于做数据分析和可视化。背后可以接入不同的数据处理引擎,包括Spark, hive, tajo等,原生支持scala, Java, shell, markdown等。它的整体展现和使用形式和Databricks Cloud是一样的。
安装
其他组件都是好安装的,直接mvn install是没问题的。 而且zeppelin-web项目,里面使用了node, grunt, bower这些前端的工具。可以自己源码编译也可以使用二进制包直接使用。目前官网最新的版本是0.5.6版本,支持spark1.5和hadoop2.x版本。
自己编译:
- 安装好node, grunt, bower
brew install npm
npm install -g node
- 修改pom
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>0.0.23</version>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v0.10.18</nodeVersion>
<npmVersion>1.3.8</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
</execution>
<execution>
<id>bower install</id>
<goals>
<goal>bower</goal>
</goals>
<configuration>
<arguments>--allow-root install</arguments>
</configuration>
</execution>
<execution>
<id>grunt build</id>
<goals>
<goal>grunt</goal>
</goals>
<configuration>
<arguments>--no-color --force</arguments>
</configuration>
</execution>
</executions>
</plugin>
- 进入zeppelin-web目录下,执行 npm install。它会根据package.json的描述安装一些grunt的组件,安装bower,然后再目录下生产一个node_modules目录。
- bower –alow-root install,会根据bower.json安装前端库依赖
- grunt –force,会根据Gruntfile.js整理web文件
- mvn install -DskipTests,把web项目打包,在target目录下会生成war
需要在pom.xml里添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>app\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
到此处就已经编译完成了。
测试
配置
在zeppelin parent目录下,修改conf文件夹里的zeppelin-env.sh和zeppelin-site.xml,可以是默认配置,但要把两个文件原本的无效后缀去掉。zeppelin parent目录下执行
bin/zeppelin-daemon.sh start
漂亮主页
zeppelin parent目录下会看到一个notebook文件夹,按notebook的名字命名区分了多个子目录。目录下是一个note.json文件,记录了每个notebook里输入的代码和执行结果,启动的时候会加载起来。编码
使用的是scala,notebook,可以直接写scala代码
标识%md, %sh, %sql, %spark, %hive, %tajo来区分要执行的是什么
和spark整合
进入tutorial notebook,它里面已经写好了例子:
import sys.process._
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val zeppelinHome = ("pwd" !!).replace("\n", "")
val bankText = sc.textFile(s"$zeppelinHome/data/bank-full.csv")
case class Bank(age: Integer, job: String, marital: String, education: String, balance: Integer)
val bank = bankText.map(s => s.split(";")).filter(s => s(0) != "\"age\"").map(
s => Bank(s(0).toInt,
s(1).replaceAll("\"", ""),
s(2).replaceAll("\"", ""),
s(3).replaceAll("\"", ""),
s(5).replaceAll("\"", "").toInt
)
).toSchemaRDD
bank.registerTempTable("bank")
总结
apache zeppelin分布式计算、数据分析从业者,代码量少,模块很清楚,可以尝试接入不同计算引擎,试试任务运行、可视化效果。没有过多复杂的操作,只是区分了多个notebook,每个notebook里做单独的分析处理工作,流程和结果会被保存下来。此外,为spark做了更好的支持,比如默认是scala环境,默认sc已经创建好,即spark local可跑,默认spark sql有可视化效果。
Publish
Zeppelin provides an URL to display the result only, that page does not include Zeppelin’s menu and buttons. This way, you can easily embed it as an iframe inside of your website.