복붙노트

[HADOOP] Pyhive를 사용하여 원격 하이브에 액세스하는 방법

HADOOP

Pyhive를 사용하여 원격 하이브에 액세스하는 방법

이 링크를 사용하여 원격 하이브에 연결을 시도합니다. 아래는 사용 된 코드입니다. 받은 오류 메시지도 아래에 나와 있습니다.

파이썬을 통해 하이브에 접근하는 방법?

암호

   from pyhive import hive
    conn = hive.Connection(host="10.111.22.11", port=10000, username="user1" ,database="default")

오류 메시지

Could not connect to any of [('10.111.22.11', 10000)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/anaconda3/lib/python3.6/site-packages/pyhive/hive.py", line 131, in __init__
    self._transport.open()
  File "/opt/anaconda3/lib/python3.6/site-packages/thrift_sasl/__init__.py", line 61, in open
    self._trans.open()
  File "/opt/anaconda3/lib/python3.6/site-packages/thrift/transport/TSocket.py",line 113, in open
    raise TTransportException(TTransportException.NOT_OPEN, msg)
thrift.transport.TTransport.TTransportException: Could not connect to any of [('10.111.22.11', 10000)]

성공적인 연결을위한 다른 요구 사항은 무엇입니까? 필자는 서버에 직접 연결 (퍼티 사용)하고 하이브를 실행할 수 있습니다. 하지만 다른 서버 X에서이 오류가 발생했습니다. 또한 서버 X에서 하이브 서버로 ping 할 수 있습니다.

포트 번호가 문제가 될 수 있습니까? 올바른 포트 번호를 어떻게 확인합니까?

아래 답변에서 논의했듯이 나는 hiveserver2를 시작하려했습니다. 그러나 명령이 제대로 작동하지 않는 것 같습니다. 어떤 도움이라도 대단히 감사합니다.

또한 포트 내가 하이브 셸에서 쿼리를 실행할 때 로그에서 볼 8088. 이것이 10000 대신 포트 있어야 궁금 (둘 다 어쨌든 작동하지 않았다)

해결법

  1. ==============================

    1.그것은 pyhive를 사용하여 작동하게 만들 수 없습니다. paramiko insted를 사용해야했다. 아래는 샘플 코드입니다.

    그것은 pyhive를 사용하여 작동하게 만들 수 없습니다. paramiko insted를 사용해야했다. 아래는 샘플 코드입니다.

    import os
    import paramiko
    import time 
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
    ssh.connect('1.1.1.1', username='uid', password='pwd')
    sshin, sshout, ssherr= ssh.exec_command('hive -e "create table test(key varchar(10),keyval varchar(200))"')
    
  2. ==============================

    2.원격 Hive 호스트에서 HiveServer2 프로세스를 시작해야합니다. 10000이 기본 포트 x 호입니다.

    원격 Hive 호스트에서 HiveServer2 프로세스를 시작해야합니다. 10000이 기본 포트 x 호입니다.

    HiveServer2를 시작하려면이 명령을 사용하십시오.

    $HIVE_HOME/bin/hiveserver2 
    
  3. ==============================

    3.pyhive를 사용하여 원격 하이브 테이블에 액세스하려면 아래 코드를 시도하십시오.

    pyhive를 사용하여 원격 하이브 테이블에 액세스하려면 아래 코드를 시도하십시오.

    from pyhive import hive
    import pandas as pd
    
    #Create Hive connection 
    conn = hive.Connection(host="10.111.22.11", port=10000, username="user1")
    
    # Read Hive table and Create pandas dataframe
    df = pd.read_sql("SELECT * FROM db_Name.table_Name limit 10", conn)
    print(df.head())
    
  4. from https://stackoverflow.com/questions/44027519/how-to-access-remote-hive-using-pyhive by cc-by-sa and MIT license