您的位置:首页 > 运维架构

hadoop使用中常见问题的总结

2013-11-29 15:35 387 查看
1. 比如遇到过hadoop溢出没有? 如果hadoop溢出了如何解决?

为了防止oom,需要限制task的内存上限,例如一个task占的内存量,以及并发度是多少,二者相乘,再和本机内存做个比较。

内存配置示例:

我们的配置mapred-site.xml

mapred.tasktracker.map.tasks.maximum = 6 jvm

mapred.tasktracker.reduce.tasks.maximum = 2 jvm

mapred.child.java.opts = -Xmx2048m -Xms512m

因此,内存使用最差情况 8 * 2G = 16G

在 map 两个关键的配置 :

Io.sort.mb / io.sort.spill.percent ,map jvm 一上来 这两个配置就决定 初始大小 。

在 StatBase (10.10.70.85凌晨5点的一个mapreduce上)

我的Io.sort.mb / io.sort.spill.percent = 1000 / 0.8 也就是 每台机器 初始: 6*800M

跑一段时间后内存小的就开始大量使用 swap ,

reduce 上来有 大概在 1.2~1.3G * 8 的内存使用量 swap 4G全部用完

总结: 尽量 配置 io.sort.mb 小于 200m ,这样 每个jvm 大概在在最后 500m 之间.

每台机器 500m*8 应该没问题

2. 什么情况下,单机跑没问题,但是hadoop跑就有问题了

【问题说明】有时候,map reduce的运行参数比较长,为了阅读方便,rd可能会对程序参数进行折行,添加tab键排版,这样反倒使hadoop上解析命令失败。

【测试方法】对于map reduce的运行参数比较长的情况,可以督促rd用shell变量进行设置。然后在hadoop程序启动参数用shell变量进行替换。即阅读方便,又不会出错。

另外有可能是python解释器等各种环境差异问题,可以通过打包上传到集群来解决。

3. hadoop调试怎么调试

在Eclipse下的hadoop mapred调试

对于小数据量的调试,可以再本机下载并安装cygwin,之后将cygwin的bin目录添加到系统的Path环境变量中,将hadoop的core包添加到classpath中。此时就可以在Eclipse下调试你的mapred程序,这时hadoop是在local模式下运行的,如果把hadoop的源代码关联进来,你还可以在他的内部处理中设置断点。

4. hadoop的排序遇到限制怎么解决

【问题说明】有时候会遇到reducer内部排序,但全局顺序无法保证的情况。

【测试方法】三种思路:1.数据少,写成单map+reduce;2.两轮map-reduce任务;3.单独写一个排序单机过程。

5. hadoop中hdfs是什么,namenode、datanode、jobtracker、tasktracker都是什么,有什么区别?

Hadoop 是Apache 下的一个项目,由HDFS、MapReduce、HBase、Hive 和ZooKeeper等成员组成。其中,HDFS 和MapReduce 是两个最基础最重要的成员。

HDFS 是Google GFS 的开源版本,一个高度容错的分布式文件系统,它能够提供高吞吐量的数据访问,适合存储海量(PB 级)的大文件(通常超过64M)。

采用Master/Slave 结构。

NameNode 维护集群内的元数据,对外提供创建、打开、删除和重命名文件或目录的功能。

DatanNode 存储数据,并提负责处理数据的读写请求。

DataNode定期向NameNode 上报心跳,NameNode 通过响应心跳来控制DataNode。

Hadoop MapReduce 的实现也采用了Master/Slave 结构。

Master 叫做JobTracker,而Slave 叫做TaskTracker。

用户提交的计算叫做Job,每一个Job 会被划分成若干个Tasks。JobTracker负责Job 和Tasks 的调度,而TaskTracker负责执行Tasks。

MapReduce 是大规模数据(TB 级)计算的利器,Map 和Reduce 是它的主要思想,来源于函数式编程语言,Map 负责将数据打散,Reduce负责对数据进行聚集,用户只需要实现map 和reduce 两个接口,即可完成TB 级数据的计算,常见的应用包括:日志分析和数据挖掘等数据分析应用。另外,还可用于科学数据计算,如圆周率PI 的计算等。

6. hadoop的任务调度、分配是什么样的?
http://blog.csdn.net/mvpme82/article/details/8737648
7. hadoop同其他并行计算语言有什么不同

7. HIVE的使用


hadoop使用过程中的一些小技巧

1.在Eclipse下的hadoop mapred调试

对于小数据量的调试,可以再本机下载并安装cygwin,之后将cygwin的bin目录添加到系统的Path环境变量中,将hadoop的core包添加到classpath中。此时就可以在Eclipse下调试你的mapred程序,这时hadoop是在local模式下运行的,如果把hadoop的源代码关联进来,你还可以在他的内部处理中设置断点。

2. master重启出问题

之前使用hadoop过程中遇到过几次由于任务执行过程中,某些slave宕机了,然后重启集群,master起不来,一直处在safe mode。查看原因是他一直在试图恢复大量的中间文件,但是此时这些文件已经不存在了。对于这种情况,可以删去他的redo日志,使集群能够快速的启动,当然,弊端是这些中间文件将被忽略。删除的办法是修改设置中的hadoop.tmp.dir的路径下的dfs/name/current/edits文件。

3. 如果有一天,你发现,你的集群Live Node是0,没有datanode挂载的话,而且datanode上的log不停地因为连不上NameNode而在打retry,怎么办?

2013-04-02 18:03:09,312 INFO org.apache.hadoop.ipc.RPC: Server at master/10.2.44.90:9000 not available yet, Zzzzz...

亲,先在NameNode机器上jps,看看是不是没有NameNode进程?

有的话,去改你的/etc/hosts文件,最好ip和名字中间是tab。

没有的话,去吧hdfs的tmp目录删掉,就是core-site.xml中hadoop.tmp.dir指定的路径,NameNode和TaskNode全删掉,再mkdir新目录。

格式化namenode,再sh start-all.sh。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: