`

Hadoop无法解决的问题

阅读更多

因为项目的需要,学习使用了Hadoop,和所有过热的技术一样,“大数据”、“海量”这类词语在互联网上满天乱飞。Hadoop是一个非常优秀的分布式编程框架,设计精巧而且目前没有同级别同重量的替代品。另外也接触到一个内部使用的框架,对于Hadoop做了封装和定制,使得更满足业务需求。我最近也想写一些Hadoop的学习和使用心得,但是看到网上那么泛滥的文章,我觉得再写点笔记一样的东西实在是没有价值。倒不如在漫天颂歌的时候冷静下来看看,有哪些不适合Hadoop解决的难题呢?

Hadoop无法解决的问题

这张图就是Hadoop的架构图,Map和Reduce是两个最基本的处理阶段,之前有输入数据格式定义和数据分片,之后有输出数据格式定义,二者中间还可以实现combine这个本地reduce操作和partition这个重定向mapper输出的策略行为。可以增加的定制和增强包括:

  • 输入数据和输出数据的强化,例如通过数据集管理起来,可以统一、合并各式数据集,甚至也可以给数据增加过滤操作作为初筛,事实上业务上的核心数据源是种类繁多的;
  • 数据分片策略的扩展,我们经常需要把具备某些业务共性的数据放到一起处理;
  • combine和partition的扩展,主要是有一些策略实现是在很多Hadoop的job中都是通用的;
  • 监控工具的扩展,这方面我也见过别的公司内部定制的工具;
  • 通讯协议和文件系统的增强,尤其是文件系统,最好能用起来像接近本地命令一样,这样的定制在互联网上也能找得到;
  • 数据访问的编程接口的进一步封装,主要也是为了更切合业务,用着方便;
  • ……

这些定制从某种程度上也反应了Hadoop在实际使用中略感局限或者设计时无暇顾及的地方,但是这些都是小问题,都是通过定制和扩展能够修复的。但是有一些问题,是Hadoop天生无法解决的,或者说,是不适合使用Hadoop来解决的问题。

1、最最重要一点,Hadoop能解决的问题必须是可以MapReduce的。这里有两个特别的含义,一个是问题必须可以拆分,有的问题看起来很大,但是拆分很困难;第二个是子问题必须独立——很多Hadoop的教材上面都举了一个斐波那契数列的例子,每一步数据的运算都不是独立的,都必须依赖于前一步、前二步的结果,换言之,无法把大问题划分成独立的小问题,这样的场景是根本没有办法使用Hadoop的。

2、数据结构不满足key-value这样的模式的。在Hadoop In Action中,作者把Hadoop和关系数据库做了比较,结构化数据查询是不适合用Hadoop来实现的(虽然像Hive这样的东西模拟了ANSI SQL的语法)。即便如此,性能开销不是一般关系数据库可以比拟的,而如果是复杂一点的组合条件的查询,还是不如SQL的威力强大。编写代码调用也是很花费时间的。

3、Hadoop不适合用来处理大批量的小文件。其实这是由namenode的局限性所决定的,如果文件过小,namenode存储的元信息相对来说就会占用过大比例的空间,内存还是磁盘开销都非常大。如果一次task的文件处理较大,那么虚拟机启动、初始化等等准备时间和任务完成后的清理时间,甚至shuffle等等框架消耗时间所占的比例就小得多;反之,处理的吞吐量就掉下来了。(有人做了一个实验,参阅:链接

4、Hadoop不适合用来处理需要及时响应的任务,高并发请求的任务。这也很容易理解,上面已经说了虚拟机开销、初始化准备时间等等,即使task里面什么都不做完整地跑一遍job也要花费几分钟时间。

5、Hadoop要处理真正的“大数据”,把scale up真正变成scale out,两台小破机器,或者几、十几GB这种数据量,用Hadoop就显得粗笨了。异步系统本身的直观性并不像那些同步系统来得好,这是显而易见的。所以基本上来说,维护成本不会低。

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

0
0
分享到:
评论
2 楼 wojiaolongyinong 2013-11-13  
LZ说的基本同意,但是下面那些问题在Hadoop在开发之初就已经考虑到了,因为Hadoop本就是想实现数据的大吞吐量处理,而且也是受google的论文启发实现的,所以key-value这种数据结构是比较适合google的一些业务开展,所以Hadoop就是一个处理特定方面问题的架构。还有,LZ现在做这个,希望多和LZ交流下~~~
1 楼 须等待 2013-11-13  
基本同意,不过就LZ总结的第二点,我认为Hadoop在这一点上是有价值的。
首先Hadoop是一个文件系统,本身就不是数据库,不能和RDBMS去做对比,其次,基于Hadoop的Hive与RDBMS的对比中,Hive关注的重点与传统的RDBMS不一样,RDBMS关注于线上的请求,要求响应是实时的,而Hive本身定位就是一个离线的数据分析系统,而就SQL的实现来说,本质上与RDBMS没有区别,只是一个基于的文件系统是本地的,一个是分布式的文件系统,论效率而言,没有可比性,但是论吞吐量和操作的方便度来说,Hive是有绝对优势的。如果没有Hive,大数据分析通过RDBMS来做的话,由于分库分表等逻辑存在,不写代码是不可能的。

另外,也有基于Hadoop的K-V数据库:HBase,性能有待测试

相关推荐

    hadoop 50070 无法访问问题解决汇总

    文章目录解决办法1:解决办法2:解决办法3:解决办法4:解决办法5: 解决办法1: 修改selinux [root@djt002 hadoop]# vi /etc/selinux/config 解决办法2: 查看你的$HADOOP_HOME/etc/hadoop下的core-site.xml和...

    hadoop1.0 Failed to set permissions of path 解决方案

    hadoop 启动时 TaskTracker无法启动 ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.io.IOException: Failed to set permissions of path: \tmp\hadoop-admin \mapred\...

    win10下hadoop的使用

    win10下hadoop2.7.2安装包及hadoop.dll和winutils.exe,解决win10下安装hadoop无法使用问题

    hadoop高可用搭建

    hadoop集群搭建高可用文档在Hadoop2.x之后的版本,提出了解决单点问题的方案--HA(High Available 高可用)。这篇博客阐述如何搭建高可用的HDFS和YARN,执行步骤如下: 创建hadoop用户 安装JDK 配置hosts 安装SSH ...

    论文研究-Hadoop与Spark应用场景研究.pdf

    Spark的崛起对作为当前最为流行的大数据问题解决方案的Hadoop及其生态系统形成了有力的冲击,甚至一度有人认为Spark有取代Hadoop的趋势,但是因为Hadoop与Spark有着各自不同的特点,使得两者拥有不同的应用场景,...

    Ubuntu20.04搭建hadoop2.10.0集群.md

    关于hadoop集群的搭建,详细讲述了如何搭建集群,配置文件以及如何启动,还有可能遇到的问题以及解决方案

    Hadoop datanode重新加载失败无法启动解决.docx

    Hadoop datanode重新加载失败无法启动解决.docx

    macOS编译hadoop-2.8.5

    mac版本,解决hadoop2.0+安装后无法加载本地库的问题(无法加载native库)主要原因是官网预编译的不支持macOS系统,需要我们自行编译

    海量高效数据索引·hadoop·JPA·data mining

    利用JPA做“公共黑板”,解决了数据挖掘中hadoop的子任务无法共享数据的问题,提出了树型结构的高效算法。具体实现了kdtree的hadoop版本。 代码可以在...

    完美解决Hadoop集群无法正常关闭的问题!

    相信对于大部分的大数据初学者来说,一定遇见过hadoop集群无法正常关闭的情况。有时候当我们更改了hadoop内组件的配置文件后,必须要通过重启集群来使配置文件生效。  但往往一stop-all.sh,集群下方总会出现下面的...

    基于Hadoop高效的数据挖掘框架

    利用持久化方法(JPA),解决了Hadoop的子任务无法共享数据的问题,提出了一个hadoop上的数据挖掘框架,可以完成树型结构。具体实现了DBtree。 下面是ris格式的引文,存盘后,可为endnote等文献管理软件导入。 TY ...

    hadoop-core-1.1.2.jar

    解决hadoop在window下jobtracer无法启动的问题,可以在log中查看

    mac 下hadoop3.0.2编译的native库

    mac版本,解决hadoop3.0.0安装后无法加载本地库的问题

    Hadoop入门实战手册

    1.1 ..................................................................................................4 什么是Hadoop? 1.2 ................................................................................

    hadoop 2.8.0在win10上修改编译成功的bin目录(解决winutils.exe无法符号链接)

    尽管选择修改组策略中的本地安全策略...因此,通过修改winutils源码并编译成功,解决了无法生成符号链接这个安全性问题,经过实测,原来报错的symblink(1)不再发生。替换本目录下的文件后,yarn及sqoop均能正确运行。

    Hadoop集群datanode磁盘不均衡的解决方案

    当hdfs出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。因业务需要搭建一个新hadoop集群,并将老的hadoop集群中的...

    基于Hadoop的大规模数据交换的研究

    然而令人无奈的是,当使用一方作为数据源时,我们无法从另 一方自由地进行查询。终于在Hadoop 0.19 版本时,新增的DBInputFormat 组件可以轻松地 在Hadoop 与许多关系型数据库之间导入导出数据。与此同时,许多第三...

    Hadoop搭建-Linux系统.docx

    配套资源,本人自己搭建的hadoop过程常见问题: Q:开始时无法创建虚拟机,系统提示不支持CPU虚拟化。 A;联想机器常见问题,百度一下就可以了。进入BIOS设置一下,重启即可解决。 Q:没网络。 A:新手常见问题。...

Global site tag (gtag.js) - Google Analytics