写点什么

联通大数据实操:CDH 部署多版本的 Python 环境及搭建本地的 Python 第三方库

  • 2019-09-09
  • 本文字数:4039 字

    阅读完需:约 13 分钟

联通大数据实操:CDH部署多版本的Python环境及搭建本地的Python第三方库

由于其易用性好,以及现在机器学习和人工智能的崛起,Python 成为当前非常火热的一门语言。承载多租户的大数据平台往往对于 Python 版本和第三方库有很多个性化的需求,联通大数据平台承载了百度、阿里、腾讯、苏宁、京东等上百个租户,在租户部署模型时就会要求集群计算节点拥有不同类别的 Python 科学计算包。下文将主要讲述如何在 CDH 集群基于二次打包的 Anaconda 安装包部署 Python 多版本运行环境,并搭建本地 Python 第三方库。

基于 Anaconda 部署 Python3

一般生产环境默认 python 版本为 2.7,为了提供多版本 python 开发环境。需要先下载 anaconda 的 parcel 安装包并解压到本地,安装 python3 虚拟环境,然后安装集群计算节点所需要的常用 python 第三方包,如 TensorFlow 等科学计算包。


需准备:


  • 电脑准备 300G 或以上的存储空间;

  • wget:下载某个源的所有 package 到本地;

  • Nginx:发布本地 PyPI。


首先我们先进行 Anaconda.Parcel 的解压和 Python3 环境的创建:


第一步:下载 Anaconda 的 Parcel 包。


参考链接:https://repo.continuum.io/pkgs/misc/parcels/archive/



第二步:解压 Anaconda 的 Parcel 包,安装 Python3 私有环境。




安装好后显示环境如下:




安装私有的 Python 第三方本地库,Python 第三方库分为 pip 和 Conda 库两种安装方式(最后我们选择 Conda,比 pip 功能更强大,完善包及虚拟环境管理工具):


Conda 私有库安装方式:


首先通过外网下载所有第三方包,第三方包在清华镜像站,虽然有部分包不是最新版本,但下载速度快。


参考链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/


由于公司主机不能连接外网。这里就省事地通过 Windows 安装 wget 全量捞取页面所需包。


Windows 安装 wget:


以管理员身份运行 CMD,下载安装 wget。


C:\WINDOWS\system32>@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"C:\WINDOWS\system32>choco install wget
复制代码


wget 安装完毕,如果想更新,就输入:


C:\WINDOWS\system32>choco upgrade wget
复制代码


下载第三方 Python 包:


通过 UE 列操作范围选择过滤各个包名,存入 txt。然后使用 wget 读取 txt 下载,下载时间大概持续 7~8 个小时。


-b 后台,-c 断电追加, -i 读取文档多个连接, -p 下载 urls 下所有文档, -f 指定日志文件位置。


wget -b -c -i C:\conf\pyku.txt -p C:\conf\ku -f C:\conf\wget-log
复制代码


Linux,安装 Nginx,并配置本地文件 HTTP 映射。


具体 Nginx 配置如下:


先配置两个页面:


/usr/share/nginx/html
index.html<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}</style></head><body><h1>Welcome to nginx!</h1><a href="http://12.109.21.84/pkgs/free/">free</a><a href="http://12.109.21.84/pkgs/main/">main</a>
<p><em>Thank you for using nginx.</em></p></body></html>

free.html
cat free.html<!DOCTYPE html><html><head></head><body><a href="http://12.109.21.84/pkgs/free/linux-64/">linux-64</a><a href="http://12.109.21.84/pkgs/main/linux-64/">linux-64</a></body></html>


