HDP3 Hive Warehouse connector를 사용하여 Spark에서 Hive 테이블에 액세스
6084 단어 HDP스파크hiveHivewarehouseconnector
HDP 이전 버전은 Spark HiveContext/SparkSession을 사용하여 Hive 테이블에 액세스하고 있지만 HDP3는 Hortonworks에서 개발 한 Hive Warehouse Connector (HWC)를 사용하여 액세스 할 수 있습니다.
아래 그림과 같이 HDP3에서 Spark와 Hive 각각 Metadata를 가지고 있습니다. 서로에 대한 액세스는 HWC를 통해 이루어집니다.
Hive Warehouse Connector
Hive LLAP을 사용하여 Spark의 DataFrame을 Hive 테이블에 Write, Hive 테이블 데이터를 DataFrame에 Read하기 위한 라이브러리로 되어 있습니다.
Hive LLAP을 활성화해야 합니다.
HWC는 다음 애플리케이션을 지원합니다.
사용법은 여기를 참조하십시오.
HiveWarehouseSession API operations
htps : // / cs. c우우라. 이 m / HDP Dokumen ts / HDP 3 / HDP - 3.0.1 / Inte g Rachin G-Hi / / Hinten t / Hi-He_Hi-He, 페라치온 s. HTML
HWC 사용을 위한 설정
설정 순서는 아래의 링크에 상세하게 써 있습니다.
htps : // / cs. c우우라. 코 m/HDP 도쿠멘 ts/HDP3/HDP-3. 이런 c 치온. HTML
기본적으로 Ambari에서 Custom spark-2-defaults에 다음 속성을 설정합니다.
Property
Description
Comments
spark.sql.hive.hiveserver2.jdbc.url
URL for HiveServer2 Interactive
In Ambari, copy the value from Services > Hive > Summary > HIVESERVER2 INTERACTIVE JDBC URL.
spark.datasource.hive.warehouse.metastoreUri
URI for metastore
Copy the value from hive.metastore.uris. For example, thrift://mycluster-1.com:9083.
spark.datasource.hive.warehouse.load.staging.dir
HDFS temp directory for batch writes to Hive
For example,/tmp.
spark.hadoop.hive.llap.daemon.service.hosts
Application name for LLAP service
Copy value from Advanced hive-interactive-site > hive.llap.daemon.service.hosts.
spark.hadoop.hive.zookeeper.quorum
Zookeeper hosts used by LLAP
Copy value from Advanced hive-sitehive.zookeeper.quorum.
실제 설정 화면입니다.
그래서주의해야 할 것은 spark.sql.hive.hiveserver2.jdbc.url입니다.
절차에 따라 Ambari에서 HIVESERVER2 INTERACTIVE JDBC URL을 복사해야 하지만 런타임에 Permission Error 오류가 표시될 수 있습니다.
예를 들어 Pyspark의 경우
pyspark --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.1.0.0-78.jar --py-files /usr/hdp/current/hive_warehouse_connector/pyspark_hwc-1.0.0.3.1.0.0-78.zip
Error
py4j.protocol.Py4JJavaError: An error occurred while calling o72.executeQuery.
: java.lang.RuntimeException: java.io.IOException: shadehive.org.apache.hive.service.cli.HiveSQLException: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to compile query: org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAccessControlException: Permission denied: user [anonymous] does not have [USE] privilege on [default]
at com.hortonworks.spark.sql.hive.llap.HiveWarehouseDataSourceReader.readSchema(HiveWarehouseDataSourceReader.java:130)
at org.apache.spark.sql.execution.datasources.v2.DataSourceV2Relation$.apply(DataSourceV2Relation.scala:56)
두 가지 해결책이 있습니다.
1, HIVESERVER2 INTERACTIVE JDBC URL 뒤에 사용자를 지정합니다. 예를 들어 user=hive
jdbc:hive2://hdp-srv2.demotest.com:2181,hdp-srv1.demotest.com:2181,hdp-srv4.demotest.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2-interactive;user=hive
2, 코드 안에 HiveWarehouseSession 작성시에 사용자를 지정한다. 예: .userPassword('hive','hive')
소스 코드에서 힌트를 얻었습니다.
htps : // 기주 b. 이 m/호 r톤을 rks/히ぇぇㅇㅇㅇㅇㅇ sql/세시온. py
from pyspark_llap import HiveWarehouseSession
hive = HiveWarehouseSession.session(spark).userPassword('hive','hive').build()
hive.setDatabase("default")
hive.executeQuery("select * from test_table").show()
hive.showTables().show()
hive.showDatabases().show()
Zeppelin Spark Interpreter에서 연결할 때 설정
Zeppelin에서 Hive에 액세스하는 경우에도 Zeppelin 측에서 설정이 필요합니다.
상세 설정은 이쪽
htps : // / cs. c우우라. 코 m / HDP Dokumen ts / HDP 3 / HDP - 3.0.1 / Inte g Rachin G-Hi / / Hinten t / Hi-He_Zeppeen_Konfu-Gurachion_Hiゔぇ 받는 호세 콘에 c와 r. HTML
설정 예
그러나 실제로 코드를 실행하면 다음과 같이 pyspark_llap 모듈을 찾을 수 없습니다 라는 오류가 출력됩니다.
조사한 바, Zeppelin 측에서 spark.submit.pyfiles의 설정이 잘 동작하지 않는 버그가 있는 것 같다.
해결 방법으로 코트에 직접 모듈 파일을 가져옵니다.
이제 spark-shell, pyspark, zeppelin에서 사용할 수 있습니다.
Reference
이 문제에 관하여(HDP3 Hive Warehouse connector를 사용하여 Spark에서 Hive 테이블에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yechangyao/items/5526f074c2bba9a1eefb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)