1.文档编写目的
Jupyter Notebook是一个Web应用程序,允许你创建和分享,包含实时的代码,可视化和解释性文字。常用于数据的清洗和转换、数值模拟、统计建模、机器学习和更多,支持40多种语言。python ,R,go,scala等。Jupyter Notebook是Python中的一个包,在Fayson前面的文章《如何在CDH集群上部署Python3运行环境及运行Python作业》介绍了在集群中部署Anaconda,该Python环境自带了Jupyter的包。本篇文章Fayson主要介绍如何在非安全的CDH集群中部署Jupyter Notebook并与Spark2集成。
1.CM5.15.0和CDH版本5.14.2
2.Jupyter版本为1.0.0
3.Python3.6.5
2.Jupyter部署及配置
1.检查Python环境中是否已安装了Jupyter包
[root@cdh04 bin]# /opt/cloudera/anaconda3/bin/pip show jupyter
(可左右滑动)
2.生成Jupyter Notebook的配置文件,命令如下:
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/jupyter-notebook --generate-config
(可左右滑动)
配置文件默认生成在当前用户的根目录的./jupyter/下。
3.使用python命令生成一个加密的密码
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from notebook.auth import passwd
>>> passwd()
Enter password:
Verify password:
'sha1:308253dee301:d159c07a06eacab4573cd11c17ca1987bef9259e'
>>>
(可左右滑动)
生成的密码会在下一步的配置文件中使用,主要是校验用户访问Jupyter服务。
4.修改Jupyter的配置文件/root/.jupyter/jupyter_notebook-config.py,在文件的默认增加如下配置:
#jupyter监听的ip地址,可以配置为"*"监听所有
c.NotebookApp.ip = 'cdh04.fayson.com'
#jupyter服务监听端口
c.NotebookApp.port = 8888
#jupyter服务启动时是否打开浏览器
c.NotebookApp.open_browser = False
#访问Jupyter服务时用于验证的密码,使用python命令生成的秘钥
c.NotebookApp.password = 'sha1:308253dee301:d159c07a06eacab4573cd11c17ca1987bef9259e'
(可左右滑动)
5.启动Jupyter服务
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/jupyter-notebook --allow-root
(可左右滑动)
如上显示则表示Jupyter服务启动成功。
6.在浏览器访问http://cdh04.fayson.com:8888
提示输入密码(即在配置文件中配置的密码),点击登录
如上就完成了Jupyter服务的部署。
3.Spark2集成
Spark支持Sacla、Python、R语言,下面Fayson主要使用Apache Toree来实现Jupyter与CDH集群中的Spark2集成,通过Toree来生成集群Spark2的不同语言的内核。
1.通过如下命令查看Jupyter中默认支持的Kernel
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/jupyter kernelspec list
(可左右滑动)
上图可以看到默认Jupyter只有python3的kernel
2.在Python中安装toree包,执行命令如下:
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/pip install --upgrade toree
(可左右滑动)
安装的toree版本为0.2.0
3.使用toree安装Spark2 Scala语言的kernel,命令如下:
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/jupyter toree install --spark_home=/opt/cloudera/parcels/SPARK2/lib/spark2
(可左右滑动)
查看Jupyter的Kernel
上图显示多了一个apache_toree_scala的kernel
4.使用上一步命令默认的只安装了Spark Scala的Kernel,那pyspark、sparkr及SparkSQL的Kernel生成命令如下:
[root@cdh04 ~]# /opt/cloudera/anaconda3/bin/jupyter toree install --interpreters=PySpark,SparkR,SQL --spark_home=/opt/cloudera/parcels/SPARK2/lib/spark2
(可左右滑动)
查看Jupyter的Kernel
5.以上步骤就完成了Jupyter与Spark2的集成,重启Jupyter服务
4.Jupyter使用
1.登录Jupyter
2.点击“New”新建一个Notebook,这里Fayson选择“Apache Toree- PySpark”
打开新的创建
3.运行PySpark测试代码,读取HDFS的/tmp/test.txt文件、统计行数并输出第一行内容
textFile = spark.read.text("/tmp/test.txt")
textFile.count()
textFile.first()
(可左右滑动)
运行成功结果显示如下:
也可以逐行的运行代码
4.查看CDH集群Yarn的8088界面作业
5.总结
1.使用Anaconda安装的Python默认带有Jupyter,不需要额外的安装Jupyter包
2.Jupyter与Spark2集成时使用到Apache Toree实现比较方便,不需要过多的关心Kernel的配置
3.在部署Jupyter的节点,需要安装Spark的Gateway角色