当前位置: 首页 > news >正文

CDH集群离线配置python3环境,并安装pyhive、impyla、pyspark

背景:

项目需要对数仓千万级数据进行分析、算法建模。因数据安全,数据无法大批量导出,需在集群内进行分析建模,但CDH集群未安装python3 环境,需在无网情况下离线配置python3环境及一系列第三方库。

采取策略,使用外部联网linux环境创建python3虚拟环境,然后整体迁移集群环境

文章目录

          • 1. 外部机器和集群统一安装anaconda3环境[官网下载地址](https://www.anaconda.com/download#downloads)
          • 2. 外部机器安装pyhive、impyla、pyspark、ipykernel
          • 3. 环境迁移
          • 4. 问题解决(坏的解释器:没有那个文件或目录)
          • 5. jupyterlab 内核生成
          • 6. pyhive、impyla连接测试
          • 7. pyspark 对接CDH集群spark测试【pyspark版本要和集群CDH spark版本一致】

1. 外部机器和集群统一安装anaconda3环境官网下载地址
>> sh Anaconda3-2023.03-1-Linux-x86_64.sh
2. 外部机器安装pyhive、impyla、pyspark、ipykernel
>> conda create -n python3.7 python=3.7  # 创建py3.7虚拟环境,CDH集群spark2.4.0最高支持python3.7
>> conda activate python3.7       # 激活虚拟环境
>> pip install pyhive,impyla,pyspark # pip会自动安装thrif等依赖包,若报gcc等系统问题,具体问题百度分析
>> pip install ipykernel        # 创建jupyter内核使用,使用jupyterlab远程进行数据分析
>> pip install scikit-learn、lightgbm # 安装其他需要第三方库
3. 环境迁移
外部机器/anaconda3/envs>> zip -r python3.7.zip ./python3.7  # 压缩整个虚拟环境
集群/anaconda3/envs>> unzip python3.7.zip                  # 大功告成
4. 问题解决(坏的解释器:没有那个文件或目录)

迁移后 >> ./pip 提示 找不到python解释器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTKhm2QL-1692673902815)(C:\Users\zy\Desktop\集群离线配置python3+jupyterlab+pyspark+impyla.assets\image-20230801101207769.png)]

迁移后 ipykernel 提示找不到python解释器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QvUlMG9n-1692673902816)(C:\Users\zy\Desktop\集群离线配置python3+jupyterlab+pyspark+impyla.assets\image-20230815102600598.png)]

解决:

进入envs/python3.7/bin 下,修改pip、pip3、ipykernel等命令内容,将第一行改为集群python对应路径。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jGdIrACZ-1692673902816)(C:\Users\zy\Desktop\集群离线配置python3+jupyterlab+pyspark+impyla.assets\image-20230801101924909.png)]

5. jupyterlab 内核生成
#1 激活、退出虚拟环境
>> conda activate python3.7    [conda deactivate]#2. 虚拟环境下
>> ipython kernel install --user --name=python3.7#3. 重启jupyter-lab 查看即可
>> nohup ./jupyter-lab --allow-root > /data/xx/anaconda3/log.out &# 备注:jupyterlab 服务由anaconda3主环境base创建
>> jupyter-lab --generate-config (配置远程访问)
>> vim jupyter_lab_config.py
'''
c.ServerApp.ip = '0.0.0.0'
c.ServerApp.port = 8888
c.ServerApp.passwd = 8888
c.ServerApp.notebook_dir = '/data/xx/anaconda3/data'
c.ServerApp.open_browser = False
c.NotebookApp.passwords = {'user1': 'sha1:user1_password_hash', # >> python -c "from notebook.auth import passwd; print(passwd())" 生成用户密码'user2': 'sha1:user2_password_hash','user3': 'sha1:user3_password_hash'
}
'''

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZ45Demg-1692673902817)(C:\Users\zy\Desktop\集群离线配置python3+jupyterlab+pyspark+impyla.assets\image-20230822105553580.png)]

6. pyhive、impyla连接测试
from pyhive import hive
from impala.dbapi import connect
from impala.util import as_pandas## python 读取数仓第一种方式  hive:jbdc
# pyhive 连接
conn = hive.Connection(host='namenode',port=10000,database='库名')
cursor = conn.cursor()# 执行查询
cursor.execute('desc user_info')
col_name = [i[0] for i in cursor.fetchall()]
cursor.execute('select * from user_info limit 2')
data = cursor.fetchall()
print(pd.DataFrame(data=data,columns=col_name))# 关闭hive连接
cursor.close()
conn.close()## python 读取数仓第二种方式  impala:jbdc
# 连接impala
conn = connect(host='namenode',port=21050,database='库名')
cursor = conn.cursor()# 执行查询
cursor.execute('select * from user_info where name is not null')
data = as_pandas(cursor)

