从salesforce中提取数据时,只有1个地图任务

时间:2017-02-03 00:10:27

标签: hadoop salesforce soql tez

Datameer中的几个提取作业(快速ETL / BI工具,位于hadoop之上)正在从salesforce对象中读取数据。最大的提取是1.4 GB(任务对象),最小的提取是96 MB(帐户对象)。 Datameer使用基于REST API的连接器,向连接器提供SOQL查询,并相应地提取记录(https://documentation.datameer.com/documentation/display/DAS60/Salesforce)。

Datameer编译作业并将执行交给执行框架(Tez)。此外,没有特定于作业的配置。

所有saleforce提取作业都使用1个Map任务运行。

但是,

数据中心中还有其他提取作业,它们从sftp服务器上的平面文件(50 - 200 MB)读取数据,并在3-5个地图任务之间使用。

关于SOQL:https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_changing_batch_size.htm SOQL每批最多可提取2000条记录

我的问题:

  • 考虑来自平面文件的数据正在运行多个地图 任务,问题是否与仅拉动的SOQL批量大小相对应 每个请求2000条记录,因此只分配了1条 映射器。
  • MR程序如何确定输入提取的总大小 处理像salesforce这样的来源,甚至是基于云的 数据库中。

环境信息:Hortonwork 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

1 个答案:

答案 0 :(得分:0)

Datameer支持提出了这个问题,他提供了以下回复。

根本原因分析:

“使用中只有1个映射器存在限制。主要是,它用于创建多个拆分不会受益的Web服务。这可能是因为该服务不支持拆分或数据足够小以至于工作不会从分裂中受益。“

<强>背景

Datameer使用salesforce连接器,该实习生使用REST API调用,可以在单个请求中获取最多2000条记录。 REST API调用是同步的,并且在返回结果时有5秒的限制。