环境:jupyterhub容器 + pyspark + livy + yarn
说明:
jupyterhub以容器的方式运行,jupyterhub支持2个内核,python3和pyspark。问题是python3在容器里面,相当于与大数据集群环境隔离,无法直接读取HDFS上的文件。
现在使用pyspark,通过下列参数,配置引用独立的python环境。
%%configure -f
{
"conf":{
"spark.driver.maxResultSize":"20G",
"spark.executor.cores":"4",
"spark.executor.memory":"8G",
"spark.driver.cores":"4",
"spark.driver.memory":"8G",
"spark.dynamicAllocation.minExecutors":"30",
"spark.dynamicAllocation.maxExecutors":"150",
"spark.network.timeout":"1800",
"spark.yarn.dist.archives":"hdfs:///tmp/Python-3.6.8.zip#368",
"spark.pyspark.python":"368/Python-3.6.8/bin/python3",
"spark.pyspark.driver.python":"/user/4885/Python-3.6.8/bin/python3"
},
"name":"paopi_04885",
"queue":"root.default"
}
import dgl
发现报权限错误。Permission denied: '/home/.dgl'
解决方法:
修改源码,设置为临时目录,有权限的路径 /tmp
vim ~/Python-3.6.8/lib/python3.6/site-packages/dgl/backend/__init__.py
default_dir = os.path.join(os.path.expanduser('~'),'.dgl')
改成自己有权限的路径
default_dir = os.path.join(os.path.expanduser('/tmp'),'.dgl')
后续遇到的问题,不同的用户使用dgl,又出现了权限问题
原因分析:
在大数据集群节点,本地文件系统创建了/tmp/.dgl,不同的提交用户使用的都是/tmp/.dgl,所以会有权限问题。
解决办法:
修改源码时,不同的提交用户,设置不同的路径,如 /tmp/04885/、/tmp/xiaoming/、/tmp/xiaogang/等等,分开打python包
根据异常信息,找到报错位置
第1个位置
vim ~/Python-3.6.8/lib/python3.6/site-packages/dgl/backend/__init__.py
default_dir = os.path.join(os.path.expanduser('~'),'.dgl')
改成自己有权限的路径
default_dir = os.path.join(os.path.expanduser('/tmp/04885/'),'.dgl')
第2个位置
vim ~/Python-3.6.8/lib/python3.6/site-packages/dgl/data/utils.py
default_dir = os.path.join(os.path.expanduser('~'),'.dgl')
改成自己有权限的路径
default_dir = os.path.join(os.path.expanduser('/tmp/04885/'),'.dgl')
第3个位置
vim ~/Python-3.6.8/lib/python3.6/site-packages/dgl/backend/set_default_backend.py
default_dir = os.path.join(os.path.expanduser('~'),'.dgl')
改成自己有权限的路径
default=os.path.join(os.path.expanduser('/tmp/04885/'),'.dgl')