一、问题描述

  在hue的web界面登录了超级管理员用户(admin),想要切换其他用户(hive),注销不成功(地址栏报错:hue 500 服务器错误,然后又自动登录到超级管理员账户admin)。无其他明显报错,错误日志摘要:

 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

二、环境描述

  CM和CDH都是6.2.0版本,hue为4.3.0版本

三、错误日志

[01/Sep/2021 15:05:21 +0800] exception    ERROR    Internal Server Error: /accounts/logout/
Traceback (most recent call last):
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/build/env/lib/python2.7/site-packages/Django-1.11-py2.7.egg/django/utils/decorators.py", line 185, in inner
    return func(*args, **kwargs)
  File "/opt/cloudera/parcels/CDH-6.2.0-1.cdh6.2.0.p0.967373/lib/hue/desktop/core/src/desktop/auth/views.py", line 216, in dt_logout
    LOG.warn("Error closing Impala session: %s" % e)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

四、解决方法

  在/opt/cloudera/parcels/CDH/lib/hue/build/env/lib/python2.7/site-packages目录下创建sitecustomize.py文件,编辑内容如下:

#encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

  配置完成后在CM平台重启hue服务。

  恢复正常登录。

五、总结

  因为当前系统的Python版本为Python 2.x,默认编码是ascii,注销过程中出现了无法解析的字符,解决方法是设置utf-8字符集。