2017-02-03 1 views
0

Plusieurs extraits Job dans Datameer (outil Rapid ETL/BI, situé au-dessus de Hadoop) lisent les données des objets Salesforce. L'extrait le plus volumineux est de 1,4 Go (objet Task) et le plus petit extrait est de 96 Mo (objet compte). Datameer utilise le connecteur basé sur l'API REST, une requête SOQL est fournie au connecteur et les enregistrements sont récupérés en conséquence (https://documentation.datameer.com/documentation/display/DAS60/Salesforce).1 seule tâche de mappage lors de l'extraction des données de Salesforce

Datameer compile le travail et transmet l'exécution au framework d'exécution (Tez). De plus, il n'y a pas de configurations spécifiques au travail.

Tous les travaux d'extraction saleforce s'exécutent avec 1 tâches de carte.

Mais,

Il y a d'autres travaux d'extraction dans Datameer qui lisent les données de fichiers plats (50 - 200 Mo) sur un serveur SFTP et utiliser entre 3-5 tâches de carte.

A propos SOQL: https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_changing_batch_size.htm SOQL tire un maximum de 2000 enregistrements par lot

Ma question:

  • Considérant que les données de fichier plat est en cours d'exécution avec plusieurs carte tâches, ce que le problème correspond à SOQL taille de lot qui ne tire que 2000 enregistrements par requête, ce qui entraîne l'allocation de seulement 1 mappeur.
  • Comment le programme MR détermine-t-il la taille totale de l'extrait d'entrée lorsque traitant de la source comme la force de vente ou même d'une base de données
    basée sur le cloud.

Information sur l'Environnement: Hortonworks 2.7.1

Cores Per Data node=8 

RAM per Data node=64GB 

No of datanodes = 6 

Block Size : 128 MB 

Input Split info: 

mapreduce.input.fileinputformat.split.maxsize=5368709120 (5 GB) 

mapreduce.input.fileinputformat.split.minsize=16777216 (16 MB) 

Execution Framework: Tez 

Memory Sizes: <property> <name>mapreduce.map.memory.mb</name> <value>1536</value> </property><property> <name>mapreduce.reduce.memory.mb</name> <value>2048</value> </property><property> <name>mapreduce.map.java.opts</name> <value>-Xmx1228m</value> </property><property> <name>mapreduce.reduce.java.opts</name> <value>-Xmx1638m</value> </property> 

<property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>1024</value> </property><property> <name>yarn.app.mapreduce.am.command-opts</name> <value>-Xmx819m -Dhdp.version=${hdp.version}</value> </property> 

Compression is enabled: 

<property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec</value> </property> mapreduce.output.fileoutputformat.compress=true 

mapreduce.output.fileoutputformat.compress.type=BLOCK 

mapreduce.map.output.compress=true 

mapred.map.output.compression.type=BLOCK 

Répondre

0

La question a été soulevée avec le soutien Datameer qui a fourni la réponse suivante.

Analyse de la cause:

« Il y a une limite de seulement 1 mappeur en cours d'utilisation. Principalement, il est utilisé pour un service Web qui ne bénéficie pas de la création de plusieurs divisions. Cela pourrait être parce que le service ne prend pas en charge le fractionnement ou les données est assez petit pour que le travail ne bénéficiera pas de division «

Contexte:.

Datameer utilise connecteur Salesforce qui interne utilise les appels API REST qui peut extraire un maximum de 2000 enregistrements dans une seule requête. Les appels API REST sont synchrones et ont une limite de 5 secondes sous laquelle ils retournent les résultats.