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

背景:

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

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

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 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


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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用户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 下载Spark2.3二进制包并解压缩到指定目录下。 2. 配置Spark2.3环境变量,包括SPARK_HOME、PATH等。 3. 在Hive配置文件hive-site.xml中添加以下配置: <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>spark.master</name> <value>yarn</value> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> </property> <property> <name>spark.executor.memory</name> <value>2g</value> </property> <property> <name>spark.executor.instances</name> <value>2</value> </property> <property> <name>spark.yarn.queue</name> <value>default</value> </property> 4. 在CDH管理界面中,选择“服务”->“Hive”->“配置”,在“Hive服务高级配置分类”中添加以下配置hive.spark.client.server.connect.timeout=600 hive.spark.client.connect.timeout=600 hive.spark.client.rpc.max.size=52428800 hive.spark.client.rpc.threads=8 hive.spark.client.rpc.maxRetries=3 hive.spark.client.rpc.retryInterval=3000 5. 重启Hive服务,使配置生效。 以上就是在CDH5上离线安装Spark2.3并配置Hive on Spark2的步骤。 ### 回答2: CDH5是Cloudera的企业级Hadoop分布式平台,它包含了Hadoop、Hive、Spark、HBase等大数据生态系统的核心组件。本文将介绍如何在CDH5上离线安装Spark2.3并配置Hive on Spark2。 一、下载Spark2.3压缩包 首先,在离线环境中下载Spark2.3的二进制压缩包。可以前往Spark的官方网站(https://spark.apache.org/downloads.html)下载,或者在其他可联网的环境中下载后通过U盘等方式复制到离线环境中。 二、解压Spark2.3压缩包 把下载好的Spark2.3压缩包复制到离线环境中,并解压到指定目录下(例如:/opt/software)。 tar -xzvf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/software 三、配置Spark2.3 1. 配置spark-env.sh 在Spark2.3的解压目录中,会有一个conf目录,里面包含了Spark的一些配置文件。我们需要修改其中的spark-env.sh文件,添加以下内容: export HADOOP_CONF_DIR=/etc/hadoop/conf export SPARK_LOCAL_IP=127.0.0.1 export SPARK_MASTER_HOST=127.0.0.1 export SPARK_MASTER_PORT=7077 其中,HADOOP_CONF_DIR指定的是Hadoop的配置文件所在目录,SPARK_LOCAL_IP是Spark本地IP地址,SPARK_MASTER_HOST指定的是Spark的master节点地址,SPARK_MASTER_PORT指定的是Spark的master节点端口号。 2. 配置spark-defaults.conf 修改spark-defaults.conf文件,添加以下内容: spark.executor.extraClassPath /opt/software/spark-2.3.0-bin-hadoop2.7/jars/* spark.driver.extraClassPath /opt/software/spark-2.3.0-bin-hadoop2.7/jars/* 其中,extraClassPath指定的是Spark j开头的jar包所在的目录。这些jar包包含了Spark运行所需的所有依赖。 四、配置Hive on Spark2 在用Spark2.3运行Hive之前,需要先配置Hive on Spark2。此配置步骤需要在Hive安装之前完成。 1. 创建hive-site.xml文件 在Hive的conf目录下,创建hive-site.xml文件,并添加以下内容: <property> <name>hive.execution.engine</name> <value>spark</value> <description>选择Hive on Spark2作为执行引擎</description> </property> <property> <name>spark.master</name> <value>spark://127.0.0.1:7077</value> <description>指定Spark的master地址</description> </property> <property> <name>spark.submit.deployMode</name> <value>client</value> <description>指定Spark的deploy模式</description> </property> <property> <name>spark.executor.instances</name> <value>1</value> <description>指定每个任务的executor数量</description> </property> <property> <name>spark.driver.extraClassPath</name> <value>/opt/software/spark-2.3.0-bin-hadoop2.7/jars/*</value> <description>指定Spark的依赖jar包所在的目录</description> </property> 2. 修改hive-exec.jar 在Hive的lib目录下,找到hive-exec.jar包,将其解压,编辑hive-site.xml文件,添加如下内容: <property> <name>hive.execution.engine</name> <value>spark</value> <description>选择Hive on Spark2作为执行引擎</description> </property> <property> <name>hive.spark.client.server.connect.timeout</name> <value>600s</value> <description>指定连接Spark的超时时间</description> </property> 重新生成hive-exec.jar: jar -cf hive-exec.jar . 3. 启动Spark 在Spark的解压目录下,执行以下命令启动Spark: ./sbin/start-all.sh 启动成功后,可以通过以下命令查看Spark的Web UI: http://127.0.0.1:8080 四、启动Hive on Spark2 在完成了Spark和Hive配置之后,就可以启动Hive on Spark2了。 1. 在Hive的bin目录下,执行以下命令启动Hive: ./hive 2. 运行Hive命令 可以执行以下Hive命令测试是否配置成功: hive> show databases; 如果一切正常,将看到当前数据仓库中的所有数据库名称。 以上就是在CDH5上离线安装Spark2.3并配置Hive on Spark2的步骤。 ### 回答3: CDH5是一套Hadoop发行版,其中包含了许多大数据组件。在CDH5上离线安装Spark2.3并配置Hive on Spark2需要进行以下步骤: 第一步,安装Java和Scala Java和Scala是Spark的预备条件。安装Java和Scala可以通过以下命令: $ sudo yum install java-1.8.0-openjdk $ sudo yum install scala 第二步,下载Spark 2.3 Spark最新的版本是2.3.0。从官方网站上下载Spark 2.3。下载后,将其解压到合适的目录中。例如,解压到/opt目录中: $ sudo tar xzf spark-2.3.0-bin-hadoop2.7.tgz -C /opt/ 第三步,配置Spark的环境变量 为了正确的运行Spark,需要设置环境变量。设置环境变量的方法如下: $ cd /opt $ sudo mv spark-2.3.0-bin-hadoop2.7 spark $ nano /etc/profile 将以下语句添加到文件末尾: export SPARK_HOME=/opt/spark export PATH=$PATH:$SPARK_HOME/bin 执行source命令,以便更改生效。 $ source /etc/profile 第四步,安装Hive on Spark2 要在Spark中使用Hive需要配置Hive on Spark2。安装Hive on Spark2可以执行以下命令: $ sudo yum install hive $ cd /opt/spark $ ./sbin/start-thriftserver.sh --master local --hiveconf hive.server2.thrift.port=10000 --hiveconf hive.server2.thrift.bind.host=localhost --hiveconf hive.server2.transport.mode=binary --hiveconf hive.server2.thrift.http.path=cliservice 第五步,使用Spark-shell 安装完Spark和配置Hive on Spark2,可以使用Spark-shell测试配置是否正确: $ /opt/spark/bin/spark-shell --master yarn --deploy-mode client 如果没有问题,便可以在Spark上使用Hive。 总结 通过以上步骤,在CDH5上离线安装Spark2.3并配置Hive on Spark2可以成功实现。这项工作的完成让您在现有的底层设施上建立一个强大的大数据处理和分析系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值