配置

编辑

可以通过以下属性自定义 elasticsearch-hadoop 的行为,通常通过在目标作业的 Hadoop Configuration 上设置它们来实现。但是,其中一些属性可以通过其他方式指定,具体取决于所使用的库(请参阅相关部分)。

所有配置属性都以 es 前缀开头。命名空间 es.internal 由库保留供其内部使用,用户在任何时候都不应使用它。

必需设置

编辑
es.resource
Elasticsearch 资源位置,数据从中读取写入。需要 <index>/<type> 格式(相对于 Elasticsearch 主机/端口(请参阅下方))。
es.resource = twitter/tweet   # index 'twitter', type 'tweet'
es.resource.read(默认为 es.resource
用于读取(但不写入)数据的 Elasticsearch 资源。当在同一作业中读取和写入不同 Elasticsearch 索引的数据时很有用。通常会自动设置(Map/Reduce 模块除外,它需要手动配置)。
es.resource.write(默认为 es.resource
用于写入(但不读取)数据的 Elasticsearch 资源。通常用于动态资源写入,或者当在同一作业中读取和写入不同 Elasticsearch 索引的数据时使用。通常会自动设置(Map/Reduce 模块除外,它需要手动配置)。

请注意,在上述资源设置中指定多个索引和/或类型仅允许用于读取。仅通过使用动态资源(如下文所述)才支持为写入指定多个索引。使用 _all/types 在所有索引中搜索 types,或使用 index/index 中搜索所有类型。请注意,读取多个索引/类型通常仅在它们具有相同结构并且仅适用于某些库时才有效。需要强类型映射(如 Hive 或 SparkSQL 等表)的集成可能会失败。

动态/多资源写入
编辑

对于写入,elasticsearch-hadoop 允许通过使用模式(使用 {<field-name>} 格式)在运行时解析目标资源,该模式在运行时基于流式传输到 Elasticsearch 的数据进行解析。也就是说,可以根据要保存的文档中解析的一个或多个字段,将文档保存到特定的 indextype

例如,假设有以下文档集(此处以 JSON 格式描述,以便于阅读 - 请随意将其转换为实际的 Java 对象)

{
    "media_type":"game",
    "title":"Final Fantasy VI",
    "year":"1994"
},
{
    "media_type":"book",
    "title":"Harry Potter",
    "year":"2010"
},
{
    "media_type":"music",
    "title":"Surfing With The Alien",
    "year":"1987"
}

要根据它们的 media_type 为每个文档编制索引,可以使用以下模式

# index the documents based on their type
es.resource.write = my-collection/{media_type}

这将导致 Final Fantasy VImy-collection/game 下索引,Harry Pottermy-collection/book 下索引,Surfing With The Alienmy-collection/music 下索引。有关更多信息,请参阅专门的集成部分。

动态资源支持写入,对于执行多索引/类型读取,请使用适当的 搜索查询

格式化动态/多资源写入
编辑

使用动态/多写入时,还可以指定字段返回的值的格式。开箱即用,elasticsearch-hadoop 为日期/时间戳字段提供格式化,这对于在同一索引下的特定时间范围内自动分组基于时间的数据(如日志)很有用。通过使用 Java SimpleDateFormat 语法,可以以区域设置敏感的方式格式化和解析日期。

例如,假设数据包含一个 @timestamp 字段,则可以使用以下配置将文档分组到每日索引中

# index the documents based on their date
es.resource.write = my-collection/{@timestamp|yyyy.MM.dd} 

@timestamp 字段格式 - 在本例中为 yyyy.MM.dd

使用相同的配置属性(es.resource.write),但是,通过特殊的 | 字符指定格式模式。请参阅 SimpleDateFormat javadocs,了解有关支持的语法的更多信息。在本例中,yyyy.MM.dd 将日期转换为年份(由四位数字指定)、月份(由 2 位数字表示),然后是日期(由两位数字表示)(如 2015.01.28)。

Logstash 用户会发现这种模式非常熟悉

基本设置

编辑

网络

编辑
es.nodes(默认为 localhost)
要连接到的 Elasticsearch 节点列表。当远程使用 Elasticsearch 时,设置此选项。请注意,该列表必包含 Elasticsearch 集群中的每个节点;默认情况下,elasticsearch-hadoop 会自动发现这些节点(请参阅下文)。每个节点还可以单独指定其 HTTP/REST 端口(例如 mynode:9600)。
es.port(默认为 9200)
用于连接到 Elasticsearch 的默认 HTTP/REST 端口 - 此设置应用于 es.nodes 中未指定任何端口的节点。

在 2.2 中添加。

es.nodes.path.prefix(默认为空)
添加到所有向 Elasticsearch 发出的请求的前缀。在集群在特定路径下被代理/路由的环境中很有用。例如,如果集群位于 someaddress:someport/custom/path/prefix,则应将 es.nodes.path.prefix 设置为 /custom/path/prefix

查询

编辑
es.query(默认为无)

保存用于从指定的 es.resource 中读取数据的查询。默认情况下,它未设置/为空,这意味着返回指定索引/类型下的所有数据。es.query 可以具有三种形式

uri 查询
使用 ?uri_query 形式,可以指定查询字符串。请注意前导的 ?
query dsl
使用 query_dsl 形式 - 请注意,如此处所述,query dsl 需要以 { 开头,以 } 结尾
外部资源
如果以上两者都不匹配,elasticsearch-hadoop 将尝试将该参数解释为 HDFS 文件系统中的路径。如果不是这种情况,它将尝试从类路径加载资源,或者如果失败,则从 Hadoop DistributedCache 加载资源。该资源应包含 uri queryquery dsl

为此,以下是一个示例

# uri (or parameter) query
es.query = ?q=costinl

# query dsl
es.query = { "query" : { "term" : { "user" : "costinl" } } }

# external resource
es.query = org/mypackage/myquery.json

换句话说,es.query 足够灵活,您可以根据自己的喜好使用任何搜索 API,无论是内联还是从外部资源加载。

我们建议使用在文件中外部化的 query dsl,该文件包含在作业 jar 中(因此在其类路径上可用)。这样可以轻松识别、调试和组织查询。在整个文档中,我们使用 uri 查询来节省文本并提高可读性 - 当用作 uri 时,实际的查询很快就会变得难以处理。

操作

编辑
es.input.json(默认为 false)
输入是否已经是 JSON 格式(默认值)。有关直接使用 JSON 的更多详细信息,请参阅每个集成的相应部分。
es.write.operation(默认为 index)

elasticsearch-hadoop 应执行的写入操作 - 可以是以下任何一项

index(默认)
添加新数据,同时替换(重新索引)现有数据(基于其 id)。
create
添加新数据 - 如果数据已存在(基于其 id),则会抛出异常。
update
更新现有数据(基于其 id)。如果未找到数据,则会抛出异常。
upsert
如果数据不存在,则称为合并或插入,如果数据存在,则更新(基于其 id)。
delete
删除现有数据(基于其 id)。如果未找到数据,则会抛出异常。

在 2.1 中添加。

es.output.json(默认为 false)
连接器的输出是否应采用 JSON 格式(默认值)。启用后,文档将以原始 JSON 格式(从 Elasticsearch 返回)返回。有关直接使用 JSON 的更多详细信息,请参阅每个集成的相应部分。

在 5.0.0 中添加。

es.ingest.pipeline(默认为无)
在索引或创建文档时应定位的现有 Elasticsearch Ingest 管道的名称。仅当执行 indexcreate 操作时才可用;与 updateupsert 操作不兼容。

映射(写入 Elasticsearch 时)

编辑
es.mapping.id(默认为无)
包含文档 id 的文档字段/属性名称。
es.mapping.parent(默认为无)
包含文档父级的文档字段/属性名称。要指定常量,请使用 <CONSTANT> 格式。

在 5.6.0 中添加。

es.mapping.join(默认为无)
包含文档连接字段的文档字段/属性名称。不接受常量。文档上的连接字段必须包含父关系名称作为字符串,或者包含子关系名称及其父级的 id 的对象。如果在使用此设置时识别出子文档,则如果未在 es.mapping.routing 中配置其他路由,则文档的路由将自动设置为父 id。
es.mapping.routing(默认为取决于 es.mapping.join
包含文档路由的文档字段/属性名称。要指定常量,请使用 <CONSTANT> 格式。如果使用 es.mapping.join 指定了连接字段,则此默认值为连接字段的父 id 值。如果未指定连接字段,则此默认值为无。
es.mapping.version(默认为无)
包含文档版本的文档字段/属性名称。要指定常量,请使用 <CONSTANT> 格式。
es.mapping.version.type(默认为取决于 es.mapping.version
指示所使用的版本控制类型。如果未定义 es.mapping.version(默认),则其值未指定。如果指定了 es.mapping.version,则其值变为 external

在 6.0.0 版本中已弃用。

es.mapping.ttl (默认值:无)
包含文档生存时间的文档字段/属性名称。要指定常量,请使用 <CONSTANT> 格式。 不适用于 Elasticsearch 6.0+ 索引版本,但将继续支持 5.x 及更低版本。

在 6.0.0 版本中已弃用。

es.mapping.timestamp (默认值:无)
包含文档时间戳的文档字段/属性名称。要指定常量,请使用 <CONSTANT> 格式。 不适用于 Elasticsearch 6.0+ 索引版本,但将继续支持 5.x 及更低版本。

在 2.1 中添加。

es.mapping.include (默认值:无)
要包含在发送到 Elasticsearch 的文档中的字段/属性。用于从实体中提取所需数据。语法类似于 Elasticsearch 的 include/exclude。可以通过使用逗号指定多个值。默认情况下,不指定任何值,表示包含所有属性/字段。

当指定 es.input.json 时,将忽略 es.mapping.include 功能。为了防止连接器索引被隐式排除的数据,任何具有这些属性冲突的作业都将拒绝执行!

在 2.1 中添加。

es.mapping.exclude (默认值:无)
要从发送到 Elasticsearch 的文档中排除的字段/属性。用于从实体中消除不需要的数据。语法类似于 Elasticsearch 的 include/exclude。可以通过使用逗号指定多个值。默认情况下,不指定任何值,表示不排除任何属性/字段。

当指定 es.input.json 时,将忽略 es.mapping.exclude 功能。为了防止连接器索引被显式排除的数据,任何具有这些属性冲突的作业都将拒绝执行!

例如

# extracting the id from the field called 'uuid'
es.mapping.id = uuid

# specifying a parent with id '123'
es.mapping.parent = <123>

# combine include / exclude for complete control
# include
es.mapping.include = u*, foo.*
# exclude
es.mapping.exclude = *.description

使用上述配置,每个条目都将仅包含其顶级字段,以 u 开头的字段以及 foo 下的嵌套字段包含在文档中,但名为 description 的任何嵌套字段除外。此外,文档的父级将为 123,而文档 ID 将从字段 uuid 中提取。

字段信息(从 Elasticsearch 读取时)

编辑

在 2.1 中添加。

es.mapping.date.rich (默认值:true)
是否为 Elasticsearch 中的 Date 字段创建 Date 对象,或者将其作为原始类型 (Stringlong) 返回。默认情况下,此设置为 true。实际的对象类型取决于使用的库;值得注意的例外是 Map/Reduce,它不提供内置的 Date 对象,因此无论此设置如何,都会返回 LongWritableText

在 2.2 中添加。

es.read.field.include (默认值:空)
在从 Elasticsearch 读取文档时解析并考虑的字段/属性。默认情况下为空,表示考虑所有字段。使用此属性时要小心,因为它可能会产生不良的副作用。通常在某些返回的文档不符合预期映射的情况下使用。

在 2.2 中添加。

es.read.field.exclude (默认值:空)
在从 Elasticsearch 读取文档时丢弃的字段/属性。默认情况下为空,表示不排除任何字段。使用此属性时要小心,因为它可能会产生不良的副作用。通常在某些返回的文档不符合预期映射的情况下使用。

例如

# To exclude field company.income
es.read.field.exclude = company.income

在 2.2 中添加。

es.read.field.as.array.include (默认值:空)
应被视为数组/列表的字段/属性。由于 Elasticsearch 可以将一个或多个值映射到一个字段,因此 elasticsearch-hadoop 无法从映射中确定是否将文档上的字段视为单个值还是数组。当遇到多个值时,elasticsearch-hadoop 会自动将字段读取到集成的适当数组/列表类型中,但是在严格的映射场景(如 Spark SQL)中,这可能会导致问题(当 Spark 的 Catalyst 引擎期望单个值时,却遇到了数组)。此设置的语法类似于 Elasticsearch 的 include/exclude。可以通过使用逗号指定多个值。默认情况下,不指定任何值,表示不将任何字段/属性视为数组。

并非所有字段都需要指定 es.read.field.as.array 才能被视为数组。类型为 nested 的字段始终被视为对象数组,并且不应在 es.read.field.as.array.include 下标记。

例如,给定文档

{
  "foo": {
    "bar": [ "abc", "def" ]
  }
}

使用以下配置

# mapping foo.bar as an array
es.read.field.as.array.include = foo.bar

如果您的文档包含多个级别的数组

{
  "foo": {
    "bar": [[["abc", "def"], ["ghi", "jkl"]], [["mno", "pqr"], ["stu", "vwx"]]]
  }
}

然后在配置中指定数组的维度

# mapping foo.bar as a 3-level/dimensional array
es.read.field.as.array.include = foo.bar:3
es.read.field.as.array.exclude (默认值:空)
不应被视为数组/列表的字段/属性。与上面的 es.read.field.as.array.include 类似。可以通过使用逗号指定多个值。默认情况下,不指定任何值,表示不排除任何属性/字段(并且由于如上所述未包含任何值),因此不会事先将任何字段视为数组。请注意,此设置不会影响嵌套字段,因为它们始终被视为数组。

元数据(从 Elasticsearch 读取时)

编辑
es.read.metadata (默认值:false)
是否在结果中包含文档元数据(如 ID 和版本)(默认值:否)。
es.read.metadata.field (默认值:_metadata)
放置元数据信息的字段。当 es.read.metadata 设置为 true 时,信息将以 Map 的形式在指定字段下返回。
es.read.metadata.version (默认值:false)
是否在返回的元数据中包含文档版本。仅在启用 es.read.metadata 时适用。

更新设置(写入 Elasticsearch 时)

编辑

在使用 updateupsert 操作时,可以使用其他设置(镜像 update API)

es.update.script.inline (默认值:无)
用于更新文档的内联脚本。

在 6.0 中添加。

es.update.script.file (默认值:无)
用于更新文档的文件脚本的名称。文件脚本在 6.x 中已删除,因此,如果对 6.x 及以上版本的集群使用此属性,则会引发错误。

在 6.0 中添加。

es.update.script.stored (默认值:无)
用于更新文档的存储脚本的标识符。
es.update.script.lang (默认值:无)
脚本语言。默认情况下,不指定任何值,应用节点配置。
es.update.script.params (默认值:无)
脚本参数(如果有)。使用其值的文档(当前读取)字段/属性。要指定常量,请使用 <CONSTANT> 格式。可以通过逗号 (,) 指定多个值。

例如

# specifying 2 parameters, one extracting the value from field 'number', the other containing the value '123':
es.update.script.params = param1:number,param2:<123>
es.update.script.params.json
raw JSON 格式指定的脚本参数。指定的值将按原样传递,无需进一步处理或过滤。通常用于迁移现有的更新脚本。

例如

es.update.script.params.json = {"param1":1, "param2":2}
es.update.retry.on.conflict (默认值:0)
在发生冲突的情况下,文档更新的重试次数。在并发环境中很有用。

高级设置

编辑

索引

编辑
es.index.auto.create (默认值:yes)
当向 Elasticsearch 写入数据时,elasticsearch-hadoop 是否应创建索引(如果缺少)或失败。
es.index.read.missing.as.empty (默认值:no)
elasticsearch-hadoop 是否允许读取不存在的索引(并返回空数据集),或者不允许(并抛出异常)。
es.field.read.empty.as.null (默认值:yes)
elasticsearch-hadoop 是否将空字段视为 null。通常不需要此设置(因为 elasticsearch-hadoop 已经处理了 null 情况),但启用它是为了更容易处理尚未清理的文本字段。
es.field.read.validate.presence (默认值:warn)

为了帮助发现从 Hadoop 查询数据时可能出现的错误(这会导致返回不正确的数据),elasticsearch-hadoop 可以执行验证,发现缺失的字段和潜在的拼写错误。可能的值为:

ignore
不执行验证
warn
如果验证失败,则会记录警告消息
strict
如果缺少字段,则会抛出异常,从而停止作业

默认值 (warn) 将在作业启动时将任何拼写错误记录到控制台

WARN main mr.EsInputFormat - Field(s) [naem, adress] not found
   in the Elasticsearch mapping specified; did you mean [name, location.address]?

在 6.6 中添加。

es.read.shard.preference (默认值:无)
在执行滚动查询时,用于搜索操作的分片首选项的值。如果留空,则连接器将自动感知何时使用 _local 分片首选项。当需要直接控制在哪些节点上执行搜索操作时,这在冷热架构中非常有用
es.read.shard.preference = _only_nodes:abc*

Elasticsearch for Apache Hadoop 在运行之前不会尝试验证此首选项设置,并且如果无法使用提供的首选项找到分片,则配置不正确的分片首选项可能会导致滚动查询失败。

es.read.source.filter (默认值:无)
通常,当使用允许指定某种形式的模式(例如 Hive)的集成时,连接器会自动从模式中提取字段名称,并仅从 Elasticsearch 请求这些字段,以节省带宽。当使用利用任何数据模式的集成(例如普通的 MR 和 Spark)时,此属性允许您指定一个逗号分隔的字段名称字符串,您希望从 Elasticsearch 返回这些字段。

如果设置了 es.read.source.filter,则当连接器尝试下推不同的源字段过滤时,将会抛出异常。在这些情况下,您应该清除此属性,并信任连接器知道应该返回哪些字段。这种情况发生在 SparkSQL 和 Hive 中。

User specified source filters were found [name,timestamp], but the connector is executing in a state where it has provided its own source filtering [name,timestamp,location.address]. Please clear the user specified source fields under the [es.read.source.filter] property to continue. Bailing out...

在 5.4 中添加。

es.index.read.allow.red.status (默认为 false)
当执行从 Elasticsearch 读取数据的作业时,如果用于读取的资源包含具有缺失分片的索引,从而导致集群状态为 red,则 ES-Hadoop 会通知您此状态并快速失败。在作业必须继续使用仍然可访问的剩余可用数据的情况下,用户可以启用此属性,以指示连接器忽略其无法访问的分片。

使用 es.index.read.allow.red.status 可能会导致作业在不完整的数据集上运行。与针对完全绿色或黄色集群执行的作业相比,针对红色集群执行的作业将产生不一致的结果。请谨慎使用此设置。

输入

编辑

在 5.0.0 中添加。

es.input.max.docs.per.partition
当从支持滚动切片(Elasticsearch v5.0.0 及更高版本)的 Elasticsearch 集群读取数据时,此参数会告知连接器每个输入分区应有的最大文档数。连接器将对每个分片上要读取的文档数进行采样和估计,并使用此属性提供的值将每个分片划分为输入切片。此属性是一个建议,而不是保证。每个分区的最终文档数不能保证低于此数字,但它们会接近此数字。如果您从不支持滚动切片(Elasticsearch v5.0.0 以下的任何版本)的 Elasticsearch 集群读取数据,则将忽略此属性。默认情况下,此值未设置,并且输入分区是根据要读取的索引中的分片数计算的。

网络

编辑
es.nodes.discovery (默认为 true)
是否发现 Elasticsearch 集群中的节点,或者仅使用 es.nodes 中给定的节点进行元数据查询。请注意,此设置仅在启动期间适用;之后在读取和写入时,elasticsearch-hadoop 使用目标索引分片(及其托管节点),除非启用了 es.nodes.client.only
es.nodes.client.only (默认为 false)
是否使用 Elasticsearch 客户端节点(或负载均衡器)。启用后,elasticsearch-hadoop 将通过集群中的客户端节点路由其所有请求(如果启用了节点发现)。请注意,这通常会显着降低节点并行性,因此默认情况下禁用。启用它还会禁用 es.nodes.data.only(因为客户端节点是非数据节点)。

在 2.1.2 中添加。

es.nodes.data.only (默认为 true)
是否仅使用 Elasticsearch 数据节点。启用后,elasticsearch-hadoop 将通过集群中的数据节点路由其所有请求(如果启用了节点发现)。此配置设置的目的是避免使非数据节点不堪重负,因为这些节点往往是“较小”的节点。默认情况下启用此功能。

在 5.0.0 中添加。

es.nodes.ingest.only (默认为 false)
是否仅使用 Elasticsearch 摄取节点。启用后,elasticsearch-hadoop 将通过集群中的摄取节点路由其所有请求(如果启用了节点发现)。此配置设置的目的是避免产生从非摄取节点转发用于管道的数据的成本;只有在将数据写入摄取管道时才真正有用(请参见上面的 es.ingest.pipeline)。

在 2.2 中添加。

es.nodes.wan.only (默认为 false)
是否通过 WAN 在云/受限环境中(例如 Amazon Web Services)使用连接器连接到 Elasticsearch 实例。在此模式下,连接器将禁用发现,并且在包括读取和写入的所有操作期间通过声明的 es.nodes 进行连接。请注意,在此模式下,性能会受到高度影响。

在 2.2 中添加。

es.nodes.resolve.hostname (默认取决于)
连接器是否应将节点主机名解析为 IP 地址。默认情况下,它是 true,除非启用了 wan 模式(请参见上文),在这种情况下,它将默认为 false。

在 2.2 中添加。

es.http.timeout (默认为 1m)
与 Elasticsearch 的 HTTP/REST 连接的超时。
es.http.retries (默认为 3)
建立(断开的)http 连接的重试次数。重试应用于与 Elasticsearch 节点的每次对话。一旦重试耗尽,连接将自动重新路由到下一个可用的 Elasticsearch 节点(基于 es.nodes 的声明,然后是发现的节点 - 如果已启用)。
es.scroll.keepalive (默认为 10m)
查询请求之间结果滚动的最大持续时间。
es.scroll.size (默认为 1000)
每个执行器/工作器/任务的每次滚动请求返回的结果/项/文档数。

在 2.2 中添加。

es.scroll.limit (默认为 -1)
每个单独滚动返回的结果/项目数。负值表示应返回所有匹配的文档。请注意,这适用于每次滚动,通常绑定到作业任务之一。因此,返回的文档总数为 LIMIT * 滚动次数(或任务数)
es.action.heart.beat.lead (默认为 15s)
在 elasticsearch-hadoop 通知 Hadoop 任务仍在运行以防止任务重启之前,任务超时的前导时间。

在 5.3.0 中添加。

设置 HTTP 请求标头

编辑
es.net.http.header.[标头名称]
通过使用 es.net.http.header. 前缀,您可以为从 elasticsearch-hadoop 发送到 Elasticsearch 的所有请求提供 HTTP 标头。请注意,连接器会保留一些标准 HTTP 标头以确保正确操作,并且用户无法设置或覆盖这些标头(例如 AcceptContent-Type)。

例如,此处用户正在设置 Max-Forwards HTTP 标头

es.net.http.header.Max-Forwards = 10

安全设置

编辑

在 6.4 中添加。

es.keystore.location
安全设置密钥库文件的位置(通常为 URL,如果没有前缀,则将其解释为类路径条目)。有关更多信息,请参见 安全设置

在 2.1 中添加。

基本身份验证

编辑
es.net.http.auth.user
基本身份验证用户名
es.net.http.auth.pass
可安全保护。基本身份验证密码

在 2.1 中添加。

es.net.ssl (默认为 false)
启用 SSL
es.net.ssl.keystore.location
密钥库(如果使用)位置(通常为 URL,如果没有前缀,则将其解释为类路径条目)
es.net.ssl.keystore.pass
可安全保护。密钥库密码
es.net.ssl.keystore.type (默认为 JKS)
密钥库类型。PK12 是一种常见的替代格式
es.net.ssl.truststore.location
信任库位置(通常为 URL,如果没有前缀,则将其解释为类路径条目)
es.net.ssl.truststore.pass
可安全保护。信任库密码
es.net.ssl.cert.allow.self.signed (默认为 false)
是否允许自签名证书
es.net.ssl.protocol(默认为 TLS)
要使用的 SSL 协议

代理

编辑
es.net.proxy.http.host
Http 代理主机名
es.net.proxy.http.port
Http 代理端口
es.net.proxy.http.user
Http 代理用户名
es.net.proxy.http.pass
可安全保护。Http 代理密码
es.net.proxy.http.use.system.props(默认为 yes)
是否使用系统 Http 代理属性(即 http.proxyHosthttp.proxyPort

在 2.2 中添加。

es.net.proxy.https.host
Https 代理主机名

在 2.2 中添加。

es.net.proxy.https.port
Https 代理端口

在 2.2 中添加。

es.net.proxy.https.user
Https 代理用户名

在 2.2 中添加。

es.net.proxy.https.pass
可安全保护。Https 代理密码

在 2.2 中添加。

es.net.proxy.https.use.system.props(默认为 yes)
是否使用系统 Https 代理属性(即 https.proxyHosthttps.proxyPort
es.net.proxy.socks.host
Http 代理主机名
es.net.proxy.socks.port
Http 代理端口
es.net.proxy.socks.user
Http 代理用户名
es.net.proxy.socks.pass
可安全保护。Http 代理密码
es.net.proxy.socks.use.system.props(默认为 yes)
是否使用系统 Socks 代理属性(即 socksProxyHostsocksProxyHost

elasticsearch-hadoop 允许仅使用上面的设置将其代理设置应用于其连接。当已经存在 JVM 范围的代理设置(通常通过系统属性)时,请格外小心,以避免出现意外行为。重要提示:这些属性的语义在 JVM docs 中进行了说明。在某些情况下,将 JVM 属性 java.net.useSystemProxies 设置为 true 比手动设置这些属性的效果更好。

序列化

编辑
es.batch.size.bytes (默认为 1mb)
使用 Elasticsearch 批量 API 进行批量写入的大小(以字节为单位)。请注意,批量大小是按任务实例分配的。始终乘以 Hadoop 作业中的任务数,以获得运行时命中 Elasticsearch 的总批量大小。
es.batch.size.entries (默认为 1000)
使用 Elasticsearch 批量 API 进行批量写入的大小(以条目数计) - (0 表示禁用)。 与 es.batch.size.bytes 配套使用,一旦其中一个匹配,则执行批量更新。 与大小类似,此设置是每个任务实例的;它在运行时乘以运行的 Hadoop 任务总数。
es.batch.write.refresh (默认为 true)
是否在批量更新完成后调用 索引刷新。 请注意,这仅在整个写入(意味着多次批量更新)已执行后调用。
es.batch.write.retry.count (默认为 3)
如果 Elasticsearch 过载且数据被拒绝,则给定批次的重试次数。 请注意,只会重试被拒绝的数据。 如果在执行重试后仍然有数据被拒绝,则 Hadoop 作业将被取消(并失败)。 负值表示无限重试;在设置此值时要小心,因为它可能会产生不良的副作用。
es.batch.write.retry.wait (默认为 10 秒)
因批量拒绝而导致批量写入重试之间等待的时间。
es.ser.reader.value.class (默认为取决于使用的库)
用于将 JSON 转换为对象的 ValueReader 实现的名称。 这由框架根据使用的库(Map/Reduce、Hive 等)设置。
es.ser.writer.value.class (默认为取决于使用的库)
用于将对象转换为 JSON 的 ValueWriter 实现的名称。 这由框架根据使用的库(Map/Reduce、Hive 等)设置。