eclipse - 导出 Hadoop 库类路径的 Shell 脚本不起作用
问题描述
我正在尝试使用 pyarrow 包开发与 Hadoop 文件系统 3.3 交互的 Python 客户端。我的操作系统是 CentOS 8,IDE 是 Eclipse pydev。示例代码很简单。
from pyarrow import fs
hdfs = fs.HadoopFileSystem('localhost', 9000)
但是必须执行先决条件命令才能成功运行 python 代码。命令是
# export CLASSPATH=`$HADOOP_HOME/bin/hdfs classpath --glob`
每当我运行 Eclipse IDE 时,我都必须在 Eclipse 之前执行上述export CLASSPATH
命令。为了防止这种不便并自动化 IDE 配置,我制作了如下所示的 shell 脚本文件,
#! /bin/bash
export CLASSPATH=$(/usr/local/hadoop/bin/hdfs classpath --glob)
echo $CLASSPATH
当我执行这个脚本时,shell 脚本的输出消息是正确的。但是当我在下一行执行 Eclipse 时,上面的 pyarrow Python 代码无法成功运行。我不知道这个失败。
当我export CLASSPATH
在 shell 本身上执行命令时,Eclipse 上的 Python 代码可以正常工作。但是当我执行 shell 脚本时,Eclipse Python 代码会抛出错误。
更新
我进入 [Run Configurations] 菜单并选择 [Environment] 选项卡。我单击 [添加] 并将以下值输入到 [新环境变量] 对话框中。
Name : CLASSPATH
Value : $(/usr/local/hadoop/bin/hdfs classpath --glob)
但是我的配置不正确,还是再次带来同样的错误。
我附上了我的 IDE 配置的图像。
解决方案
正如评论中提到的,在 eclip 的“运行配置”菜单中,您需要为被调用添加 en 环境变量条目CLASSPATH
。
该值必须是运行此命令时 shell 返回的任何值:
/usr/local/hadoop/bin/hdfs classpath --glob
不要尝试 put $(/usr/local/hadoop/bin/hdfs classpath --glob)
,它会被解释为一个字符串并且不起作用。