/etc/nginx/conf.d
server {listen 80;server_name localhost;
#charset koi8-r;#access_log /var/log/nginx/log/host.access.log main;
location / {root /usr/share/nginx/html/;index index.html index.htm;}location /pkgs/free {alias /usr/share/nginx/html/pkgs/free/;index index.html index.htm;autoindex on;autoindex_exact_size on;autoindex_localtime on;}location /pkgs/free/linux-64 {alias /opt/beh/core/condaku/freeku/;autoindex on;autoindex_exact_size on;autoindex_localtime on;}location /pkgs/free/noarch {alias /opt/beh/core/condaku/freenorch/;index index.html index.htm;autoindex on;autoindex_exact_size on;autoindex_localtime on;}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
复制代码


配置好之后,启动 Nginx,查看本地页面如下:



配置 condarc:


conda config --add channels http://12.109.21.84/pkgs/free/ conda config --add channels http://12.109.21.84/pkgs/free/noarch/ conda config --set show_channel_urls yesvi ~/.condarc删除  - defaults这一行,保存退出后,source ~/.condarc
复制代码


安装第三方包:


使用命令 conda install 包名。



若在私有库没有的一些第三方库,也可以下载安装包之后移动到 pkgs 目录下。



使用 pip 安装 whl 包。



打包创建好 Python3,安装好所需科学计算包的 Anaconda,生成 sha 校验文件。


tar -zcvf Anaconda-5.0.1-el7.parcel Anaconda-5.0.1 --owner=root --group=rootsha1sum Anaconda-5.0.1-el7.parcel | cut -d ' ' -f 1 > Anaconda-5.0.1-el7.parcel.sha
复制代码


将 Anaconda 和生成的 sha 校验文件一起拷贝到 Parcel-Repo 目录下。



通过 CM 的 Parcel 管理,进行 Anaconda 的分发激活。



下面还整理了一份搭建私有 Python pip 源的过程(Windows 环境):


1、安装 Anaconda


参考链接:https://www.jb51.net/article/137772.htm


这个链接提供了 Anaconda 的安装,和使用国内镜像快速下载 Anaconda(5~6M/s)。


2、搭建自己的 pip 源


参考链接:https://www.jianshu.com/p/799b3490ad6d


  • 准备 300G 或以上的存储空间;

  • bandersnatch:下载某个源的所有 package 到本地;

  • Nginx:发布本地 PyPI。


这个网站提供的是 Linux 的,不过 Windows 也能用,具体如下:


1)首先下载 bandersnatch,因为装好了 Anaconda,所以可以使用 pip 直接下载


pip install bandersnatch


2) 生成配置文件 /etc/bandersnatch.conf


bandersnatch mirror


注:这一步会报错,因为 Windows 没有/etc 目录,直接在 C 盘下创建 etc 文件夹 ,然后再次运行会发现:C:\\etc\\bandersnatch.conf


文件被生成。


3)根据实际情况,重点修改以下两个配置,directory 指 package 在本地存放的位置,master 指被同步的源


[mirror]; The directory where the mirror data will be stored.directory = /srv/pypi
; The PyPI server which will be mirrored.; master = https://testpypi.python.org; scheme for PyPI server MUST be httpsmaster = https://pypi.python.org
复制代码


这部分需要修改为 Windows,且 directory 目录至少要 300G,包太多:



4)下载所有 package 至本地,我这要在 Windows 下的 Anconda Prompt 里面运行



bandersnatch -c /etc/bandersnatch.conf mirror$ bandersnatch -c /etc/bandersnatch.conf mirror2014-01-15 09:49:26,556 INFO: bandersnatch/1.5 (CPython 2.7.6-final0, Linux 3.19.0-37-generic x86_64)2014-01-15 09:49:26,558 INFO: Setting up mirror directory: /srv/pypi/2014-01-15 09:49:26,559 INFO: Setting up mirror directory: /srv/pypi/web/simple2014-01-15 09:49:26,560 INFO: Setting up mirror directory: /srv/pypi/web/packages2014-01-15 09:49:26,560 INFO: Setting up mirror directory: /srv/pypi/web/local-stats/days2014-01-15 09:49:26,561 INFO: Generation file missing. Reinitialising status files.......
复制代码


更新本地的 pacakge,(我暂时没用到,刚下载完,再去更新,会发现全是文件已存在):


bandersnatch -c /etc/bandersnatch.conf mirror
复制代码


5)安装并配置 Nginx(我的是基于 Windows,我安装的是下面链接的 Nginx 版本,没用最新的)


参考链接:https://www.cnblogs.com/qfb620/p/5508468.html


测试 Nginx 可用后,关闭 Nginx,然后修改配置文件:


D:\nginx\nginx-1.8.1\conf\nginx.conf
复制代码


备份该文件,然后删除里面的 server{…},用如下替换:


server {  listen *:80;  server_name localhost;  root F:\\python_package\\web;  autoindex on;  charset utf-8;}
复制代码


注:F:\\python_package\\web 是之前 bandersnatch 下载包之后自动生成的。


配置好之后,启动 Nginx。


6)配置其他服务器的 pip 源(基于 Windows)


我这里用的是同一个局域网的其他 Windows 电脑。(能 Ping 通我的 IP)


来到另一台电脑,安装 Python 后会自带 pip,然后做如下操作:


参考链接:https://www.cnblogs.com/cwp-bg/p/8497075.html


打开查看隐藏文件夹选项后来到:(AppData 为隐藏项目)C:\Users\Administrator\AppData\Roaming。


然后看有没有 pip 文件夹,没有就新建该文件夹,然后在该文件夹下新建 pip.ini,输入如下:


[global]timeout = 6000index-url = http://我的机器ip/simpletrusted-host = 我的机器ip
复制代码


7)测试 pip install


用配置好 pip 源的电脑,管理员运行 CMD,输入如下:


pip install pymysql
复制代码


结果如下:



