1.文档编写目的
Fayson在前一篇文章《如何在非安全的CDH集群中部署Jupyter并集成Spark2》中介绍了Jupyter Notebook的部署与Spark2集成。Jupyter提供的类似单机版Web服务,不能供给多个用户使用,对于个人用户可以满足需求,对于企业用户则相对麻烦。本篇文章Fayson主要介绍如何使用JupyterHub部署支持多用户的Jupyter Notebook服务并与集群的Spark2集成。
JupyterHub服务实现架构图:
1.CM5.15.0和CDH版本5.14.2
2.JupyterHub版本为0.9.2
3.Python版本为3.6.5
2.JupyterHub部署及配置
1.安装OS的依赖包
[root@cdh03 ~]# yum -y install npm nodejs-legacy
(可左右滑动)
2.在Python3中安装JupyterHub
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip install jupyterhub
(可左右滑动)
安装成功
3.使用nmp命令安装configurable-http-proxy服务
[root@cdh03 ~]# npm install -g configurable-http-proxy
(可左右滑动)
4.安装Notebook包
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip show notebook
(可左右滑动)
在Fayson的Python3环境中,默认已安装了Notebook。
5.测试JupyterHub及http代理是否安装成功
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyterhub -h
(可左右滑动)
[root@cdh03 ~]# configurable-http-proxy -h
(可左右滑动)
6.生成JupyterHub配置文件,命令如下:
[root@cdh03 ~]# mkdir -p /etc/jupyterhub
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyterhub --generate-config -f /etc/jupyterhub/jupyterhub_config.py
(可左右滑动)
将Jupyterhub的配置文件生成到指定目录下(/etc/jupyterhub)。
7.修改jupyterhub_config.py配置文件,将配置修改为如下:
#Jupyterhub服务监听的ip与端口,在0.9之前版本通过c.JupyterHub.port和c.JupyterHub.ip来指定
c.JupyterHub.bind_url = 'http://:8000'
#指定jupyterhub-singleuser命令绝对路径
c.Spawner.cmd = ['/opt/cloudera/anaconda3/bin/jupyterhub-singleuser']
#指定Jupyterhub服务的管理员账号,该账号拥有管理权限
c.Authenticator.admin_users = {'admin'}
(可左右滑动)
8.启动Jupyterhub服务
[root@cdh03 jupyterhub]# /opt/cloudera/anaconda3/bin/jupyterhub –f /etc/jupyterhub/jupyterhub_config.py
(可左右滑动)
如上显示启动成功,在启动命令后添加--debug参数可以显示DEBUG日志,-f指定JupyterHub启动加载的配置文件。
9.在浏览器输入http://cdh03.fayson.com:8000访问JupyterHub服务
上图可以看到Jupyterhub的登录界面,这里Fayson设置了admin用户为管理员,但并为设置该用户的密码。JupyterHub服务的用户使用的是OS的用户,JupyterHub基于OS的PAM模块进行用户认证,所以需要为OS上的admin用户设置密码即可。
[root@cdh03 ~]# id admin
uid=1006(admin) gid=1006(admin) groups=1006(admin)
[root@cdh03 ~]# passwd admin
Changing password for user admin.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@cdh03 ~]#
(可左右滑动)
接下来在登录界面输入admin/****登录即可,登录成功后显示如下界面
3.Spark2集成
Spark支持Sacla、Python、R语言,下面Fayson主要使用Apache Toree来实现Jupyter与CDH集群中的Spark2集成,通过Toree来生成集群Spark2的不同语言的内核。
1.通过如下命令查看Jupyter中默认支持的Kernel
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyter kernelspec list
(可左右滑动)
上图可以看到默认Jupyter只有python3的kernel
2.在Python中安装toree包,执行命令如下:
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip install --upgrade toree
(可左右滑动)
安装的toree版本为0.2.0
3.使用toree安装Spark2 Scala语言的kernel,命令如下:
[root@cdh03 ~]# /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@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyter toree install --interpreters=PySpark,SparkR,SQL --spark_home=/opt/cloudera/parcels/SPARK2/lib/spark2
(可左右滑动)
查看Jupyter的Kernel
5.以上步骤就完成了Jupyterhub与Spark2的集成,重启Jupyterhub服务
4.JupyterHub使用
1.使用管理员账号登录JupyterHub,登录成功后默认的启动一个Jupyter Notebook
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.JupyterHub与Jupyter的区别是支持了多用户访问,用于创建、管理、代理多个Jupyter Notebook示例。
2.JupyterHub与Spark2集成时同样使用Apache Toree实现,与Jupyter公用一套kernel配置
3.在部署Jupyter的节点,需要安装Spark的Gateway角色
4.由于JupyterHub是基于OS的PAM模块进行用户认证,所以我们的用户需要在OS上存在,如果需要使用OPenLDAP上的用户登录,则需要在JupyterHub服务所在服务器上安装OpenLDAP客户端使用SSSD服务同步用户并集成SSH登录,否则OPenLDAP的用户是无法登录JupyterHub。
具体可以参考Fayson前面的文章关于OpenLDAP的安装与SSH集群
《1.如何在RedHat7上安装OpenLDA并配置客户端》
《2.如何在RedHat7中实现OpenLDAP集成SSH登录并使用sssd同步用户》
关于集成SSH登录并使用SSSD同步用户,需要确保OpenLDAP服务支持TLS。
下面演示使用OpenLDAP用户登录JupyterHub,在OpenLDAP上添加一个testldap用户(添加用户步骤省略)
[root@cdh03 ~]# more /etc/passwd |grep testldap
[root@cdh03 ~]# id testldap
uid=1234(testldap) gid=1234(testldap) groups=1234(testldap)
[root@cdh03 ~]# su testldap
[testldap@cdh03 root]$ su testldap
Password:
[testldap@cdh03 root]$
使用testldap用户登录JupyterHub
登录成功
关于JupyterHub更多功能及说明参考官网:
https://jupyterhub.readthedocs.io/en/0.9.0/index.html
https://github.com/jupyterhub/jupyterhub