2017-10-16 15 views
0

J'ai des données non partitionnées délimitées par des tuyaux sous forme de fichiers texte sur Amazon S3 que j'ai déchargés de redshift pour libérer de l'espace sur nos noeuds redshift. J'ai créé une table dans Athena pour accéder à ces données, mais je voudrais optimiser mes données pour la performance. J'essaye de convertir mes données au format de parquet en utilisant AWS EMR et les stockez en tant que fichiers formatés par parquet sur un s3 s3. J'ai essayé de suivre les instructions sur le site Web d'AWS, mais je trouve les instructions un peu confuses.Convertir du texte en parquet

Répondre

0

Sans certains détails spécifiques sur les données que vous essayez de convertir ou les erreurs que vous rencontrez, il est difficile de déterminer exactement ce qui vous serait le plus utile. Mais espérons que les conseils de mon expérience suivantes vous aideront:

1. Figure sur des données brutes Apparence probable, les données que vous convertira seront stockés dans des seaux Amazon S3, généralement avec chaque table distincte stockée dans un document distinct dossier et chaque dossier divisant le contenu de ces données en fichiers texte compressés. Comprendre le format est essentiel pour écrire les commandes Hive correctes à l'étape suivante.

2. Ecrire Parquet Conversion DDL Script L'élément clé dans le processus de conversion Parquet est le script DDL (Data Definition Language) à base Ruche, qui décrit le schéma de la table (y compris les types de données) et les points à où les données d'entrée sont stockées et où les données de sortie doivent se terminer. Généralement, un fichier "ddl" décrivant l'infrastructure des données brutes est fourni à côté des données ou le schéma est décrit quelque part. À titre d'exemple, voici un script DDL de conversion Parquet pour un seau s3 « dossier » avec un schéma spécifique:

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; 

Ici, la première ligne indique la version Hive à utiliser dans l'interprétation des déclarations à venir. Il est très important de noter que la version de Hive que vous choisissez ici déterminera les data types supportés. Vérifiez ici pour voir les différents Hive versions offerts par Amazon.

Le bloc de lignes suivant crée la table comme spécifié par les instructions DDL. L'emplacement des données brutes est indiqué par "LOCATION" et, plus important encore, le format des données (déterminé à l'étape (1)) est indiqué par "ROW FORMAT". Ici, l'interface SerDe (Serializer/Deserializer) OpenCSVSerde gère gentiment les valeurs de données dans les lignes qui sont stockées entre guillemets. Par défaut, OpenCSVSerde utilise des guillemets doubles comme des guillemets et des virgules comme délimiteur. Notez que tous les formats de données brutes ne nécessitent pas cette interface SerDe; la situation de double citation est un peu un cas particulier. Le dernier bloc de lignes définit le schéma de la table finale de Parquet (indiqué par "STORED AS PARQUET"), l'emplacement de sortie où se termineront les fichiers Parquet, puis écrit la table avec les données de la première table.

3. Exécuter le script Parquet sur DME Cluster Une fois que vous avez écrit le script de conversion de parquet spécifique table, le télécharger sur le seau S3 approprié dans un dossier séparé (à s3: // yourdata/parquet_scripts comme en écriture parquet-table.q dans cet exemple). Le script sera exécuté sur un cluster EMR avec Hive installé. Voici un exemple de commande pour démarrer un cluster DME pour exécuter le script en utilisant AWS CLI (interface de ligne de commande):

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

Avec la fourniture de votre seau s3 deails, nom pemkey et aws profil cli, vous allez besoin de changer le SubnetId = subnet-888777ff en un sous-réseau valide.Pour l'instant, identifiez un sous-réseau VPC disponible dans votre tableau de bord AWS et remplacez subnet-888777ff dans la commande ci-dessus par son ID. Cette commande particulière crée un cluster EMR exécuté sur une instance EC4 m4.xlarge, écrit des journaux de débogage sur s3: // yourdata/parquetLogs, exécute le script de conversion Parquet "write-parquet-table.q" et utilise le profil des informations d'identification AWS CLI "your_profile". En fonction de la quantité de données brutes et de la taille de l'instance utilisée, le temps requis pour terminer le processus de conversion de Parquet varie considérablement. Une fois le script terminé, le cluster EMR se terminera et les données au format Parquet seront prêtes à être importées dans une interface telle qu'Amazon Athena.