备注:使用pyhive和impyla 读取数据,还是读取到一台集群节点内存上,速度慢,占内存,且分析比较困难,适合小批量处理。如处理千万级数据,还是使用pyspark进行并行分析。

7. pyspark 对接CDH集群spark测试【pyspark版本要和集群CDH spark版本一致】
## python 分析大量数据 pyspark
import os
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSessionimport warnings
warnings.filterwarnings(action='ignore')# 制定集群spark、hadoop家目录os.environ['SPARK_HOME'] = '/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p0.6751098/lib/spark'
os.environ['HADOOP_CONF_DIR'] = '/opt/cloudera/parcels/CDH-6.3.4-1.cdh6.3.4.p0.6751098/lib/hadoop'
os.environ['PYSPARK_PYTHON'] = './py3/bin/python' parameters = [('spark.app.name','sklearn'),('spark.yarn.dist.files','hdfs://namenode:8020/python3/python3.7.zip#py3')('spark.master','yarn'),('spark.submit.deploymode','client'),]conf = SparkConf().setAll(parameters)
#sc = SparkContext.getOrCreate(conf=conf)
spark = SparkSession.builder.config(conf=conf).enableHiveSupport().getOrCreate()
spark

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hcaapiDV-1692673902817)(C:\Users\zy\Desktop\集群离线配置python3+jupyterlab+pyspark+impyla.assets\image-20230822110440084.png)]
备注:一般会报
Permission denied: user=root, access=WRITE, inode=“/user/spark/applicationHistory”:spark:spark:drwxr-xr-x 权限错误,
这是因为写代码得用户时jupyter服务启动用户,而CDH 中hadoop、hive、spark 文件的用户分别为hdfs、hive、spark用户。

相关文章:

CDH集群离线配置python3环境,并安装pyhive、impyla、pyspark

背景: 项目需要对数仓千万级数据进行分析、算法建模。因数据安全,数据无法大批量导出,需在集群内进行分析建模,但CDH集群未安装python3 环境,需在无网情况下离线配置python3环境及一系列第三方库。 采取策略&#xf…...

python并行操作(基于concurrent.futures.ThreadPoolExecutor)

文章目录 一、明确自身cpu可并行的核数二、根据所有任务计算在各个核上平均跑多少任务三、最后把任务划分在不同的核上跑四、拿来主义 此为利用cpu并行计算的能力,充分利用cpu在循环时并行计算。其实也是受C并行操作的影响,如果需要C版,可以移…...

Leetcode.73矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…...

jdk 04 stream的collect方法

01.收集(collect) collect,收集,可以说是内容最繁多、功能最丰富的部分了。 从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。 collect主要依赖java.util.stream.Collectors类内置的静态方…...

介绍REST API

REST (Representational State Transfer) 是一种基于 web 架构的 API 设计风格, 允许客户端应用程序通过 HTTP 请求与服务器进行交互。RESTful API就是按照REST风格设计的API。 RESTful API 的设计原则包括:使用统一资源标识符 (URI) 标识资源&#xff…...

【leetcode 力扣刷题】反转链表+递归求解

反转链表递归求解 206. 反转链表解法①:取下一个节点在当前头节点前插入解法②:反转每个节点next的指向解法③:递归 92.反转链表Ⅱ反转left到right间节点的next指向 234.回文链表解法①:将链表元素存在数组中,在数组上…...

一文读懂Redis配置,史上真香配置

文章目录 基本配置项AOF持久化配置项RDB持久化配置项淘汰策略配置项主从复制配置项鸣谢 让那些总为redis连接异常的小白指引明灯,少走弯路。为那些不知道如何进行高级配置的大佬整一杯小酒。 基本配置项 bind:用于设置Redis绑定的IP地址。默认情况下&…...

maven打出jar中动态替换占位符

使用场景&#xff1a; maven打出的jar中pom.xml动态替换占位符 有些时候某些公共工具jar包被项目引用后发现公共jar的pom.xml中的version依然还是占位符&#xff0c;例如下面 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…...

