因为项目的需要,学习使用了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就显得粗笨了。异步系统本身的直观性并不像那些同步系统来得好,这是显而易见的。所以基本上来说,维护成本不会低。
文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》
相关推荐
在 Hadoop 中,Shuffle Error 是一个常见的问题,主要是由于系统默认的文件打开数限制太小,导致程序无法正常运行。解决方法是修改 `/etc/security/limits.conf` 文件,增加文件打开数的限制,将 `nofile` 的值设置...
Hadoop是大数据处理的重要工具,但是在安装和使用Hadoop时,可能会出现一些常见的问题,这些问题可能会导致Hadoop无法正常工作,或者无法达到预期的性能。下面是Hadoop常见的问题及解决方法: 1、NameNode启动时...
但是在使用 Hadoop 过程中,我们经常会遇到一些错误和问题,本文将为您提供一些常见的 Hadoop 故障解决方法。 一、Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out 这个错误是由于系统默认的打开...
Hadoop常见问题及解决办法汇总 Hadoop是一个基于Apache的开源大数据处理框架,广泛应用于大数据处理、数据分析和机器学习等领域。...同时,需要注意的是,在解决问题时,需要小心地备份重要文件,以免造成数据丢失。
### Hadoop集群遇到的问题及其解决方法 #### 异常一:DataNode无法连接到NameNode **问题描述:** 在Hadoop集群部署过程中,经常会出现DataNode无法成功连接到NameNode的情况,导致集群无法正常启动。 **原因分析...
Hadoop 文件上传失败原因分析及解决方法 本文主要讨论了在 Java Web 程序中上传文件到 Hadoop HDFS 文件系统中失败的原因分析及解决方法。通过对问题的分析和解决,可以总结出以下知识点: 1. Hadoop 文件上传失败...
无论是通过清理临时文件并重新格式化集群,还是通过手动修改节点ID,都能有效解决问题。这两种方法各有优缺点,选择哪种方式取决于具体情况和个人偏好。希望本文提供的指南能够帮助您快速诊断并解决Hadoop集群中的...
解决这个问题的方法是检查 Hadoop 集群的配置,确保 WEBHDFS 服务已经启动,并且 Logstash 的配置正确无误。 二、 Pipeline aborted due to error 报错 在 Logstash 中,Pipeline 是一个处理数据的流程,但是如果...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分布式存储。...对于想要在Windows上探索Hadoop世界的人来说,深入理解这些组件及其工作原理将极大地提升其技术水平和解决问题的能力。
这一问题通常表现为,在尝试启动Hadoop集群时,Datanode无法正常启动,并且在访问NameNode的Web界面时发现缺少Datanode的相关信息。这种情况会严重影响Hadoop集群的可用性和数据处理能力。 #### 二、原因分析 根据...
总结来说,`hadoop.dll`和`winutils.exe`是Hadoop在Windows环境中的两个关键组件,它们解决了在非Linux平台上运行Hadoop时遇到的兼容性问题。通过将这两个文件放入Hadoop的`bin`目录并正确配置环境变量,用户可以在...
此外,Windows上的Hadoop安装和调试可能遇到更多问题,如文件权限问题、线程问题等,需要开发者具备一定的解决问题的能力。 总的来说,`winutils.exe`和`hadoop.dll`是Hadoop在Windows上运行的基石,它们使得开发者...
文章目录解决办法1:解决办法2:解决办法3:解决办法4:解决办法5: 解决办法1: 修改selinux [root@djt002 hadoop]# vi /etc/selinux/config 解决办法2: 查看你的$HADOOP_HOME/etc/hadoop下的core-site.xml和...
本文将详细介绍这两个文件及其在Hadoop生态系统中的作用,以及如何解决它们缺失的问题。 首先,`hadoop.dll`是一个动态链接库文件,主要在Windows操作系统上用于支持Hadoop本地运行时环境。它包含了Hadoop在Windows...
同时,由于Hadoop的Windows支持有时可能存在兼容性问题或更新不及时,因此,对于那些无法连接到外网的用户,提供这样的预编译版本(如压缩包中的文件)确实能带来很大的帮助,避免了自行编译和解决依赖的困扰。...
7. **日志和调试**:在解决问题的过程中,查看Hadoop和Mahout的日志信息是非常重要的。通过Hadoop的YARN日志和Mahout的自定义日志,可以定位错误发生的具体位置,从而进行修复。 在解决这些问题时,以下步骤可能会...
标题中的“不同Hadoop版本winutils文件包”指的是在Windows环境下使用Hadoop时,需要的一个关键组件——winutils.exe。...对于大数据从业者和开发者而言,掌握这些知识对于提升工作效率和解决问题至关重要。
此外,了解Hadoop的基本概念,如HDFS(Hadoop Distributed File System)和MapReduce,以及YARN(Yet Another Resource Negotiator)的原理,也能帮助理解为什么这个dll文件如此重要,并有助于解决问题。 总的来说...