2014-12-08 13 views
5

Korzystanie z ula lub Beeline klienta, nie mam problemu wykonaniu tej klauzuli:pyhs2/ula żadnych plików pasujących plik ścieżkę i plik istnieje

hive -e "LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2" 

Dane z pliku załadowanego powodzeniem do ula.

Jednak podczas korzystania pyhs2 z tej samej maszynie, plik nie zostanie znaleziony:

import pyhs2 
conn_str = {'authMechanism':'NOSASL', 'host':'azus',} 
conn = pyhs2.connect(conn_str) 
with conn.cursor() as cur: 
    cur.execute("LOAD DATA LOCAL INPATH '/tmp/tmpBKe_Mc' INTO TABLE unit_test_hs2") 

Zgłasza wyjątek:

Traceback (most recent call last): 
    File "data_access/hs2.py", line 38, in write 
    cur.execute("LOAD DATA LOCAL INPATH '%s' INTO TABLE %s" % (csv_file.name, table_name)) 
    File "/edge/1/anaconda/lib/python2.7/site-packages/pyhs2/cursor.py", line 63, in execute 
    raise Pyhs2Exception(res.status.errorCode, res.status.errorMessage) 
pyhs2.error.Pyhs2Exception: "Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid path ''/tmp/tmpBKe_Mc'': No files matching path file:/tmp/tmpBKe_Mc" 

Widziałem podobne pytania pisał o tym problemie, a zwykle odpowiedź jest taka, że ​​kwerenda działa na innym serwerze, który nie ma lokalnego pliku "/ tmp/tmpBKe_Mc" na nim przechowywanego. Jeśli jednak tak jest, dlaczego uruchamiałbym polecenie bezpośrednio z pracy CLI, ale użycie pyhs2 nie zadziałało?

(Drugie pytanie: w jaki sposób mogę pokazać, który serwer próbuje obsłużyć zapytanie? Próbowałem cur.execute ("set"), który zwraca wszystkie parametry konfiguracyjne, ale gdy grepping dla "hosta" zwrócone parametry nie Wygląda na to, że zawiera prawdziwą nazwę hosta.)

Dzięki!

+0

Hi John, mogę wiedzieć, w jaki sposób problem został rozwiązany? –

+0

Niestety - nie używamy już ula, więc nie mogę go przetestować. –

Odpowiedz

1

Dzieje się tak dlatego pyhs2 próbuje znaleźć plik na klastrze

rozwiązaniem jest mieć źródło zapisane w pokrewnej HDFS miejscu zamiast/tmp

Powiązane problemy