【Git游戏】通过游戏重新学习Git

在提交树上移动 HEAD HEAD:一个标志符号&#xff08;通常情况下指向当前分支&#xff0c;间接指向当前最新的提交记录&#xff09; 可以通过git checkout commitID从而指向提交记录 commitID 本身是一串哈希值&#xff08;基于 SHA-1&#xff0c;共 40 位&#xff09; 我们在…...

如何通过以太坊JSON-RPC方式获取ERC-20代币的信息?

目录 一、ERC-20介绍 二、ERC-20代币标准功能 1、可选功能 2、标准功能 三、获取代币信息...

线性代数的学习和整理4: 求逆矩阵的多种方法汇总

目录 原始问题&#xff1a;如何求逆矩阵&#xff1f; 1 EXCEL里&#xff0c;直接可以用黑盒表内公式 minverse() 数组公式求A- 2 非线性代数方法&#xff1a;解方程组的方法 3 增广矩阵的方法 4 用行列式的方法计算&#xff08;未验证&#xff09; 5 A-1/|A|*A* &…...

【C#学习笔记】匿名函数和lambda表达式

文章目录 匿名函数匿名函数的定义匿名函数作为参数传递匿名函数的缺点 lambda表达式什么是lambda表达式闭包 匿名函数 为什么我们要使用匿名函数&#xff1f;匿名函数存在的意义是为了简化一些函数的定义&#xff0c;特别是那些定义了之后只会被调用一次的函数&#xff0c;与其…...

百度Apollo:引领自动驾驶技术创新的先锋

文章目录 前言一、内容总结 前言 大家好&#xff0c;我是萝卜头不吃萝卜头&#xff0c;今天和大家分享一下我学习百度Apollo自动驾驶的心得。 在七月份的时候&#xff0c;我收到了Apollo开发者社区的邀请&#xff0c;进行学习Apollo自动驾驶汽车的2023星火培训训练&#xff0c…...

Redis 重写 AOF 日志期间,主进程可以正常处理命令吗?

重写 AOF 日志的过程是怎样的&#xff1f; Redis 的重写 AOF 过程是由后台子进程 bgrewriteaof 来完成的&#xff0c;这么做有以下两个好处。 子进程进行 AOF 重写期间&#xff0c;主进程可以继续处理命令请求&#xff0c;从而避免阻塞主进程子进程带有主进程的数据副本。这里…...

java实现生成RSA公私钥、SHA256withRSA加密以及验证工具类

前言&#xff1a; RSA属于非对称加密。所谓非对称加密&#xff0c;需要两个密钥&#xff1a;公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对&#xff0c;如果用公钥对数据加密&#xff0c;那么只能用对应的私钥解密。如果用私钥对数据加密&#xff0c;只能用对应的公…...

lab7 thread

文章目录 Uthread: switching between threadstaskhints思路上下文的恢复和保存thread_createthread_schedule Using threads思路 Barrier Uthread: switching between threads 在这个练习中&#xff0c;你将为一个用户级别线程系统设计上下文切换机制&#xff0c;并实现它。 …...

接口自动化测试:mock server之Moco工具

什么是mock server mock&#xff1a;英文可以翻译为模仿的&#xff0c;mock server是我们用来解除依赖&#xff08;耦合&#xff09;&#xff0c;假装实现的技术&#xff0c;比如说&#xff0c;前端需要使用某些api进行调试&#xff0c;但是服务端并没有开发完成这些api&#…...

用python从零开始做一个最简单的小说爬虫带GUI界面(2/3)

目录 前一章博客 前言 主函数的代码实现 逐行代码解析 获取链接 获取标题 获取网页源代码 获取各个文章的链接 函数的代码 导入库文件 获取文章的标题 获取文章的源代码 提取文章目录的各个文章的链接 总代码 下一章内容 前一章博客 用python从零开始做一个最简单…...

CEF 缓存处理:清理缓存、禁用缓存、忽略缓存

目录 一、CEF缓存处理 1、指定缓存路径 2、清理缓存 3、禁用缓存 1)、原理分析...

Android 系统桌面 App —— Launcher 开发(1)

Android 系统桌面 App —— Launcher 开发&#xff08;1&#xff09; Launcher简介 Launcher就是Android系统的桌面&#xff0c;俗称“HomeScreen”也就是我们开机后看到的第一个App。launcher其实就是一个app&#xff0c;它的作用是显示和管理手机上其他App。目前市场上有很…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...