2017-09-05 6 views
0

Pyspark에서 원격 하이브 서버에 저장된 테이블을 읽고 쓸 필요가 있습니다. 이 원격 하이브에 대해 내가 아는 전부는 그것이 Docker 밑에서 실행된다는 것입니다. 나는 테이블 메타 스토어 URL이Pyspark : 원격 하이브웨어 하우스 위치

: 하둡 색조에서 난 일부 데이터를 선택하려고 iris 테이블에 대한 두 개의 URL을 발견

http://xxx.yyy.net:8888/metastore/table/mytest/iris 

및 테이블 위치 URL :

hdfs://quickstart.cloudera:8020/user/hive/warehouse/mytest.db/iris 

마지막 URL에 quickstart.cloudera:8020이 포함 된 이유를 모르겠습니다. 하이브가 도커 밑에서 뛰기 때문일 수 있습니까?

하이브 테이블에 대한 액세스를 토론 Pyspark 튜토리얼 글 : 하이브로 작업 할 때, 하나는 하이브 SERDES에 대한 지속적인 하이브 메타 스토어에 연결, 지원을 포함하여, 하이브 지원 SparkSession를 초기화해야한다

https://spark.apache.org/docs/latest/sql-programming-guide.html#hive-tables

, 및 하이브 사용자 정의 함수. 기존 Hive 배포가없는 사용자는 Hive 지원을 계속 사용할 수 있습니다. hive-site.xml에 의해 구성되지 않으면 컨텍스트는 자동으로 현재 디렉토리에 metastore_db를 만들고 spark.sql.warehouse.dir에 의해 구성된 디렉토리를 만듭니다.이 디렉토리는 현재 디렉토리에있는 spark-warehouse 디렉토리로 기본 설정됩니다. 시작되었습니다. hive-site.xml의 hive.metastore.warehouse.dir 속성은 Spark 2.0.0부터 사용되지 않습니다. 대신 spark.sql.warehouse.dir을 사용하여웨어 하우스에있는 데이터베이스의 기본 위치를 지정하십시오. Spark 응용 프로그램을 시작한 사용자에게 쓰기 권한을 부여해야 할 수 있습니다. 나는 어느 hive.metastore.warehouse.dirspark.sql.warehouse.dir 속성이 없습니다 그럭저럭 내 경우 hive-site.xml에서

.

from os.path import expanduser, join, abspath 

from pyspark.sql import SparkSession 
from pyspark.sql import Row 

    // warehouseLocation points to the default location for managed databases and tables 
val warehouseLocation = new File("spark-warehouse").getAbsolutePath 

spark = SparkSession \ 
    .builder \ 
    .appName("Python Spark SQL Hive integration example") \ 
    .config("spark.sql.warehouse.dir", warehouse_location) \ 
    .enableHiveSupport() \ 
    .getOrCreate() 

그리고 내 경우에는

warehouseLocation뿐만 정확한 값으로, 위의 코드와 유사한 실행 한 후, 나는 다음 수 있다고 생각 :

스파크 튜토리얼은 원격 하이브 테이블에 액세스하려면 다음 코드를 사용하도록 제안 해야 할 일 :

spark.sql("use mytest") 
spark.sql("SELECT * FROM iris").show() 

어디에서 원격 하이브웨어 하우스 위치를 찾을 수 있습니까? Pyspark를 원격 Hive 테이블과 함께 작동시키는 방법은 무엇입니까?

... 
... 
... 
<property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://127.0.0.1/metastore?createDatabaseIfNotExist=true</value> 
    <description>JDBC connect string for a JDBC metastore</description> 
    </property> 
... 
... 
... 
    <property> 
    <name>hive.metastore.uris</name> 
    <value>thrift://127.0.0.1:9083</value> 
    <description>IP address (or fully-qualified domain name) and port of the metastore host</description> 
    </property> 

은 그래서 127.0.0.1과 같은

이 Clouder 고정 표시기 응용 프로그램을 실행 도커의 localhost입니다 :

업데이트

hive-site.xml에는 다음과 같은 속성이 있습니다. 하이브 창고에 도착하는 데 도움이되지 않습니다.

Cloudera Hive가 Docker 앱으로 실행될 때 하이브 창고에 액세스하는 방법.여기

답변

1

Hive metastore가 자신의 JVM 프로세스를 실행하면 것을 "원격 모드"당신이 찾을 수 있습니다, 다른 프로세스와 같은 HiveServer2, HCatalog, Cloudera Impala에서 https://www.cloudera.com/documentation/enterprise/5-6-x/topics/cdh_ig_hive_metastore_configure.htmlhive-site.xml 재산 hive.metastore.uri를 사용하여 Thrift API를 통해 통신 :

<property> 
    <name>hive.metastore.uris</name> 
    <value>thrift://xxx.yyy.net:8888</value> 
</property> 

: 너무

을 그리고 어쩌면이 속성 (당신이 주소를 지정해야하는 방식에 대해 확실하지 않음)

+0

Pyspark doc (내 질문에 인용문 참조)에서는 '웨어 하우스'위치 지정의 필요성에 대해 설명합니다. 그것은 하이브'metastore '와 같은 것입니까? 내 질문에 대한 업데이트를 참조하십시오. – dokondr