如何解决Flume执行时HADOOP变量名无效的警告问题?
解决Flume执行时Hadoop函数脚本变量名无效警告的方法
问题现象
执行flume-ng version时出现以下警告:
/usr/local/hadoop/libexec/hadoop-functions.sh: line 2360: HADOOP_ORG.APACHE.FLUME.TOOLS.GETJAVAPROPERTY_USER: invalid variable name /usr/local/hadoop/libexec/hadoop-functions.sh: line 2455: HADOOP_ORG.APACHE.FLUME.TOOLS.GETJAVAPROPERTY_OPTS: invalid variable name
Flume 1.7.0/1.9.0/1.11.0版本均存在该问题,环境搭配Hadoop3.1.3、HBase2.2.2。
问题根源
Hadoop的hadoop-functions.sh脚本在将Java类名转换为环境变量名时,保留了类名中的.,但Bash环境变量名不允许包含.字符,因此触发无效变量名警告。
解决方法
方法1:修改Hadoop的hadoop-functions.sh脚本
- 编辑
/usr/local/hadoop/libexec/hadoop-functions.sh文件 - 定位到报错的代码段(对应行2360和2455附近),找到构建
HADOOP_${CLASS}_USER和HADOOP_${CLASS}_OPTS变量的位置 - 将变量名中的
${CLASS}替换为${CLASS//./_},利用Bash字符串替换功能把类名中的.替换为_
例如原代码:
修改为:export HADOOP_${CLASS}_USER="${HADOOP_${CLASS}_USER:-${HADOOP_USER_NAME:-$(whoami)}}"export HADOOP_${CLASS//./_}_USER="${HADOOP_${CLASS//./_}_USER:-${HADOOP_USER_NAME:-$(whoami)}}" - 对
HADOOP_${CLASS}_OPTS做同样修改
方法2:修正.bashrc中的环境变量配置
当前.bashrc中PATH和CLASSPATH存在换行导致的配置错误,修正后可避免潜在脚本调用异常:
- 将PATH配置合并为一行:
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SPARK_HOME}/bin:${FLUME_HOME}/bin:/usr/local/scala/bin:${HBASE_HOME}/bin - 将CLASSPATH配置合并为一行:
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$(hadoop classpath):$(hbase classpath):${FLUME_HOME}/lib/* - 执行
source ~/.bashrc使配置生效
方法3:修改Flume启动脚本绕过Hadoop逻辑
- 编辑
${FLUME_HOME}/bin/flume-ng脚本 - 在脚本开头添加
export HADOOP_OPTS="",避免Flume调用Hadoop的环境变量构建逻辑 - 或者直接在脚本中指定Flume的Java参数,替代依赖Hadoop配置的方式
验证
修改完成后重新执行flume-ng version,确认警告信息消失。
内容的提问来源于stack exchange,提问作者Phako Q
相关产品推荐
相关产品推荐

