ES实战ES-Hadoop之关键特性要求安装核心架构
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES实战ES-Hadoop之关键特性要求安装核心架构相关的知识,希望对你有一定的参考价值。
文章目录
Key features
部分的特性:
-
Scalable Map/Reduce model可扩展的 Map/Reduce 模型
elasticsearch-hadoop 是围绕 Map/Reduce 构建的:在 elasticsearch-hadoop 中完成的每个操作都会导致多个与 Elasticsearch 并行交互的 Hadoop 任务(基于目标分片的数量)。
-
REST based
elasticsearch-hadoop 使用 Elasticsearch REST 接口进行通信,通过最大限度地减少网络中需要打开的端口数量来实现灵活部署。
-
Self contained
library被设计得小巧而高效。 大约 300KB 并且在 Hadoop 本身之外没有额外的依赖项,在集群中分发 elasticsearch-hadoop 既简单又快速。
-
Universal jar
无论您使用的是 vanilla Apache Hadoop 还是某个发行版,same elasticsearch-hadoop jar 都可以透明地工作。
-
Memory and I/O efficient
elasticsearch-hadoop 专注于性能。 从基于 pull 的解析到批量更新和直接转换为原生类型,elasticsearch-hadoop 保持其内存和网络 I/O 使用的微调。
-
Adaptive I/O
elasticsearch-hadoop 检测传输错误并自动重试。 如果 Elasticsearch 节点死亡,将请求重新路由到可用节点(自动发现)。 此外,如果 Elasticsearch 过载,elasticsearch-hadoop 会检测到被拒绝的数据并重新发送它,直到它被处理或应用用户定义的策略。
-
Facilitates data co-location
elasticsearch-hadoop 与 Hadoop 完全集成,暴露其网络访问信息,允许位于同一位置的 Elasticsearch 和 Hadoop 集群相互了解并减少网络 IO。
-
Map/Reduce API support
在其核心,elasticsearch-hadoop 使用低级 Map/Reduce API 向 Elasticsearch 读取和写入数据,从而实现最大的集成灵活性和性能。
-
old(
mapred
) & new(mapreduce
) Map/Reduce APIs supportedelasticsearch-hadoop 自动适应您的环境; 不必在使用
mapred
或mapreduce
API 之间进行更改 - 两者都由相同的类同时支持。 -
Apache Hive support
针对 Elasticsearch 运行 Hive 查询以获得高级分析和 real_time 响应。 elasticsearch-hadoop 将 Elasticsearch 公开为 Hive 表,因此您的脚本可以比以往更快地处理数据。
-
Apache Pig support
elasticsearch-hadoop 支持将 Elasticsearch 公开为 native Pig
Storage
的 Apache Pig。 针对 Elasticsearch 运行 Pig 脚本,无需对配置或 Pig 客户端进行任何修改。 -
Cascading support
Cascading 是一个应用程序框架,供 Java 开发人员在 Apache Hadoop 上简单地开发健壮的应用程序。 借助 elasticsearch-hadoop,Cascading 可以直接在 Elasticsearch 上运行其流程。
-
Apache Spark
通过流式数据或索引 arbitrary
RDD
直接针对 Elasticsearch 运行快速转换。 提供 Java 和 Scala 两种风格。 -
Apache Storm
elasticsearch-hadoop 支持 Apache Storm 将 Elasticsearch 暴露为
Spout
(源)或Bolt
(接收器)。
Requirements
使用es-hadoop的前提准备
在运行 elasticsearch-hadoop 之前,请检查以下要求。 当在集群中部署 elasticsearch-hadoop 时,这一点更为重要,其中某些机器上的软件可能稍微不同步。 虽然 elasticsearch-hadoop 尽最大努力回退并对其环境进行各种验证,但进行快速健全性检查,尤其是在升级期间可以为您省去很多麻烦。
JDK
JDK 级别 6.0(或更高),就像 Hadoop。 由于 JDK 6 和 JDK 7 都已停产并且最近的产品更新不支持,我们强烈建议使用最新的 JDK 8(至少 u20 或更高版本)。 如果这不是一个选项,请使用 JDK 7.0 update u55(Elasticsearch 1.2 或更高版本需要)。 此处提供了 Elasticsearch 的最新支持矩阵。 请注意,JVM 版本对于稳定的环境至关重要,因为不正确的版本可能会破坏下面的数据,如本博文中所述。
可以从命令行检查可用的 JDK 版本:
$ java -version
java version "1.8.0_45"
Elasticsearch
我们强烈建议使用最新的 Elasticsearch(当前为 elasticsearch_version)。 虽然 elasticsearch-hadoop 保持与以前版本的 Elasticsearch 的向后兼容性,但我们强烈建议使用最新、稳定的 Elasticsearch 版本。 您可以在此处找到支持的版本矩阵。
可以从REST API检查Elasticsearch版本:
$ curl -XGET http://localhost:9200
"status" : 200,
"name" : "Dazzler",
"version" :
"number" : "elasticsearch_version",
...
,
"tagline" : "You Know, for Search"
Hadoop
Hadoop 2.x(最好是最新的稳定版本)。 elasticsearch-hadoop 每天针对 Apache Hadoop 进行测试; 任何与 Apache Hadoop 兼容的发行版都应该可以正常工作。
要检查 Hadoop 的版本,可以参考其文件夹或 jars(名称中包含版本)或从命令行:
$ bin/hadoop version
Hadoop 2.4.1
Apache YARN / Hadoop 2.x
elasticsearch-hadoop 二进制文件针对 Hadoop 2.x 进行了测试,旨在无需任何更改或修改即可在 Yarn 上运行。
Apache Hive
Apache Hive 0.10 或更高版本。 我们建议使用最新版本的 Hive(当前为 1.2.1)。
可以从其文件夹名称或命令行中找出 Hive 版本:
$ bin/hive --version
Hive version 1.2.1
Apache Spark
Spark 1.3.0 或更高版本。 我们建议使用最新版本的 Spark。 由于 elasticsearch-hadoop 提供与 Apache Spark 的本机集成(推荐),因此使用什么二进制文件并不重要。 当使用 Hadoop 层将两者集成时也是如此,因为 elasticsearch-hadoop 支持大多数 Hadoop 发行版。
Spark 版本通常可以通过查看其文件夹名称来发现:
$ pwd
/libs/spark/spark-2.2.0-bin-XXXXX
or by running its shell:
$ bin/spark-shell
...
Welcome to
____ __
/ __/__ ___ _____/ /__
_\\ \\/ _ \\/ _ `/ __/ '_/
/___/ .__/\\_,_/_/ /_/\\_\\ version 2.2.0
/_/
...
Apache Spark SQL
如果计划使用 Spark SQL,请确保下载适当的 jar。 虽然它是 Spark 发行版的一部分,但它不是 Spark 核心的一部分,而是有自己的 jar。 因此,在构建类路径时,请确保包含spark-sql-<scala-version>.jar
或 Spark 程序集: spark-assembly-2.2.0-<distro>.jar
elasticsearch-hadoop 支持 Spark SQL 1.3 到 1.6 以及 Spark SQL 2.0。 由于 Spark 2.x 与 Spark 1.x 不兼容,所以 elasticsearch-hadoop 提供了两种不同的工件。 elasticsearch-hadoop 通过其主 jar 支持 Spark SQL 2.2.0。 由于 Spark SQL 2.0 不向后兼容 Spark SQL 1.6 或更低版本,elasticsearch-hadoop 提供了一个专用的 jar。 有关详细信息,请参阅 Spark 章节。 请注意,不再支持 Spark 1.0-1.2(同样是由于 Spark 中向后不兼容的更改)。
Installation
导入使用jar
elasticsearch-hadoop 二进制文件可以通过从 elastic.co 站点下载为 ZIP(包含项目 jars、源代码和文档)或使用具有以下依赖项的任何 Maven 兼容工具来获取:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop</artifactId>
<version>version</version>
</dependency>
上面的 jar 包含了 elasticsearch-hadoop 的所有特性,并且在运行时不需要任何其他依赖; 换句话说,它可以按原样使用。
elasticsearch-hadoop 二进制文件适用于 Hadoop 2.x(也称为 YARN)环境。 对 Hadoop 1.x 环境的支持在 5.5 中已弃用,并且将不再在 6.0 中进行测试。
Minimalistic binaries
除了 uber jar,elasticsearch-hadoop 还为每个集成提供了简约的 jar,为只使用一个模块的人量身定制(在所有其他情况下,建议使用 uber
jar); jar 的尺寸更小,并使用专用的 pom,仅涵盖所需的依赖项。 这些在同一个groupId
下可用,使用带有模式 elasticsearch-hadoop-integration
的 artifactId
:
Map/Reduce.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop-mr</artifactId>
<version>version</version>
</dependency>
Apache Hive.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop-hive</artifactId>
<version>version</version>
</dependency>
Apache Pig.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop-pig</artifactId>
<version>version</version>
</dependency>
Apache Spark.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-spark-20_2.10</artifactId>
<version>version</version>
</dependency>
Cascading.
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop-cascading</artifactId>
<version>ver</version>
</dependency>
Development Builds
Development (or nightly or snapshots) builds are published daily at sonatype-oss repository (see below). 确保使用快照版本控制:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch-hadoop</artifactId>
<version>version-SNAPSHOT</version>
</dependency>
还要启用专用的快照存储库:
<repositories>
<repository>
<id>sonatype-oss</id>
<url>http://oss.sonatype.org/content/repositories/snapshots</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
Upgrading Your Stack
Elasticsearch for Apache Hadoop 是 Elasticsearch 的一个客户端库,尽管它具有支持 Hadoop/Spark 上的操作的扩展功能。 升级 Hadoop/Spark 版本时,最好检查以确保连接器支持您的新版本,并酌情升级您的 elasticsearch-hadoop 版本。
Elasticsearch for Apache Hadoop 保持与 Elasticsearch 先前主要版本的最新次要版本的向后兼容性(5.X 支持回溯到 2.4.X,6.X 支持回溯到 5.6.X,等等……)。 在升级 Elasticsearch 版本时,最好先将 elasticsearch-hadoop 升级到新版本(或更高版本)。 新的 elasticsearch-hadoop 版本应该继续适用于您之前的 Elasticsearch 版本,让您可以正常升级。
Elasticsearch for Apache Hadoop 不能很好地支持滚动升级。 在滚动升级期间,elasticsearch-hadoop 与之通信的节点将定期消失并重新上线。 由于在滚动升级的时间范围内 elasticsearch-hadoop 会遇到不断的连接故障,因此您的作业很可能会失败。 因此,建议您在滚动升级过程中针对 Elasticsearch 禁用任何基于 elasticsearch-hadoop 的写入或读取作业。
Architecture
核心部分,elasticsearch-hadoop 集成了两个分布式系统:分布式计算平台 Hadoop 和实时搜索和分析引擎 Elasticsearch。 从高层次来看,两者都提供了计算组件:一方面通过 Map/Reduce 或最近的库(如 Apache Spark)实现 Hadoop,另一方面通过搜索和聚合实现 Elasticsearch。
elasticsearch-hadoop 的目标是连接这两个实体,以便它们可以透明地相互受益。
Map/Reduce and Shards
可扩展性的一个关键组件是并行性或将任务拆分为多个较小的任务,这些任务在集群中的不同节点上同时执行。 Hadoop 通过拆分(源或输入可以划分的部分数量)和分片(索引划分的部分数量)在 Elasticsearch 中都存在这个概念。
简而言之,粗略地说,更多的输入拆分意味着更多的任务可以同时读取源的不同部分。 更多的分片意味着更多的桶(同时)可以从中读取索引内容。
因此,elasticsearch-hadoop 使用拆分和分片作为 Hadoop 和 Elasticsearch 集群中执行的任务数量背后的主要驱动因素,因为它们对并行性有直接影响。
Hadoop 拆分和 Elasticsearch 分片在系统行为方面发挥着重要作用——我们建议熟悉这两个概念,以便更好地理解您的系统运行时语义。
Apache Spark and Shards
虽然 Apache Spark 不是基于 Map/Reduce 构建的,但它具有相似的概念:它具有partition
概念,大致相当于 Elasticsearch 的shard
或 Map/Reduce 的split
。 因此,上面的类比在这里也适用——更多的分片和/或更多的分区会增加并行的数量,从而允许两个系统更好地扩展。
由于概念上的相似性,在整个文档中,人们可以互换地认为 Hadoop
Input Split
和 SparkPartition
。
Reading from Elasticsearch
从 Elasticsearch 读取信息时,分片起着至关重要的作用。 由于它充当源,elasticsearch-hadoop 将为每个 Elasticsearch shard
创建一个 Hadoop InputSplit
,或者在 Apache Spark 的情况下创建一个Partition
,该分区被提供一个针对索引I
的查询。elasticsearch-hadoop 将动态发现支持的分片数量 I
然后为每个分片创建,在 Hadoop 的情况下,输入拆分(这将确定要执行的 Hadoop 任务的最大数量)或在 Spark 的情况下,将确定RDD
最大并行度的分区。
在默认设置下,Elasticsearch 每个索引使用 5 个主分片,这将在 Hadoop 端为每个查询产生相同数量的任务。
elasticsearch-hadoop 不会查询相同的分片 - 它使用循环方法遍历所有分片(主分片和副本)。 为了避免数据重复,每个分片组(主分片和副本)只使用一个分片。
提高性能的一个常见问题(读取优化)是增加分片的数量,从而增加 Hadoop 端的任务数量。 除非通过基准测试证明了这种收益,否则我们建议不要采取这种措施,因为在大多数情况下,Elasticsearch 分片可以easily处理数据流到 Hadoop 或 Spark 任务。
Writing to Elasticsearch
写入 Elasticsearch 由可用的 Hadoop 输入拆分(或任务)或 Spark 分区的数量驱动。 elasticsearch-hadoop 检测将发生写入的(主)分片的数量,并在这些分片之间分配写入。 可用的拆分/分区越多,就越多的映射器/缩减器可以将数据并行写入 Elasticsearch。
Data co-location 数据协同定位
只要有可能,elasticsearch-hadoop 就会与 Hadoop 和 Spark 共享 Elasticsearch 集群信息,以促进数据共存。 在实践中,这意味着每当从 Elasticsearch 读取数据时,源节点的 IP 都会传递到 Hadoop 和 Spark 以优化任务执行。 如果需要/可能的共址,将 Elasticsearch 和 Hadoop 和 Spark 集群托管在同一机架内将显着节省网络成本。
以上是关于ES实战ES-Hadoop之关键特性要求安装核心架构的主要内容,如果未能解决你的问题,请参考以下文章
工作采坑札记:3. Spark中es-hadoop插件异常解决