那些年踩过的hadoop坑

浏览: 3284

      首先说明一下,只想分享一下关于hadoop在实际应用的时候选择问题。其实目前主流的hadoop选择主要有两种:

       1.开源社区版,然后公司自主开发或者集成后使用的hadoop版本;

       2.商业发行版,如cloudera,hortonworks,MapR发行的CDH,HDP,MapR版本。

       目前开源社区版本主要集中在BAT公司使用,因为他们会有一个强大的团队,然后针对自己的业务场景去做定制化的开发;另外还有的是提供hadoop的外部服务,在云平台上面提供大数据技术,如青云, 百度的开放云平台,阿里的ODPS等。或许还有一些公司使用开源产品,为技术研究或者是其他原因。那么我们应该如何去选择hadoop版本,应该考虑如下原因:

    1.技术细节,如hadoop的版本,含有的组件等,可以例举如下说明:

        1.1众所周知,在hadoop 0.x版本的时候,存在SPOF(single point of failure,单点故障)的问题,而hadoop 2.x的时候已经解决,所以目前公司主流的选择都是使用hadoop 2.x;、

        1.2 hive在0.13版本的时候是不支持update,insert into table values()操作,自己工作的时候就因为这个问题而团队采取了hive的版本升级,换成了0.14;

        1.3 phoenix和hbase的整合,目前社区版phoenix主要整合的是0.94,0.98,而0.96版本需要自己手动编译phoenix,当初因为业务需求的缘故,要采用phoenix,但是hbase使用的是0.96,后面的操作大家可想而知;

        1.4 sqoop 1.4x版本在做hive数据迁移的时候,只支持到单分区,支持多分区要采用--hcatalog-partition-keys dt,dm --hcatalog-partition-values 2015-07-18,03,需要做sqoop和hadoop 2.x版本的手动整合。上面这几点是我在工作中使用社区版本的时候碰见的典型的技术问题,因为hadoop的生态圈的庞大,各种技术不断发展和更新,所以对与我们团队的挑战可想而知。

    2.易于部署和维护,应该有可用的工具包来管理部署,版本更新,补丁等。公司团队自己开发了管理工具,通过java编程和shell配合,可以做到一键部署,但是不能够在已有的环境进行新组件的添加,滚动升级,同时对集群的管理只能做到有限的监控,比起商业版的部署就相差很远。

    3.成本,只有社区版是完全免费的,但是MapR和CDH是要基于许可进行收费,如CDH在安装过程中如下图所示:

可以看出CDH企业版本是需要基于许可进行收费的。而HDP安装是不需要收费的,如下图所示:


 HDP是完全免费的。

    4.企业应用集成支持,这里指和其他厂商的技术对接,比如pentaho的kettle,已经融合了hadoop商业版本,如下图所示:


这样就避免使用社区版本的时候自己手动去进行工具的整合。

       综上所述,如果公司有强大的技术背景,可以做hadoop的二次开发和技术整合,那么选择社区版本,既可以钻研技术,又能够为开源社区做贡献。如果公司引进hadoop是因为解决业务需求,那么就应该选择商业版本,这样避免因为技术问题而产生相应后果。

推荐 6
本文由 平常心 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

很不错,学习
我还有个问题想向老师咨询下,目前hadoop有很多的发行版本,比如cloudera、hortworks、apache等,想问下,在做基于hadoop的应用开发的使用,这些版本的hadoop 的函数调用接口是否存在差异?例如我用JAVA基于cloudera的hadoop写了一个应用程序,能否在hortworks上运行呢?
如org.apache.hadoop.xxx的api是兼容的,比如你开发的MR程序,是可以跑在cdh或者hdp,不受影响。
但是想cdh的cm提供自己的接口,如com.cloudera.api下面的ApiClusterList 是不可以在hdp运行,谢谢!

要回复文章请先登录注册