首页 > 解决方案 > 导出 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 配置的图像。

在此处输入图像描述

标签: eclipseshellpyarrow

解决方案


正如评论中提到的,在 eclip 的“运行配置”菜单中,您需要为被调用添加 en 环境变量条目CLASSPATH

该值必须是运行此命令时 shell 返回的任何值:

 /usr/local/hadoop/bin/hdfs classpath --glob

不要尝试 put $(/usr/local/hadoop/bin/hdfs classpath --glob),它会被解释为一个字符串并且不起作用。


推荐阅读