0

我编写了一个使用 pyhive 从 Hive 读取的函数。在本地运行它工作正常。但是,当尝试使用 lambda 函数时,出现错误: “无法启动 SASL:b'在 sasl_client_start (-4) SASL(-4) 中出错:没有可用的机制:没有找到有价值的机甲'”

我尝试使用此链接中的指南: https ://github.com/cloudera/impyla/issues/201

但是,我无法使用最新命令: yum install cyrus-sasl-lib cyrus-sasl-gssapi cyrus-sasl-md5 因为我用来构建的系统是不支持 yum 功能的 ubuntu。尝试安装这些软件包(使用 apt-get): sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules libsasl2-modules-gssapi-mit

如中所述: python 无法连接 hiveserver2 但仍然没有运气。有任何想法吗?

谢谢,尼尔。

4

1 回答 1

1

你可以关注这个github 问题。我能够使用带有 Python 2.7 的 AWS Lambda 中的 pyhive 库将 Hive server2 与 LDAP 身份验证连接起来。我为使其工作所做的工作是:

  1. 在 Lambda 中使用了一个带有 AMI 的EC2 实例或启动容器。
  2. 运行以下命令安装所需的依赖项

    yum upgrade
    
    yum install gcc
    
    yum install gcc-g++
    
    sudo yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-ldap #include cyrus-sals dependency for authentication mechanism you are using to connect to hive
    
    pip install six==1.12.0
    
  3. 捆绑/usr/lib64/sasl2/到 Lambda 并设置os.environ['SASL_PATH'] = os.path.join(os.getcwd(), /path/to/sasl2. 验证.so文件是否显示在os.environ['SASL_PATH']路径上。

  4. 我的 Lambda 代码如下所示:

    from pyhive import hive
    import logging
    import os
    os.environ['SASL_PATH'] = os.path.join(os.getcwd(), 'lib/sasl2')
    log = logging.getLogger()
    log.setLevel(logging.INFO)
    log.info('Path: %s',os.environ['SASL_PATH'])
    def lambda_handler(event, context):
        cursor = hive.connect(host='hiveServer2Ip', port=10000, username='userName', auth='LDAP',password='password').cursor()
        SHOW_TABLE_QUERY = "show tables"
        cursor.execute(SHOW_TABLE_QUERY)
        tables = cursor.fetchall()
        log.info('tables: %s', tables)
        log.info('done')
    
于 2020-05-20T07:23:30.217 回答