前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加速你的检索

加速你的检索

作者头像
leon_橙
发布2019-12-12 11:27:20
7740
发布2019-12-12 11:27:20
举报
文章被收录于专栏:Java后台Java后台

上篇了解 hive 的一种查询优化方案,可以通过分区表尽量避免查询扫描全表,提高查询时效。这篇我们讨论使用另外一种优化手段 -把查询检索交给专业的组件去执行

我们使用的整个 Hadoop 大数据生态架构如下图。Hadoop 生态是基于 HDFS ( Hadoop Distributed File System, 分布式文件系统) 文件系统之上,采用 Zookeeper 组件协调分布式服务(包括集群管理、节点注册发现等),采用 Yarn 进行资源管理和调度。再上层才是 hive、Pig 等高层查询分析组件。而相对于 Hadoop1.0 时期,2.0 整体架构变动不大,只是引入了 Tez,一款有向无环图 DAG(Directed Acyclic Graph) 的计算框架,引入了 Spark 流数据处理框架,底层架构基本一致。

Hadoop 1.0 生态架构

Hadoop 2.0 生态架构

MapReduce 与 Tez 分布式作业计算对比

我们再来看下 Yarn 是如何进行分布式计算资源管理

Yarn 资源管理器架构

Yarn 资源管理框架架构如上图,资源管理器最主要的两个组件:调度器(Scheduler)和应用管理器(ApplicationManager)。

调度器(Scheduler)负责根据相近的容量,队列等约束将资源分配给各种正在运行的应用程序。调度器是纯调度程序,因为它不执行应用程序状态的监视或跟踪。此外,由于应用程序故障或硬件故障,它无法保证重新启动失败的任务。调度器根据应用程序的资源需求执行其调度功能;它是基于资源 Container 的抽象概念,它包含内存、CPU、磁盘、网络等元素资源。

调度器具有可插入策略,该策略负责在各种队列、应用程序等之间对集群资源进行分区。当前的调度程序(如 CapacityScheduler 和 FairScheduler )是插件的一些示例。

应用管理器(ApplicationsManager)负责接受作业提交,协商第一个容器以执行特定于应用程序的 ApplicationMaster,并提供在失败时重新启动 ApplicationMaster 容器的服务。每个应用程序 ApplicationMaster 负责从调度程序协商适当的资源容器,跟踪其状态并监视进度。

综上,一条 Hive sql 除了要经过常规的客户端分析,sql 优化,还需要向 Yarn 资源管理框架提交任务,分配资源,创建 Contains ,执行 MapReduce 作业。这里较大一部分耗时是在创建任务、分配资源及提交作业上,所以 hive 一般在大数据处理中只用于离线数据分析、展示,那我们想做到数据实时检索查询该如何优化呢?这时候就想起一句话“专业的人干专业的事“,专业的数据检索分析引擎 - Elasticsearch (下称 "ES" )

ES 是一款分布式、RESTful 风格的搜索和数据分析引擎(官方网站:https://www.elastic.co/ )。 ES 作为高性能的数据分析引擎,其数据响应速度都是在毫秒级,同时其部署架构也是天然支持分布式集群,根据多副本 ( replicas ) 多分片 ( shards ) 的设计原理,其数据也是保证高可用。结合官方数据分析工具 Kibana 可快速分析展示数据结果,其数据呈现效果极其丰富。

了解这么多关于 Elasticsearch 的特性,也知道其能够加速数据检索。但现在的问题是,我们的大量数据是保存在 Hdfs 或者 Hive 中,那怎么把数据同步到 Elasticsearch 中呢,这就需要使用 ES 的官方 Hadoop 组件 Elasticsearch-Hadoop 连接器,下面就展示如何使用连接器将大数据导入到 ES 中。

  • 引入我们需要的依赖 jar 包;
代码语言:javascript
复制
add jar elasticsearch-hadoop-xx.jar;
  • 创建 ES 外部表,表结构的存储格式选择 “EsStorageHandler”,表配置里填写对应的 ES 索引名称(es.resource)、ES 集群节点信息(es.node、es.port)、ES 文档 id(es.mapping.id),如果你的 ES 集群节点有权限认证,还需要填写集群的账号。
代码语言:javascript
复制
create external table es_hadoop_connection(
 user_id string,
 user_name string,
 hobby string,
 address string,
 create_time string
) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPROPERTIES(
 'es.mapping.id'='user_id',
 'es.resource'='es_user_info/es_user_info',
 'es.node'='127.0.0.1',
 'es.port'='9200',
 'es.index.auto.create'='true',
 'es.net.http.auth.user'='admin',
 'es.net.http.auth.pass'='admin' 
);
  • 通过查询语句导入数据,从 hive 中已有的数据表中查询导出数据,如果你的数据文件在 HDFS 文件系统上,可以创建 hive 外部表,而数据表 location 直接指定 HDFS 上的文件位置。在 ES 集群中就能查询到导入的数据。
代码语言:javascript
复制
INSERT OVERWRITE TABLE es_hadoop_connection
select 
user_id,user_name,hobby,address,create_time
from user_info;

通过以上简单的几个步骤就可以将我们原本在 HDFS 或者 hive 中的数据导入到 Elasticsearch 中,后续就是如何在 ES 中查询分析我们的数据了,这将在以后的文章中详细讲解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档