как использовать pyhive в лямбда-функции?

Я написал функцию, которая использует pyhive для чтения из Hive. Запустив его локально, он отлично работает. Однако при попытке использовать лямбда-функцию я получил ошибку: «Не удалось запустить SASL: b'Error в sasl_client_start (-4) SASL (-4): нет доступного механизма: не найдено достойных механизмов»

Я пытался использовать рекомендации по этой ссылке: https://github.com/cloudera/impyla/issues/201

Однако я не смог использовать последнюю команду: yum install cyrus-sasl-lib cyrus-sasl-gssapi cyrus-sasl-md5, поскольку система, которую я использовал для сборки, - это ubuntu, которая не поддерживает функцию yum. Пытался установить эти пакеты (используя apt-get): sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules libsasl2-modules-gssapi-mit

как описано в: python не может подключиться к hiveserver2 Но все равно не повезло. Любые идеи?

Спасибо, Нир.


person Nir99    schedule 23.04.2020    source источник


Ответы (1)


Вы можете следить за этой проблемой github. Я могу подключить Hive server2 с аутентификацией LDAP, используя библиотеку pyhive в AWS Lambda с Python 2.7. Что я сделал, чтобы это работало, так это:

  1. Взял один экземпляр EC2 или контейнер запуска с AMI, используемым в Lambda .
  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. Мой лямбда-код выглядит так:

    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')
    
person gaurang101197    schedule 20.05.2020