psutil 缺失与 archive_util 导入错误
# 🚨 问题概述
在部署 Ambari Metrics Monitor 时,执行启动命令时报如下异常:
Traceback (most recent call last):
File "/var/lib/ambari-agent/cache/common-services/AMBARI_METRICS/3.0.0/package/scripts/metrics_monitor.py", line 78, in <module>
AmsMonitor().execute()
File "/usr/lib/ambari-agent/lib/resource_management/libraries/script/script.py", line 355, in execute
method(env)
File "/var/lib/ambari-agent/cache/common-services/AMBARI_METRICS/3.0.0/package/scripts/metrics_monitor.py", line 43, in start
action = 'start'
File "/usr/lib/ambari-agent/lib/ambari_commons/os_family_impl.py", line 89, in thunk
return fn(*args, **kwargs)
File "/var/lib/ambari-agent/cache/common-services/AMBARI_METRICS/3.0.0/package/scripts/ams_service.py", line 109, in ams_service
user=params.ams_user
File "/usr/lib/ambari-agent/lib/resource_management/core/base.py", line 166, in __init__
self.env.run()
File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 160, in run
self.run_action(resource, action)
File "/usr/lib/ambari-agent/lib/resource_management/core/environment.py", line 124, in run_action
provider_action()
File "/usr/lib/ambari-agent/lib/resource_management/core/providers/system.py", line 280, in action_run
returns=self.resource.returns)
File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 72, in inner
result = function(command, **kwargs)
File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 102, in checked_call
tries=tries, try_sleep=try_sleep, timeout_kill_strategy=timeout_kill_strategy, returns=returns)
File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 150, in _call_wrapper
result = _call(command, **kwargs_copy)
File "/usr/lib/ambari-agent/lib/resource_management/core/shell.py", line 314, in _call
raise ExecutionFailed(err_msg, code, out, err)
resource_management.core.exceptions.ExecutionFailed: Execution of '/usr/sbin/ambari-metrics-monitor --config /etc/ambari-metrics-monitor/conf start' returned 255. Building psutil...
Traceback (most recent call last):
File "setup.py", line 17, in <module>
from distutils.core import setup, Extension
File "/usr/lib64/python2.7/distutils/core.py", line 21, in <module>
from distutils.cmd import Command
File "/usr/lib64/python2.7/distutils/cmd.py", line 11, in <module>
from distutils import util, dir_util, file_util, archive_util, dep_util
ImportError: cannot import name archive_util
Verifying Python version compatibility...
Using python /usr/bin/python2
Checking for previously running Metric Monitor...
/var/run/ambari-metrics-monitor/ambari-metrics-monitor.pid found with no process. Removing 14127...
Starting ambari-metrics-monitor
Verifying ambari-metrics-monitor process status with PID : 18087
Output of PID check :
ERROR: ambari-metrics-monitor start failed. For more details, see /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out:
====================
----------------------Finished building psutil---------------------
psutil binaries need to be built by running, psutil/build.py manually or by running a, mvn clean package, command.
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/resource_monitoring/main.py", line 26, in <module>
from core.controller import Controller
File "/usr/lib/python2.6/site-packages/resource_monitoring/core/controller.py", line 29, in <module>
from host_info import HostInfo
File "/usr/lib/python2.6/site-packages/resource_monitoring/core/host_info.py", line 25, in <module>
import psutil
ImportError: No module named psutil
====================
Monitor out at: /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
这是由于 psutil
模块未正确安装或 Python 环境缺失某些基础工具导致的。
# 🎯 典型错误日志分析
启动 Metrics Monitor 的过程中,日志中关键异常如下:
ImportError: cannot import name archive_util
ImportError: No module named psutil
Execution of '/usr/sbin/ambari-metrics-monitor ...' returned 255
1
2
3
2
3
这两个错误本质是 Python2 依赖不全导致 psutil 安装失败:
archive_util.py
是distutils
模块的一部分,部分老旧系统未预置。psutil
是 Monitor 的核心依赖模块,未安装或编译失败会导致启动直接中断。
# 🛠 一站式解决方案脚本
为避免手动排查环境问题,建议使用如下脚本一次性完成依赖修复与模块安装:
#!/bin/bash
echo "== 一站式修复 Ambari Metrics Monitor 依赖问题 =="
# 1. 修复 archive_util.py 缺失(使用 ghfast.top 镜像)
echo "-- 下载 archive_util.py ..."
mkdir -p /usr/lib64/python2.7/distutils
curl -fsSL -o /usr/lib64/python2.7/distutils/archive_util.py \
https://ghfast.top/https://raw.githubusercontent.com/python/cpython/2.7/Lib/distutils/archive_util.py
# 验证 import 正常
python -c "from distutils import archive_util" || {
echo "!! archive_util 依然导入失败,请手动检查路径 /usr/lib64/python2.7/distutils/"
exit 1
}
echo "== archive_util 修复成功 =="
# 2. 设置 pip 国内源(阿里云)
echo "-- 设置 pip 镜像源为阿里云"
mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
EOF
# 3. 安装 pip(使用 aliyun 国内源)
echo "-- 安装 pip(使用 aliyun 国内源)..."
curl -O https://mirrors.aliyun.com/pypi/get-pip.py
python get-pip.py
# 4. 安装 psutil
echo "-- 安装 psutil 模块 ..."
pip install psutil
# 5. 验证 psutil 可用
python -c "import psutil; print psutil.__version__" || {
echo "!! psutil 安装失败,请检查"
exit 1
}
echo "== psutil 安装成功 =="
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
你也可以保存为脚本 fix-monitor.sh
并执行:
bash fix-monitor.sh
1
# ✅ 执行成功后验证结果
执行完成后重新启动 Monitor,psutil
模块已成功导入,错误日志消失: