Azure HDInsight에서 Apache Zeppelin과 Hive Warehouse Connector 통합
HDInsight Spark 클러스터에는 다른 인터프리터를 사용하는 Apache Zeppelin 노트북이 포함되어 있습니다. 이 문서에서는 Hive Warehouse Connector를 사용하여 Spark에서 Hive 테이블에 액세스할 수 있는 Livy 인터프리터만 중점적으로 설명합니다.
참고 항목
이 문서에는 Microsoft에서 더 이상 사용하지 않는 용어에 대한 참조가 포함되어 있습니다. 소프트웨어에서 용어가 제거되면 이 문서에서 해당 용어가 제거됩니다.
전제 조건
Hive Warehouse Connector 설정 단계를 완료합니다.
시작하기
ssh command 명령을 사용하여 Apache Spark 클러스터에 연결합니다. CLUSTERNAME을 클러스터 이름으로 바꿔서 다음 명령을 편집하고 해당 명령을 입력합니다.
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
ssh 세션에서 다음 명령을 실행하여
hive-warehouse-connector-assembly
및pyspark_hwc
에 대한 버전을 확인합니다.ls /usr/hdp/current/hive_warehouse_connector
Apache Zeppelin를 구성할 때 나중에 사용할 출력을 저장합니다.
Livy 구성
Livy 인터프리터를 사용하여 Zeppelin에서 Hive 테이블에 액세스하려면 다음과 같은 구성이 필요합니다.
대화형 쿼리 클러스터
웹 브라우저에서
https://LLAPCLUSTERNAME.azurehdinsight.net/#/main/services/HDFS/configs
로 이동합니다. 여기서 LLAPCLUSTERNAME은 Interactive Query 클러스터의 이름입니다.고급>사용자 지정 core-site로 이동합니다. 속성 추가...를 선택하여 다음 구성을 추가합니다.
구성 값 hadoop.proxyuser.livy.groups * hadoop.proxyuser.livy.hosts * 변경 내용을 저장하고 영향을 받는 모든 구성 요소를 다시 시작합니다.
Spark 클러스터
웹 브라우저에서
https://CLUSTERNAME.azurehdinsight.net/#/main/services/SPARK2/configs
로 이동합니다. 여기서 CLUSTERNAME은 Apache Spark 클러스터의 이름입니다.사용자 지정 livy2-conf를 확장합니다. 속성 추가...를 선택하여 다음 구성을 추가합니다.
구성 값 livy.file.local-dir-whitelist /usr/hdp/current/hive_warehouse_connector/ 변경 내용을 저장하고 영향을 받는 모든 구성 요소를 다시 시작합니다.
Zeppelin UI에서 Livy 인터프리터 구성(Spark 클러스터)
웹 브라우저에서
https://CLUSTERNAME.azurehdinsight.net/zeppelin/#/interpreter
로 이동합니다. 여기서CLUSTERNAME
은 Apache Spark 클러스터의 이름입니다.livy2로 이동합니다.
다음 구성들을 추가합니다.
구성 값 livy.spark.hadoop.hive.llap.daemon.service.hosts @llap0 livy.spark.security.credentials.hiveserver2.enabled true livy.spark.sql.hive.llap true livy.spark.yarn.security.credentials.hiveserver2.enabled true livy.superusers livy, zeppelin livy.spark.jars file:///usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-VERSION.jar
;
VERSION을 앞부분의 시작에서 가져온 값으로 바꿉니다.livy.spark.submit.pyFiles file:///usr/hdp/current/hive_warehouse_connector/pyspark_hwc-VERSION.zip
;
VERSION을 앞부분의 시작에서 가져온 값으로 바꿉니다.livy.spark.sql.hive.hiveserver2.jdbc.url 대화형 쿼리 클러스터의 HiveServer2 대화형 JDBC URL로 설정합니다. spark.security.credentials.hiveserver2.enabled true ESP 클러스터의 경우에만 다음 구성을 추가합니다.
구성 값 livy.spark.sql.hive.hiveserver2.jdbc.url.principal hive/_HOST@<AAD-Domain>
ssh 명령을 사용하여 Interactive Query 클러스터에 연결합니다.
/etc/krb5.conf
파일에서default_realm
매개 변수를 찾습니다.<AAD-DOMAIN>
을 대문자 문자열로 하여 이 값으로 바꿉니다. 그렇지 않으면 자격 증명을 찾을 수 없습니다.
변경 내용을 저장하고 Livy 인터프리터를 다시 시작합니다.
Livy 인터프리터에 액세스할 수 없는 경우, Ambari의 Zeppelin 구성 요소 내에 있는 shiro.ini
파일을 수정합니다. 자세한 내용은 Apache Zeppelin Security구성을 참조하세요.
Zeppelin에서 쿼리 실행
Livy 인터프리터를 사용하여 Zeppelin 노트북을 시작하고 다음을 실행합니다.
%livy2
import com.hortonworks.hwc.HiveWarehouseSession
import com.hortonworks.hwc.HiveWarehouseSession._
import org.apache.spark.sql.SaveMode
# Initialize the hive context
val hive = HiveWarehouseSession.session(spark).build()
# Create a database
hive.createDatabase("hwc_db",true)
hive.setDatabase("hwc_db")
# Create a Hive table
hive.createTable("testers").ifNotExists().column("id", "bigint").column("name", "string").create()
val dataDF = Seq( (1, "foo"), (2, "bar"), (8, "john")).toDF("id", "name")
# Validate writes to the table
dataDF.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").mode("append").option("table", "hwc_db.testers").save()
# Validate reads
hive.executeQuery("select * from testers").show()