EMR Serverless에서 Hive 사용자 정의 함수 사용
Hive 사용자 정의 함수(UDF)를 사용하면 레코드 또는 레코드 그룹을 처리하기 위한 사용자 지정 함수를 생성할 수 있습니다. 이 자습서에서는 기존 Amazon EMR Serverless 애플리케이션에서 샘플 UDF를 사용하여 쿼리 결과를 출력하는 작업을 실행합니다. 애플리케이션을 설정하는 방법을 알아보려면 Amazon EMR Serverless 시작하기 섹션을 참조하세요.
EMR Serverless에서 UDF를 사용하는 방법
-
샘플 UDF의 GitHub
로 이동합니다. 리포지토리를 복제하고 사용하려는 git 브랜치로 전환합니다. 리포지토리의 pom.xml
파일에서 소스를 포함하도록maven-compiler-plugin
을 업데이트합니다. 또한 대상 Java 버전 구성을1.8
로 업데이트합니다.mvn package -DskipTests
를 실행하여 샘플 UDF가 포함된 JAR 파일을 생성합니다. -
JAR 파일을 생성한 후 다음 명령을 사용하여 S3 버킷에 업로드합니다.
aws s3 cp brickhouse-0.8.2-JS.jar s3://
amzn-s3-demo-bucket
/jars/ -
샘플 UDF 함수 중 하나를 사용하도록 예제 파일을 생성합니다. 이 쿼리를
udf_example.q
로 저장하고 S3 버킷에 업로드합니다.add jar s3://
amzn-s3-demo-bucket
/jars/brickhouse-0.8.2-JS.jar; CREATE TEMPORARY FUNCTION from_json AS 'brickhouse.udf.json.FromJsonUDF'; select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int)))); select from_json('{"key1":[0,1,2], "key2":[3,4,5,6], "key3":[7,8,9]}', map("", array(cast(0 as int))))["key1"][2]; -
다음 Hive 작업을 제출합니다.
aws emr-serverless start-job-run \ --application-id
application-id
\ --execution-role-arnjob-role-arn
\ --job-driver '{ "hive": { "query": "s3://amzn-s3-demo-bucket
/queries/udf_example.q", "parameters": "--hiveconf hive.exec.scratchdir=s3://amzn-s3-demo-bucket
/emr-serverless-hive/scratch --hiveconf hive.metastore.warehouse.dir=s3://'$BUCKET'/emr-serverless-hive/warehouse" } }' --configuration-overrides '{ "applicationConfiguration": [{ "classification": "hive-site", "properties": { "hive.driver.cores": "2", "hive.driver.memory": "6G" } }], "monitoringConfiguration": { "s3MonitoringConfiguration": { "logUri": "s3://amzn-s3-demo-bucket
/logs/" } } }' -
get-job-run
명령을 사용하여 작업의 상태를 확인합니다. 상태가SUCCESS
로 변경될 때까지 기다립니다.aws emr-serverless get-job-run --application-id
application-id
--job-run-idjob-id
-
다음 명령을 사용하여 출력 파일을 다운로드합니다.
aws s3 cp --recursive s3://
amzn-s3-demo-bucket
/logs/applications/application-id
/jobs/job-id
/HIVE_DRIVER/ .stdout.gz
파일은 다음과 비슷합니다.{"key1":[0,1,2],"key2":[3,4,5,6],"key3":[7,8,9]} 2