【编者按】Hive作为Hadoop家族的重要一员,具有学习成本低,开发者可通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用。
在攒库中,Hive也不负众望,得到了非常高的票数。为此,CSDN知识库特邀社区专家蒋守壮(博客:http://blog.csdn.net/jiangshouzhuang)绘制了Hive技术图谱,帮助广大开发者更加系统、全面的学习直播技术。
Hive知识库发布,速来领取!
与此同时,我们还采访了蒋守壮老师,分享他的技术成长之路以及对Hive技术的解读与思考。
CSDN:请简单地介绍一下自己。
蒋守壮:首先非常感谢CSDN能够给我这次被专访的机会,可以让我重新审视自己的职业发展历程,也希望能够帮助一些同行的朋友们。目前就职万达网络科技集团有限公司,是一名大数据分析师和大数据平台架构师。
我是电子专业出身,但自己对软件行业非常感兴趣,所以大学里一边学习本专业课程,一边到图书馆或活跃在相关技术网站上学习计算机专业课程。虽然累点苦点,但是为自己职业生涯打下了扎实的基础。
从毕业后至今,我已经在IT圈跌打滚爬5年多了,经历了很多,有苦有乐,这些都丰富了自己的阅历。工作以来,我一直热爱分享和交流技术,热衷于写博客(CSDN),参与开源社区(Apache一些顶级项目),也乐于在Github上开源自己的软件产品。慢慢地,我从一名菜鸟,成长为资深工程师和架构师,但是我要学习的东西太多了,我会一直坚持下去。
CSDN:你是如何与计算机结缘,踏上大数据开发之路的,能否跟我们分享一下。
将守壮:其实我与计算机结缘的原因,可能会和一些朋友相似,是因为黑客,觉得很酷,也很有挑战性的。这是一个启蒙阶段,于是我开始漫长的探索,学习汇编,C语言,C++,Java;学习计算机原理,Linux内核;学习网络,TCP/IP;学习密码学;学习各种主流数据库;学习脚本,Perl,Python,Shell等等。为了测试一些病毒,因为不可能用自己笔记本的操作系统测试,于是就开始研究虚拟化技术,使用虚拟机搭建各种Linux操作系统进行模拟测试,就这样,走上了一条不归路(是技术研究不归路,不是进局里了)。在这个探索的过程中,发现自己对Linux和数据库方面特别感兴趣,于是2011年毕业后就从事了Linux和数据库方面的工作。
从2012年底开始,我开始接触MPP(大规模并行处理)架构的关系型数据库,使用和维护过Vertica和Greenplum等MPP架构的数据库。在电信行业分析TB和PB级别海量数据时性能还是非常不错的。但是随着业务的发展,处理非结构化和半结构化数据的需求迫在眉睫。我一直关注和参与Apache开源社区,见证了Hadoop生态圈的快速发展,Hadoop非常方便处理非结构化和半结构化数据,于是我们的大数据平台架构开始融合Hadoop,形成混合架构。随着Hadoop生态圈家族不断壮大,支持各种场景的组件出现,SQL支持也非常完善,于是大数据平台架构就逐渐以Hadoop为核心来构建。尤其这两年来,Spark,Flink等通用并行框架不断发展壮大,集成批处理,流计算,实时分析,机器学习和图计算,为企业级构建大数据平台提供更多的选择。
CSDN:分享一下你最近使用的框架,它们都解决了哪些方面的问题。
将守壮:前段时间,我使用Kafka,Spark Streaming和HBase来进行实时数据计算分析,将保险用户相关的数据发送到Kafka消息队列,后端将从Kafka消费数据,并使用Spark Streaming进行流数据实时分析,然后将处理后的数据写入HBase集群中,最后用户从HBase中获取分析好的数据。
现阶段,我们基于现有的Hadoop大数据平台,集成Apache Kylin组件,Kylin可以对Hive中的表进行关联后多维度处理,并将结果写入HBase,其与Hadoop生态圈整合非常完善,非常适合用来做海量数据规模下的OLAP分析,进行实时或准实时查询上百亿数据。另外,Kylin和BI工具也可以很好的集成,比如Tableau,Saiku等。
CSDN:hive的使用场景有哪些?适合实时性强的分析场景使用么?
**将守壮:**Hive是建立在Hadoop上的数据仓库基础构架,它的最佳使用场合是大数据集的批处理作业,一般延迟性比较高,并不能够在大规模数据集上实现低延迟快速的查询,所以不适合实时性强的分析场景。不过目前Hive底层的计算框架除了支持原生的MapReduce,还支持Tez和Spark,这对提升Hive的查询处理性能帮助很大,从Hive 2.0版本开始,推荐使用Tez或Spark作为Hive的计算引擎。
如果希望实时查询分析,可以结合Impala,Presto,Drill等开源的交互式、实时的查询引擎使用,它们能够访问Hive中的表进行数据查询分析。
CSDN:hive的技术特点有哪些? 类sql操作啊,内置大量用户函数udf等等。
**将守壮:**Hive应该是第一个出现的SQL on Hadoop的产品,技术特点如下:
CSDN:Hive创建的内部表和外部表有何异同?
将守壮:这个其实和很多传统数据库中的内部表和外部表一样,没有什么差别。
我将从表的创建和删除两方面简单介绍一下:
CSDN:Hive的优化技巧有哪些?比如如何处理数据倾斜、大表与小表join时,如何优化性能。
**将守壮:**Hive优化其实涉及到几方面,其中一方面是计算引擎方面的优化,比如你使用MapReduce作为计算引擎,那么就需要优化MapReduce;如果你选择Spark作为计算引擎,那么需要对Spark进行优化。
这里我仅从Hive这一层面介绍该如何优化,基本内容如下:
(1)表设计层面优化
(2)语法和参数层面优化
处理数据倾斜的方法其实有很多,不论是Group by还是Join时出现数据倾斜,其实都是数据热点的问题,即某些Key值太多,导致都分发到一个节点执行,那么我们可以将数据量比较大的Key拿出来单独处理,最后再合并到结果集中。如果出现数据倾斜的Key值对结果无关紧要,比如空值,那么我们可以过滤处理,或者将空值加上随机数,进行分发到集群的所有节点并行处理。当然也可以利用Hive自带的参数进行优化,设置当分组或关联的Key值超过多少数量时,进行单独处理,即额外启动一个MapReduce作业处理。
这方面的具体优化过程,请参考我的技术博客。
尽量将小表放到join的左边。小表和大表join时,如果差一个以及以上数量级并且小表数据量很小,可以使用mapjoin方式,将小表全部读入内存中,在map阶段进行表关联匹配。大表和大表进行关联时,要注意数据倾斜的问题。如果两个表以相同Key进行分桶,以及表的桶个数是倍数关系,可以使用bucket join,加快关联查询。
(3)Hive Job优化
CSDN:分享一下Hive数据仓库经验。
将守壮:由于Hive的类SQL和类数据库功能,它向非编程人员开放了大数据Hadoop生态系统,Hive也推动了Hadoop的普及和发展。
企业使用Hive来构建数据仓库,一是可以节约成本,二是基于SQL开发,将传统数据库迁移到Hadoop平台上分析也相关方便,三是支持和Hive集成的Hadoop生态圈的产品也丰富,满足架构扩展。
在使用Hive来构建企业级数据仓库时要注意以下几点:
CSDN:关于技术学习您有什么心得?我们上线了知识库系统化学习的方法,您会怎么应用呢?
其实我学习任何一门新技术的过程都比较相似,可以总结为以下几点:
上面的过程是交互循环的,不是一蹴而就的,你将需要经历时间的磨练,而且在这过程中,你会遇到很多问题,一定要对每个问题刨根问底,从根本上解决,并且坚持做好笔记或写博客,方便后续查看。
另外,CSDN推出的知识库,给我们提供了系统学习的方法。如果我要学习一门新技术,比如Docker,我可以进入Docker知识库,里面列出了Docker的每个知识点,并且每个知识点下面都会有该领域的专家精选的博客文章。此外,还可以把其它平台上看到的干货添加到自己的个人图谱当中,创建你的专属知识库。选择自己感兴趣的知识点进行系统学习,效率非常高。
CSDN:听说你在10月份即将推出自己的第一本技术书籍,请简单介绍一下。
**蒋守壮:**Apache的顶级项目Apache Kylin,这是一个开源的分布式分析引擎,是由eBay研发并贡献给开源社区,其提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。书的名字暂定为《基于Apache Kylin构建企业级大数据分析平台》,预计10月份底左右出版,该书比较全面地介绍Apache Kylin的各方面,以及集成到现有的大数据平台中进行多维数据分析。
关注Kylin项目很久了,也见证了第一个由中国团队完整贡献到Apache的顶级项目。尤其这一年多,Kylin快速发展,功能和稳定性不断提升,我也积极地参与Kylin开源社区,同时也希望借助自己的微薄力量来推广Kylin的使用,帮助更多的朋友认识和使用Kylin来解决企业中基于Hadoop的多维数据分析的需求。
CSDN:你最近关注的技术有哪些?
蒋守壮:这段时间研究的技术,大体上有三方面,这里我就简单描述一下,具体大家可以访问官网查询更多内容:
第一方面:自动化运维工具Ansible。Ansible算是比较新的自动运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置,批量程序部署和批量运行命令等功能。研究这方面内容,主要是因为项目组已经实现基于Ansible快速部署高可用并且安全的大数据平台,提升用户的体验效果和满意度。
第二方面:Flink实时流处理框架。个人一直觉得Flink在实时流方面的架构非常优秀,而且只需要很少的配置就能够实现高吞吐率和低延迟。将来希望在项目中更多地实战Flink实时流处理应用。
第三方面:Docker容器技术。深入研究Docker在分布式和大数据架构中的应用,比如基于Docker构建企业的私用镜像仓库,方便企业能够快速部署大数据平台,也可以将企业中的一些应用实现Docker微服务化。
推荐阅读:
更多内容请关注CSDN知识库。该产品汇集了领域专家们精心绘制的各重点技术领域的知识图谱,及由特邀编辑(领域专家)从海量数据中层层筛选出的精华内容和资源(学习视频、实践Demo、图书)。知识图谱可以帮助开发者全局把控该技术领域,而精选内容更能让开发者从技术细节加深了解该领域的每个核心技术点。扫描以下二维码,获取更多CSDN知识库内容。
个人知识图谱已上线,快来订制你的专属知识库吧=>>你的个人图谱上线了,快来领取!