2017-10-16 1 views
0

필자는 redshift 노드에서 언로드 한 redshift 노드의 공간을 정리하기 위해 언로드 한 Amazon S3에서 파이프로 구분되지 않은 데이터를 텍스트 파일로 구분했습니다. Athena에서이 데이터에 액세스 할 수있는 테이블을 만들었지 만 성능을 위해 데이터를 최적화하고 싶습니다. 내 데이터를 AWS EMR을 사용하여 쪽모작 형식으로 변환하고 squetlet에 쪽모료 파일 형식으로 저장하려고합니다. 필자는 AWS 웹 사이트의 지침을 따르려고했지만 지시 사항이 다소 혼란 스럽습니다.텍스트를 여기 엔 나무 마루로 변환

답변

0

변환하려는 데이터 또는 실행중인 오류에 대한 세부 정보가 없으면 사용자에게 가장 유용한 정보를 정확하게 입력하기 란 어렵습니다. 그러나 희망 내 경험에서 다음과 같은 팁이 도움이 될 것입니다

1. 그림 원시 밖으로 데이터 외관 가능성 , 당신은 변환 할 데이터는 아마존 S3 버킷에 저장됩니다, 일반적으로 별도의 저장 각각 별개의 테이블 폴더 및 각 폴더는 해당 데이터의 내용을 압축 텍스트 파일로 나눕니다. 형식을 이해하는 것은 다음 단계에서 올바른 하이브 명령을 작성하는 데 중요합니다.

2. 쓰기 마루 변환 DDL 스크립트 마루 변환 프로세스의 핵심 요소는 하이브 기반의 DDL에 (데이터 유형을 포함하여) 테이블의 스키마와 포인트를 설명합니다 (데이터 정의 언어) 스크립트, 여기서 입력 데이터는 저장되고 출력 데이터는 끝나야합니다. 일반적으로 원시 데이터의 인프라를 설명하는 "ddl"파일이 데이터와 함께 제공되거나 스키마가 어딘가에 설명됩니다. 여기

ADD JAR /usr/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core-1.0.0-amzn-5.jar; 

CREATE EXTERNAL TABLE offer (
offer_sid VARCHAR(36), 
created TIMESTAMP, 
offer_id VARCHAR(100), 
offer_position VARCHAR(100), 
page_position VARCHAR(100), 
vertical VARCHAR(100), 
partner VARCHAR(100), 
card_name VARCHAR(255)) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
LOCATION 's3://yourdata/raw/table' ; 

CREATE EXTERNAL TABLE parquet_hive (
offer_sid VARCHAR(36), 
created TIMESTAMP, 
offer_id VARCHAR(100), 
offer_position VARCHAR(100), 
page_position VARCHAR(100), 
vertical VARCHAR(100), 
partner VARCHAR(100), 
card_name VARCHAR(255)) 
STORED AS PARQUET 
LOCATION 's3://yourdata/parquet/table/'; 

INSERT OVERWRITE TABLE parquet_hive SELECT * FROM offer; 

는, 첫 번째 라인은 향후의 문을 해석에 사용되는 하이브의 버전을 나타냅니다 : 예를 들어, 여기에 특정 스키마를 가진 S3 버킷 "폴더"에 대한 마루 변환 DDL 스크립트입니다. 여기에서 선택하는 Hive 버전이 어떤 data types이 지원되는지 결정하는 것이 중요합니다. Amazon에서 제공하는 다른 하이브 versions을 보려면 여기를 클릭하십시오.

다음 줄 블록은 DDL 문에서 지정한대로 테이블을 만듭니다. 원시 데이터의 위치는 "LOCATION"으로 표시되며 더 중요한 것은 데이터의 형식 (단계 (1)에서 결정됨)은 "ROW FORMAT"로 표시됩니다. 여기서 SerDe (Serializer/Deserializer) 인터페이스 인 OpenCSVSerde는 큰 따옴표로 묶인 행의 데이터 값을 올바르게 처리합니다. 기본적으로 OpenCSVSerde는 따옴표 문자로 큰 따옴표를 사용하고 구분 기호로 쉼표를 사용합니다. 모든 원시 데이터 형식이이 SerDe 인터페이스를 필요로하지는 않습니다. 큰 따옴표는 약간 특별한 경우입니다.

마지막 줄 블록은 마루 파일이 끝날 출력 위치 인 마지막 쪽모습 테이블 ("STORED AS PARQUET"으로 표시됨)의 스키마를 정의한 다음 첫 번째 테이블의 데이터가있는 테이블을 작성합니다. 쓰기 -로 // yourdata/parquet_scripts :

3. EMR 클러스터에 당신이 테이블 별 마루 변환 스크립트를 작성하면, (별도의 폴더에 적절한 S3 버킷에 업로드 S3에서 마루 스크립트를 실행 이 예의 parquet-table.q). 스크립트는 Hive가 설치된 EMR 클러스터에서 실행됩니다. 당신의 S3 버킷 deails, pemkey 이름과 AWS CLI 프로파일을 제공과 함께

aws emr create-cluster --enable-debugging --log-uri s3://yourdata/parquetLogs --applications Name=Hadoop Name=Hive Name=HCatalog --ec2-attributes KeyName=your_pemkey,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-888777ff --service-role EMR_DefaultRole --release-label emr-5.3.0 --instance-type m4.xlarge --instance-count 1 --steps Type=HIVE,Name="Convert offer to Parquet",ActionOnFailure=CONTINUE,ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,s3://yourdata/parquet_scripts/write-parquet-table.q,-hiveconf,INPUT=s3://yourdata/raw/table/,-hiveconf,OUTPUT=s3://yourdata/parquet/table,-hiveconf,REGION=us-east-1] --region us-east-1 --auto-terminate --profile your_profile

당신 것, 다음은 AWS CLI (명령 줄 인터페이스)를 사용하여 스크립트를 실행하는 EMR 클러스터를 시작하는 명령 예입니다 SubnetId = subnet-888777ff를 유효한 서브넷으로 변경해야합니다.지금은 AWS 대시 보드에서 사용 가능한 VPC 서브넷을 확인하고 위의 명령에서 subnet-888777ff를 해당 ID로 바꿉니다.

이 특정 명령은 m4.xlarge EC2 인스턴스에서 실행되는 EMR 클러스터를 회전시키고 디버깅 로그를 s3 : // yourdata/parquetLogs에 기록하고 여기 엔 나무 마루 컨버전 스크립트 "write-parquet-table.q"를 실행하고 AWS CLI 자격 증명 프로필 "your_profile" 원시 데이터의 양과 사용하는 인스턴스의 크기에 따라, Parquet 변환 프로세스를 완료하는 데 걸리는 시간은 상당히 다를 수 있습니다. 스크립트가 끝나면 EMR 클러스터가 종료되고 Parquet 형식의 데이터가 Amazon Athena와 같은 인터페이스로 가져올 준비가됩니다.

관련 문제