背景:
項(xiàng)目需要對(duì)數(shù)倉(cāng)千萬(wàn)級(jí)數(shù)據(jù)進(jìn)行分析、算法建模。因數(shù)據(jù)安全,數(shù)據(jù)無(wú)法大批量導(dǎo)出,需在集群內(nèi)進(jìn)行分析建模,但CDH集群未安裝python3 環(huán)境,需在無(wú)網(wǎng)情況下離線配置python3環(huán)境及一系列第三方庫(kù)。
采取策略,使用外部聯(lián)網(wǎng)linux環(huán)境創(chuàng)建python3虛擬環(huán)境,然后整體遷移集群環(huán)境。
1. 外部機(jī)器和集群統(tǒng)一安裝anaconda3環(huán)境官網(wǎng)下載地址
>> sh Anaconda3-2023.03-1-Linux-x86_64.sh
2. 外部機(jī)器安裝pyhive、impyla、pyspark、ipykernel
>> conda create -n python3.7 python=3.7 # 創(chuàng)建py3.7虛擬環(huán)境,CDH集群spark2.4.0最高支持python3.7
>> conda activate python3.7 # 激活虛擬環(huán)境
>> pip install pyhive,impyla,pyspark # pip會(huì)自動(dòng)安裝thrif等依賴(lài)包,若報(bào)gcc等系統(tǒng)問(wèn)題,具體問(wèn)題百度分析
>> pip install ipykernel # 創(chuàng)建jupyter內(nèi)核使用,使用jupyterlab遠(yuǎn)程進(jìn)行數(shù)據(jù)分析
>> pip install scikit-learn、lightgbm # 安裝其他需要第三方庫(kù)
3. 環(huán)境遷移
外部機(jī)器/anaconda3/envs>> zip -r python3.7.zip ./python3.7 # 壓縮整個(gè)虛擬環(huán)境
集群/anaconda3/envs>> unzip python3.7.zip # 大功告成
4. 問(wèn)題解決(壞的解釋器:沒(méi)有那個(gè)文件或目錄)
遷移后 >> ./pip 提示 找不到python解釋器
遷移后 ipykernel 提示找不到python解釋器
解決:
進(jìn)入envs/python3.7/bin 下,修改pip、pip3、ipykernel等命令內(nèi)容,將第一行改為集群python對(duì)應(yīng)路徑。
5. jupyterlab 內(nèi)核生成
#1 激活、退出虛擬環(huán)境
>> conda activate python3.7 [conda deactivate]
#2. 虛擬環(huán)境下
>> ipython kernel install --user --name=python3.7
#3. 重啟jupyter-lab 查看即可
>> nohup ./jupyter-lab --allow-root > /data/xx/anaconda3/log.out &
# 備注:jupyterlab 服務(wù)由anaconda3主環(huán)境base創(chuàng)建
>> jupyter-lab --generate-config (配置遠(yuǎn)程訪問(wèn))
>> 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())" 生成用戶(hù)密碼
'user2': 'sha1:user2_password_hash',
'user3': 'sha1:user3_password_hash'
}
'''
6. pyhive、impyla連接測(cè)試
from pyhive import hive
from impala.dbapi import connect
from impala.util import as_pandas
## python 讀取數(shù)倉(cāng)第一種方式 hive:jbdc
# pyhive 連接
conn = hive.Connection(host='namenode',port=10000,database='庫(kù)名')
cursor = conn.cursor()
# 執(zhí)行查詢(xún)
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))
# 關(guān)閉hive連接
cursor.close()
conn.close()
## python 讀取數(shù)倉(cāng)第二種方式 impala:jbdc
# 連接impala
conn = connect(host='namenode',port=21050,database='庫(kù)名')
cursor = conn.cursor()
# 執(zhí)行查詢(xún)
cursor.execute('select * from user_info where name is not null')
data = as_pandas(cursor)
備注:使用pyhive和impyla 讀取數(shù)據(jù),還是讀取到一臺(tái)集群節(jié)點(diǎn)內(nèi)存上,速度慢,占內(nèi)存,且分析比較困難,適合小批量處理。如處理千萬(wàn)級(jí)數(shù)據(jù),還是使用pyspark進(jìn)行并行分析。
7. pyspark 對(duì)接CDH集群spark測(cè)試【pyspark版本要和集群CDH spark版本一致】
## python 分析大量數(shù)據(jù) pyspark
import os
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession
import 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
備注:一般會(huì)報(bào)
Permission denied: user=root, access=WRITE, inode=“/user/spark/applicationHistory”:spark:spark:drwxr-xr-x 權(quán)限錯(cuò)誤,
這是因?yàn)閷?xiě)代碼得用戶(hù)時(shí)jupyter服務(wù)啟動(dòng)用戶(hù),而CDH 中hadoop、hive、spark 文件的用戶(hù)分別為hdfs、hive、spark用戶(hù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-671548.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-671548.html
到了這里,關(guān)于CDH集群離線配置python3環(huán)境,并安裝pyhive、impyla、pyspark的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!