0

3ノードクラスターにCHD3をインストールしようとしています。ClouderaManagerを介してインストールを起動します。3つのインストールはすべて失敗します。

/var/log/cloudera-scm-agent/cloudera-scm-agent.outでClouderaのインストールが失敗した後、このエラーが表示されます。

  File "/usr/lib64/cmf/agent/src/cmf/agent.py", line 19, in <module>
    import psutil
  File "/usr/lib64/cmf/agent/build/env/lib/python2.6/site-packages/psutil-0.3.0-py2.6-linux-x86_64.egg/psutil/__init__.py", line 84, in <module>
    TOTAL_PHYMEM = _psplatform.phymem_usage()[0]
  File "/usr/lib64/cmf/agent/build/env/lib/python2.6/site-packages/psutil-0.3.0-py2.6-linux-x86_64.egg/psutil/_pslinux.py", line 122, in phymem_usage
    percent = usage_percent(total - (free + buffers + cached), total,
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

どうやら、起動時に実行されているPythonインタープリターは、「free」、「buffers」、または「cached」がNoneTypeを持っていると見なし、このエラーによりインストール全体がロールバックします。

なぜこれが発生するのか、および/または問題を回避する方法について誰かがアドバイスできますか?

前もって感謝します。

4

1 に答える 1

1

問題は、_pslinux.py の phymem_usage() にあります。

def phymem_usage():
    # total, used and free values are matched against free cmdline utility
    # the percentage matches top/htop and gnome-system-monitor
    f = open('/proc/meminfo', 'r')
    try:
        total = free = buffers = cached = None
        for line in f:
            if line.startswith('MemTotal:'):
                total = int(line.split()[1]) * 1024
            elif line.startswith('MemFree:'):
                free = int(line.split()[1]) * 1024
            elif line.startswith('Buffers:'):
                buffers = int(line.split()[1]) * 1024
            elif line.startswith('Cached:'):
                cached = int(line.split()[1]) * 1024
                break
        used = total - free
        percent = usage_percent(total - (free + buffers + cached), total,
                                _round=1)
        return ntuple_sysmeminfo(total, used, free, percent)
    finally:
        f.close()

/proc/meminfo を調べ、フィールドが存在するかどうかをチェックせずにフィールドを整数に変換していることに注意してください。一部の仮想化テクノロジを含む一部のシステムでは、バッファまたはキャッシュが見つからない場合があります。(LSB 仕様では、これらのフィールドのほとんどはオプションであると規定されています。)

簡単な修正は、/proc/meminfo を /tmp/meminfo に変更し、"cat /proc/meminfo >/tmp/meminfo" にして、次のような行を追加することです。

バッファ: 0 kB

于 2012-08-02T14:25:39.557 に答える