你好,游客 登录 注册 搜索
背景:
阅读新闻

实战为王 梁堰波解SQL-on-Hadoop疑难杂症

[日期:2014-03-17] 来源:CSDN  作者:刘亚琼 [字体: ]

  2014年3月13日,CSDN在线培训第一期“用SQL-on-Hadoop构建互联网数据仓库与商务智能系统”圆满结束,本次培训讲师是来自美团网的梁堰波,在培训中梁堰波分享了目前在互联网领域数据仓库和商务智能系统构建的业务需求和解决方案,SQL-on-Hadoop产品的原理,使用场景,架构,优缺点,性能优化等。

  CSDN在线培训是专为广大技术从业人员准备的在线实时互动技术培训,邀请各个行业一线技术工程师分享他们工作中遇见的各种问题以及解决方案,同时给大家带来一些新技术、思路、解决方案!

  CSDN在线培训以“经典性、实战性、系统性、前瞻性、专业性”的特色课程为主,通过视频授课、文档共享、白板共享、屏幕共享、讲师在线QA等多种形式的学习方法,帮助一线工程师们利用碎片化时间内加强实战能力,提升实践水平,并实现与技术高手的沟通与互动。

  由于本次培训的时间有限,问答环节有很多问题讲师没有时间进行回复,CSDN特别准备了本次培训QA总结,帮助大家更好的复习和总结此次培训中学到的技术点,让各位学员更快的掌握相关技术要点,少走弯路。以下是整理的一些QA,更多问题可以到CSDN本次活动讨论帖进行互动:http://bbs.csdn.net/topics/390731622

  Q:在Impala上面写的是标准SQL吗?

  我们现在包括Hive,Impala等我们现在使用的SQL-on-Hadoop产品使用的都不是非常标准的SQL,我们都知道要一个分布式的计算环境中实现标准化SQL,就需要一个新的分布式的搜索引擎。这个我们知道像Greenplum、group by对标准SQL支持的挺好,像Impala对标准SQL的支持就不是很好。其实现在使用Impala的机构主要是互联网,因为互联网企业会有很多IT部门的人员,他们会基于Impala做一些适合自己业务上的开发,此时他肯能不会用标准化的SQL,因为他们注重的是性能。

  Impala目前支持大部分ANSI SQL 92标准,暂不支持subquery, exist和set operation等。不过这个已经在Impala的roadmap里面了,预计会在Impala 2.0里面支持。像subquery这样的需求可以通过把SQL改成用join重写来实现。

  Q:在Hive和Impala同时使用的情况下,Impala好像不能实时得到Hive-Metasotre的更新。得重启Impala-server才行,有其他解决方式吗?

  这个问题在最新的Impala 1.2.3版本里面已经修正了。以前需要refresh或者invalid metaData这样的显式命令去update metaData,新的版本里面已经多了一个catalogd服务来负责把元数据的更新推送到每个节点。

  Q:请教一个问题,现在有大量的日志存放在了HDFS中,这些日志的解释需要用到一些维度表,存放在MySQL中,请问应该如何写map reduce程序去做解析这些日志。

  这个是一个典型的SQL on Hadoop使用场景,我在PPT里面也提到了解决方案。一般来说就是通过Sqoop任务把MySQL里面的表格导入HDFS上,然后在HDFS上和log进行各种查询操作。可以使用mapreduce也可以使用Hive,推荐使用Hive,因为你从MySQL里面导入的数据是结构化的。

  Q:在实际环境中,一般公司对于大量的历史数据会继续存留在HDFS中,还是会选择其他底成本的存档方式

  据我目前的了解,目前很多历史数据还是存储在HDFS中的,也有公司采用磁带存储作为备份。HDFS跟EMC或者NetApp的备份存储产品相比就是比较低廉的。由于HDFS我们一般把数据存储成三个replica,所以对于备份存储会有些资源浪费。可以考虑的措施有HDFS arcHive或者使用类似Erasure Code的思路来节约存储资源。在Facebook和淘宝都使用了Erasure Code的思路存储大量的不经常使用的历史数据。

  Q:请问国内目前有哪些企业正在使用Impala呢?使用场景是什么呢?

  目前我了解国内阿里巴巴和百度都在使用Impala。具体的使用场景可以参考我和阿里的杨卓荦同学合作的一篇文章《基于Impala构建实时大数据查询系统实践》,那里有比较详细的介绍。

  Q:能谈谈您对Data scientist的理解吗?到底什么样的人能称作Data scientist?它和Data engineer,还有做Data mining / machine learning的人有区别吗

  推荐你看一本非常短的书<<Building Data Science Team>>。我的理解Data scientist就是具备使用数据化的方法和思路来解决业务问题,会用数学和统计的方法并用计算机编程来实现。Data mining和machine learning基本上都是Data scientist必须掌握的一些基本功。

  Q:flume收集的日志随着时间的推移日志文件数越来越多,有什么方法比如1天才产生一个文件

  flume收集的日志到HDFS上,然后按照你自己指定的逻辑进行ETL操作。在flume agent上的存储都是临时存储,所以产生数量多少的文件都是没有问题的。

  Q:目前在互联网公司的主要具体的应用场景?比如收集nginx日志能具体做些什么应用?

  比如用户浏览了那些网页、商品,在哪些频道停留的时间比较长等等用户行为的分析。日志是一切用户分析的基础。

  Q:请问美团网内部Hbase上面是做OLAP吗,OLTP的话还是用分布式MySQL吗

  美团内部Hbase是做online storage的,这个是用场景和典型互联网公司是一样的。目前是用Hbase做OLAP的公司不是特别多,而且据我所知效果也都不是特别号。目前OLTP领域还是Oracle和MySQL的天下。

  Q:传统的Datawarehouse 针对不同的应用,利用不同的layer开发了OLAP,mining等实现快速查询,Hadoop针对此能支持实时查询吗

  针对不同应用,领用不同的layer这个在Hadoop Ecosystem同样没有问题,因为这个是数据仓库架构和数据仓库逻辑设计的问题,更多的是应该考虑公司的业务逻辑,跟使用什么样的平台不是紧耦合的。Hadoop之上有很多实时查询的工具Tez/Impala/Shark等。

  Q:real-time的场景,Shark和Impala对比怎么样?好像用Shark的更多?

  这个据我说知没有这个结论。现在各个公司都处在初步尝试阶段,Impala和Shark各有各的优势和缺点。

  Q:Impala和阿里的mdrill优缺点是什么?

  阿里的mdrill我没有用过,只是看过一些资料,我谈下个人观点。Impala定位是交互式查询。而mdrill是“高维+实时”查询,mdrill查询的底层数据会做很多预处理工作,所以数据的动态性不如Impala。Mdrill能够查询的维度会非常非常高。

  Q:对于数据仓库,要做上下钻等,Impala中表要如何设计,以满足需求?是针对所有的可能维度组合都做事实表吗?还是只有最小粒度的表的存储,如果有聚合结果需求,则在查询是现算?

  这个逻辑同样是数据仓库设计的问题,根据你的业务逻辑和访问模式来制定,跟使用什么样的平台关系不是特别紧密。所有可能维度组合做事实表显然是不合适的,还是我们经常说的balance

  Q:用MAPREDUCE做数据清洗时,维表数据如何加载或存储?是放在内存中吗,如果放在内存中,是否有共享内存,还是要每台机器都生成缓存

  这个问题非常好。HDFS 2.3开始支持的新特性会允许上层应用显式指定把某些数据放到哪台机器的内存中,这个特性就是专门给Hive/Hbase/Impala这样的应用准备的。不过目前Hive/Hbase/Impala还不支持这个功能,如果自己写mapreduce程序可以显式指定把维度表加载到内存中。

  Q:现在我们的产品把稳定性的要求放在第一位,不能老是异常、宕机,请问什么平台是最稳定的?Hortonworks?CDH?还是其他的平台?

  说实话哪个都不是特别稳定,但是从我的经验来看CDH应该是相对好点的,而且CDH支持的功能会比较完善,对bug的反应速度会快点。

  Q:我在一个小研究所,我们那有各种服务器,都是小型机,IBM,HP,联想,戴尔的都有,如果搞这个软硬件架构,可行度如何,在技术层面,包括人力技术投入和其他硬件投入等;这样弄完后是不是可以更好的将上面已有的各种网站整合呢;这个软件架构适合多种大小网站和系统的集成么

  这个问题是很多传统企业迁移到Hadoop这样的新型平台都会遇到的问题。如果单纯整合既有设备,那么应该问题不大。其实问题更大的是Hadoop这样的平台是否能够解决你们的问题。Hadoop是个大数据存储和分析平台,不是网站后台。。。

  Q:请问楼主是否听说过Data Vault数据仓库建模方法。去年,我们研究并在RDBMS上尝试使用了这种建模思想。我们的理解是:DV建模方法会将历史上所有发生过的信息不重复地保存在数据仓库内,必要的时候通过数据加载时间(Load Date)或者数据生效时间(StartTime)、数据时效时间(EndTime)区分相同业务在不同时间点上的情况。

  理论上说DV建模方法很适合MR/Impala这种分布式的架构,但是,如何高效地、规范化地在Hadoop上实现数据加载、数据去重、数据生命期计算(数据生效/时效时间)一直困扰着我们。如果每次更新大量数据,我们可以接受全量数据操作。但是如果只是更新少量数据,有觉得以上方法开销甚大。请问楼主是否能够分享一些这方面的经验?

  这个问题很好,但是也是涉及到具体的业务问题了。关于全量更新和增量更新的问题,当你的数据不是很大的时候全量更新简单高效;当你的数据很大之后,就需要拆解成增量更新,Load Date/Start Time/End Time这个思路是我们常见的一种解决思路,具体到如何拆解实现增量更新要看你的业务模式是什么样的。

  Q:搭SQL-on-Hadoop环境是不是很复杂?最少需要多少台服务器?有没有比较简单的方法就能搭起SQL-on-Hadoop环境?主要我对linux不是很熟悉,

  最简单的思路就是使用Cloudera公司提供的CDH和Cloudera Manager来完成一套Hadoop系统的快速构建,可以参考cloudera公司的资料。

  错过互联网浪潮,错过电商竞争时代并不可惜,因为我们赶上了云计算和大数据的兴起。面对巨大的云计算与大数据技术人才缺口,互联网企业与传统行业企业正在不 惜代价地争夺资源:股票激励、薪资翻番、最高60个月年终奖,已经在过去轮番上演。有限的奖励之外,还有无限的以技术实力为资本的创业潮正在兴起。技术精英们, 已经迎来难得的转型与增值机会!快来关注CSDN在线培训吧!





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款