建议先看下参考链接:
spark-submit 提交python外部依赖包

spark-submit提交python脚本过程记录

需求:使用pyspark的过程中,发现集群的python并没有安装自己需要的包,比如elasticsearch包等,这样就只能靠自己把包打上,然后才能被分发到集群的各台节点机器上,然后被执行,这里举个例子,如何加载python的外部依赖包elasticsearch

1. 利用指定pip安装elasticsearch到指定目录

(1) 指定pip是因为公司内部机器上可能有多种pip环境,root的pip(/usr/bin/pip)一般是没有权限的,需要指定用户的pip

(2) 指定目录是因为把elasticsearch安装到spark项目环境目录中方便一点

xxx/xxxx/bin/pip install elasticsearch --target=xxx/xxx/xxxx/elasticsearch

2. 坑

安装完成之后,这里有个坑点,大家一定注意一下:

elasticsearch文件夹下是这样,说白了elasticsearch需要一些额外的依赖包urlib3certifi(因为certifi本地已经有了,所以下载目录里边就没有certifi信息)
在这里插入图片描述
可以通过pip show elasticsearch查看elasticsearch包相关的信息

在这里插入图片描述
如果直接把上面的目录打包成zip上传到spark集群上,import elasticsearch会失败的

3. 解决办法

下面分两种情况来说:

一、 集群上已经有urllib3certifi时,这时候,我们只需要将红框打包成elasticsearch.zip然后在spark-submit中的py-file 声明即可

在这里插入图片描述

二、 集群上没有urllib3certifi时,分别打包即可(不要带.dist-info文件)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