生效,确实访问了我的 IP 下的 pip 源,并且路径一致,可以在我的电脑浏览器输入链接,找到该文件:


输入链接:http://我的机器ip/packages/ed/39/15045ae46f2a123019aa968dfcba0396c161c20f855f11dea6796bcaae95/


发现如下:



8)下一步,照搬到 Linux。


作者介绍


余澈,中国联通大数据技术部平台组核心技术负责人,项目管理高级工程师,具有多年大数据平台运维管理及开发优化经验。管理过多个上千节点集群,擅长对外多租户平台的维护开发。信科院大数据性能测试、功能测试主力,大厂 PK 获得双项第一。


本文转载自公众号 DBAplus 社群(ID:dbaplus)


原文链接


https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650780800&idx=2&sn=0def50e6bb44db39b2457e6ac152e0df&chksm=f3f90115c48e8803c6eb4d33e5eefe62c15afa0c02b8a180e2dcb8f3448252859e212cc25f58&scene=27#wechat_redirect


2019-09-09 08:002786

评论 1 条评论

发布
用户头像
厉害厉害!
2019-09-09 09:01
回复
没有更多了
发现更多内容

DevSecOps,让速度和安全兼顾

飞算JavaAI开发助手

共议公共数据开放,“数牍方案”亮相数字中国建设峰会

Jessica@数牍

隐私计算 数牍科技 公共数据开放

如何通过ETL调度工具 TASKCTL 使用作业插件类型调用 kettle作业?

敏捷调度TASKCTL

数据仓库 kettle ETL #运维 TASKCTL

如何借助自动化工具落地DevOps|含低代码与DevOps应用实践

云智慧AIOps社区

开源 DevOps 低代码平台 开发与运维

导数、微分、偏导数、全微分、方向导数、梯度的定义与关系

矛始

高数 导数 微分

使用python玩转文字类视频

技能实验室

签约计划第三季

智能家居行业发展,密切关注边缘计算和小程序容器技术

Speedoooo

智能设备 边缘计算 智能家居 小程序容器

AOP切入点表达式及五种通知类型解析

王小凡

我们被一个 kong 的性能 bug 折腾了一个通宵

尔达Erda

程序员 运维 云原生 性能 bug

超越 Nginx!号称下一代 Web 服务器,用起来够优雅

冉然学Java

Java nginx GitHub 服务器 Web、

spark-streaming状态流之mapWithState

矛始

spark 状态流

技术风向标 | 云原生技术架构成熟度模型解读

阿里巴巴云原生

阿里云 云原生 成熟度模型

1对1直播源码——1对1语音聊天源码

开源直播系统源码

直播系统源码 语音聊天系统软件开发 一对一语音聊天软件

BSN IPFS(星际文件系统)专网简介、功能、架构及特性、接入说明

BSN研习社

BSN 分布式存储,

大型仿人机器人整机构型研究与应用

优必选科技

机器人

带你熟悉云网络的“电话簿”:DNS

华为云开发者联盟

云计算 后端 IP DNS 局域网

兆骑科创高端人才项目引进落地,双创大赛承办,线上直播路演

兆骑科创凤阁

双创大赛承办

公共数据如何兼顾开放利用和隐私安全合规?

Jessica@数牍

数据安全 隐私计算 公共数据开放 数据开放和利用

担心 GitHub?那就试试极狐GitLab 吧

极狐GitLab

git GitHub 开源 DevOps gitlab

双屏协作效率翻倍 灵耀X双屏Pro引领双屏科技新潮流

科技热闻

实践GoF的23种设计模式:观察者模式

华为云开发者联盟

Web 设计模式 开发 GoF

研发效能的道与术 - 道篇

FreeW

架构 研发效能

TDengine 落地协鑫能科,数百亿数据压缩至 600GB

TDengine

数据库 tdengine 时序数据库

什么是传输层协议TCP/UDP???

C++后台开发

TCP 网络协议 udp 后端开发 C/C++开发

次轮Okaleido Tiger即将登录Binance NFT,引发社区热议

西柚子

netty入门之服务端启动过程分析

Hex

Java 后端 Netty

Java 将OFD转换为PDF

在下毛毛雨

Java PDF OFD 格式转换

大咖说·图书分享 | 精益产品开发:原则、方法与实施

大咖说

产品开发 落地方法

一文详解 Redis 中 BigKey、HotKey 的发现与处理

冉然学Java

Java redis 微服务 bigkey HotKey

一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持

网络安全 经验分享 签约计划第三季

Qakbot新型感染链:使用Windows7系统侧加载感染设备

郑州埃文科技

dll Windows7 Qakbot

联通大数据实操:CDH部署多版本的Python环境及搭建本地的Python第三方库_大数据_余澈_InfoQ精选文章