Uso pitón colmena de conexión en Windows

colmena conexión impyla

Yo versión Python utiliza aquí es python3.8.1, conectado colmena requiere el siguiente paquete.

pip install pure-sasl
pip install thrift_sasl==0.2.1 --no-deps
pip install thrift==0.9.3
以上三个包安装没有任何问题,直接pip install即可

pip install thriftpy==0.3.9
这个包安装也是可以直接pip install
只是在安装过程中会显示:ERROR: thrift-sasl 0.2.1 requires sasl>=0.2.1, which is not installed.
但是不用管,忽略它即可

A continuación, instale llamada, BitArray paquete. Pero debido a que está escrito en las extensiones C, instale en Windows reportará el error del compilador gcc. Puede ser descargado vscode, pero demasiados problemas, el enfoque recomendado es entrar https://www.lfd.uci.edu/~gohlke/pythonlibs/descarga BitArray la versión correspondiente de pitón, la instalación

Por último pip install impyla, la instalación se llama impyla, pero cuando se utiliza un impala.

from impala.dbapi import connect

conn = connect(host='47.94.174.89', 
               port=10000, 
               database="default", 
               auth_mechanism='PLAIN')
cursor = conn.cursor()
cursor.execute('select * from girls')
print(cursor.fetchall())
# 执行上面代码会报出如下错误:
"""
Traceback (most recent call last):
  File "D:/satori/1.py", line 14, in <module>
    conn = connect(host='47.94.174.89', port=10000, database="default", auth_mechanism='PLAIN')
  File "C:\python38\lib\site-packages\impala\dbapi.py", line 144, in connect
    service = hs2.connect(host=host, port=port,
  File "C:\python38\lib\site-packages\impala\hiveserver2.py", line 825, in connect
    transport.open()
  File "C:\python38\lib\site-packages\thrift_sasl\__init__.py", line 75, in open
    self._send_message(self.START, chosen_mech)
  File "C:\python38\lib\site-packages\thrift_sasl\__init__.py", line 94, in _send_message
    self._trans.write(header + body)
TypeError: can't concat str to bytes
"""

Siga las instrucciones: thrift_sasl entramos en el siguiente módulo __init__.py, encontrar la línea 94.

# 值得一提的是,python中的缩进应该是四个空格,但是thrift_sasl用的两个空格,不过不影响
  def _send_message(self, status, body):
    header = struct.pack(">BI", status, len(body))
    self._trans.write(header + body)
    self._trans.flush()

  # 我们看到报错的原因是header + body、因为字符串和字节无法相加
  # 将上面代码改成如下
  def _send_message(self, status, body):
    header = struct.pack(">BI", status, len(body))
    if isinstance(body, str):
        body = bytes(body, encoding="utf-8")
    self._trans.write(header + body)
    self._trans.flush()

Luego se vuelve a ejecutar con éxito obtener los datos.

from impala.dbapi import connect

conn = connect(host='47.94.174.89', port=10000, database="default", auth_mechanism='PLAIN')
cursor = conn.cursor()
cursor.execute('select * from girls')
print(cursor.fetchall())  # [(1, 'satori'), (2, 'mashiro')]

Personalmente, me gustaría ejecutar este éxito, la instalación debe ser capaz de acceder adecuadamente como se ha descrito anteriormente, pero también se puede informar del error siguiente.

"""
ThriftParserError: ThriftPy does not support generating module with path in protocol 'c'
"""
# 如果报出上面错误,那么进入site-packages\thriftpy\parser\parser.py
# 找到第488行,应该会看到一个条件语句,如下:
    if url_scheme == '':
        with open(path) as fh:
            data = fh.read()
    elif url_scheme in ('http', 'https'):
        data = urlopen(path).read()
    else:
        raise ThriftParserError('ThriftPy does not support generating module '
                                'with path in protocol \'{}\''.format(
                                    url_scheme))

"""
将
if url_scheme == '':
改成
if url_scheme == '' or len(url_scheme) == 1:
即可
"""

colmena conexión pyhive (limitaciones muy grande)

En primer lugar impyla y la versión pyhive existen problemas de incompatibilidad de algunos paquetes, la instalación de los mejores de ambos eligen uno (但是不推荐在Windows上使用pyhive). Así que cuando se instala pyhive, al igual que no se ha instalado también impyla

sasl instalación, y este paquete que el anterior BitArray, deben ir al sitio web designado arriba para descargar e instalar. Sin embargo, este paquete soporta hasta python3.7, sólo para distinguir y impyla usar aquí la instalación python3.6. Después de instalar sasl, también tenemos que instalar una Thrift (安装pyhive的时候会自动安装), pero requiere la versión 0.10.0 o mayor. El requisito impyla es 0.9.3, por lo que el ahorro 0.9.3 Si se instala, tendrá que pip uninstall thriftdesinstalar.

A continuación, instalar directamente pip pyhive [colmena] para descargar automáticamente dependerá

"""
注意:必须是pip install pyhive[hive]
如果是pip install pyhive的话,那么会有些关联的包装不上,在执行的时候会报如下错误
ImportError: cannot import name 'TFrozenDict' from 'thrift.Thrift' 
"""
from pyhive import hive
conn = hive.Connection(host='47.94.174.89', 
                       port=10000, 
                       database='default')
cursor = conn.cursor()
cursor.execute('select * from girls')
print(cursor.fetchall())
# 执行的时候会报出如下错误
"""
thrift.transport.TTransport.TTransportException: Could not start SASL: b'Error in sasl_client_start (-4) SASL(-4): no mechanism available: Unable to find a callback: 2'
"""
# 在linux上可以通过yum install cyrus-sasl-plain  cyrus-sasl-devel  cyrus-sasl-gssapi解决

Esto no es compatible con los modelos de Windows SASL causado, podemos cambiar el NOSASL de autenticación.

from pyhive import hive
conn = hive.Connection(host='47.94.174.89', 
                       port=10000, 
                       database='default', 
                       auth="NOSASL")
cursor = conn.cursor()
cursor.execute('select * from girls')
print(cursor.fetchall())
# 但是这样又会报出如下错误
"""
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes
"""

Necesidad de requisitos, colmena a colmena site.xml aumentó de la siguiente

<property>
    <name>hive.server2.authentication</name>
    <value>NOSASL</value>
</property>

La colmena está certificado para modificar, por lo que se dice en las limitaciones de uso de Windows pyhive muy grande, ya que requiere una colmena en la que no se puede utilizar el servidor de autenticación, pero en general son colmena en el servidor mediante la autenticación Kerberos.

from pyhive import hive
conn = hive.Connection(host='47.94.174.89', 
                       port=10000, 
                       database='default', 
                       auth="NOSASL")
cursor = conn.cursor()
cursor.execute('select * from girls')
print(cursor.fetchall())  # [(1, 'satori'), (2, 'mashiro')]

Por lo tanto, la colmena de conexión de Windows impyla recomienda, no se recomienda pyhive

Supongo que te gusta

Origin www.cnblogs.com/traditional/p/12534719.html
Recomendado
Clasificación