前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在非安全的CDH集群中部署多用户JupyterHub服务并集成Spark2

如何在非安全的CDH集群中部署多用户JupyterHub服务并集成Spark2

作者头像
Fayson
发布2018-09-29 10:59:00
3.4K0
发布2018-09-29 10:59:00
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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的依赖包

代码语言:javascript
复制
[root@cdh03 ~]# yum -y install npm nodejs-legacy

(可左右滑动)

2.在Python3中安装JupyterHub

代码语言:javascript
复制
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip install jupyterhub

(可左右滑动)

安装成功

3.使用nmp命令安装configurable-http-proxy服务

代码语言:javascript
复制
[root@cdh03 ~]# npm install -g configurable-http-proxy

(可左右滑动)

4.安装Notebook包

代码语言:javascript
复制
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip show notebook

(可左右滑动)

在Fayson的Python3环境中,默认已安装了Notebook。

5.测试JupyterHub及http代理是否安装成功

代码语言:javascript
复制
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyterhub -h

(可左右滑动)

代码语言:javascript
复制
[root@cdh03 ~]# configurable-http-proxy -h

(可左右滑动)

6.生成JupyterHub配置文件,命令如下:

代码语言:javascript
复制
[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配置文件,将配置修改为如下:

代码语言:javascript
复制
#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服务

代码语言:javascript
复制
[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用户设置密码即可。

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/jupyter kernelspec list

(可左右滑动)

上图可以看到默认Jupyter只有python3的kernel

2.在Python中安装toree包,执行命令如下:

代码语言:javascript
复制
[root@cdh03 ~]# /opt/cloudera/anaconda3/bin/pip install --upgrade toree

(可左右滑动)

安装的toree版本为0.2.0

3.使用toree安装Spark2 Scala语言的kernel,命令如下:

代码语言:javascript
复制
[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生成命令如下:

代码语言:javascript
复制
[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文件、统计行数并输出第一行内容

代码语言:javascript
复制
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用户(添加用户步骤省略)

代码语言:javascript
复制
[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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档