`

Hadoop配置和使用问题记录

阅读更多
最近在本地用cygwin环境来配置和使用hadoop。
遇到了一些问题,下面的这篇文章讲的比较全。
原文地址:http://shutiao2008.iteye.com/blog/319128
如果有补充的,我会补充进去


关于hadoop如何配置的教程网上已经有不少了,配合hadoop主页上的说明,基本可以顺利在多台机器上配置好hadoop集群。这里记录的是我在实际配置和使用hadoop时遇到的问题,其中一些属于hadoop周边,如ssh配置时容易遇到的问题和解决方法,供大家参考。我目前是在windows xp里通过cygwin安装的hadoop,版本是0.17.2.1。

1. 安装cygwin。在www.cygwin.com下载网络安装包,在选择组件的时候建议直接把openssh组件选中,有些版本的cygwin似乎不会自动安装diffutils组件,所以需要手工选中一下,否则配置ssh时会提示缺少该组件包。

2. cygwin控制台里的缺省提示符不太习惯,用export PS1="\u@\w$"设一下好多了。

3. 配置sshd比较简单,可以参考这个链接http://cha.homeip.net/blog/archives/2006/04/_winxp_cygwin_s.html。在ssh-host-config时问到“Should privilege separation be used? (yes/no)”时回答no即可,如果由于安全因素要回答yes时,在启动sshd时有可能遇到“Privilege separation user sshd does not exist”的错误信息,解决方法可参考这个链接http://www.unixguide.net/comments/sun/ssh_installation.shtml/37.shtml
4. 在配置ssh使用证书方式自动验证时花了一些时间,后来觉得可能是由于机器上有两个版本的cygwin的缘故,因为在另一台机器上安装就没有出现问题。在使用ssh-keygen -t rsa命令后提示输入密码时,直接按两次回车即可。公钥的复制等过程这里不再赘述。

5. 试图在Eclipse里运行hadoop的WordCount程序时提示异常:“javax.security.auth.login.LoginException: Login failed: CreateProcess: whoami error=2”,解决方法是把c:\cygwin\bin加入系统的path环境变量,然后重启Eclipse以便改动生效。

6. 在Eclipse里运行WordCount时遇到java heap size不够的异常,在运行配置里加入-Xms200M就可以解决。(hadoop的helloworld要求的内存比较多?)

7. 当要运行的运算依赖第三方类库时,这个链接https://issues.apache.org/jira/browse/HADOOP-1622有所讨论,但暂时没看到除了在命令行里使用hadoop jar命令以外的解决方法,比如在0.17.2和0.18.1版本里我都没有看到JobConf类里有类似addJar()这样的方法,在JobConf#setJar()里使用逗号分隔多个jar文件的方式则会报找不到文件的错误。解决方式可能有两个:a)把所需要的第三方jar文件复制到每个节点机器的jre里(暂时没有试验) b)把第三方jar包和自己的类打到一个包里。

update: 在网上找到另一种方式,通过DistributedCache实现http://www.infoq.com/cn/articles/hadoop-process-develop#view_31599,原文里可能有笔误,我试验正确的方法是调用DistributedCache.addArchiveToClassPath()方法,注意其第一个参数必须是相对路径,如“/test/lib /my.jar”,而不能是像“hdfs://192.168.0.5:47110/test/lib/my.jar”这样的绝对路径。关于 DistributedCache的说明在里有一些。

8. 调试mapreduce程序的方式,在这个链接http://shutiao2008.iteye.com/blog/319128里讲得比较清楚了,因为很有用所以特意重复一次。如果文件存放在HDFS里,那么只需要调用JobConf#.set("mapred.job.tracker", "local");即可;如果文件也是存在本地的,还需要调用JobConf#set("fs.default.name", "local");方法。我通常让文件存在HDFS里调试,因为要使用本地文件要么参数需要改变,要么代码需要改变,维护两个环境很麻烦。在程序里用System.out.println()输出的内容可以在datanode的hadoop安装路径的logs/userlogs目录里找到。



9. 当使用自定义InputFormat时,特别是使用EMF模型元素作为key的时候,需要注意并不是在代码的任何地方都能得到xmi:id的值的。具体来说,在WritableComparable#write()方法里能得到(前提是该对象本来就有resource,即eobj.eResource()!=null),而在WritableComparable#readFields()里是不能得到的,在RecordWriter#write()方法里同样不能得到,因为后两者的EMF元素对象都是反序列化得到的,已经不是内存里原来的那个实例了。

10. map进行到100%后,reduce过程进行到某个数值(如16%)后就不再继续,直到被hadoop强制关闭。在tasknode的log里记录如下:



2008-11-20 11:17:06,455 INFO org.apache.hadoop.mapred.TaskTracker: task_200811191041_0015_r_000000_0 0.16666667% reduce > copy (6 of 12 at 0.00 MB/s) >
2008-11-20 11:17:09,455 INFO org.apache.hadoop.mapred.TaskTracker: task_200811191041_0015_r_000000_0 0.16666667% reduce > copy (6 of 12 at 0.00 MB/s) >
2008-11-20 11:17:15,455 INFO org.apache.hadoop.mapred.TaskTracker: task_200811191041_0015_r_000000_0 0.16666667% reduce > copy (6 of 12 at 0.00 MB/s) >
2008-11-20 11:17:18,705 FATAL org.apache.hadoop.mapred.TaskTracker: Task: task_200811191041_0015_r_000000_0 - Killed due to Shuffle Failure: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
2008-11-20 11:17:18,705 INFO org.apache.hadoop.mapred.TaskTracker: About to purge task: task_200811191041_0015_r_000000_0
2008-11-20 11:17:18,705 INFO org.apache.hadoop.mapred.TaskRunner: task_200811191041_0015_r_000000_0 done; removing files.
2008-11-20 11:17:18,705 WARN org.apache.hadoop.mapred.TaskTracker: Unknown child task finshed: task_200811191041_0015_r_000000_0. Ignored.
2008-11-20 11:17:40,845 INFO org.apache.hadoop.mapred.TaskTracker: Received 'KillJobAction' for job: job_200811191041_0015
2008-11-20 11:17:40,845 INFO org.apache.hadoop.mapred.TaskRunner: task_200811191041_0015_m_000011_0 done; removing files.
2008-11-20 11:17:40,845 INFO org.apache.hadoop.mapred.TaskRunner: task_200811191041_0015_m_000005_0 done; removing files.



在我的java application的控制台里的输入如下:

08/11/20 11:06:39 INFO mapred.JobClient:  map 96% reduce 11%
08/11/20 11:06:40 INFO mapred.JobClient:  map 100% reduce 11%
08/11/20 11:06:43 INFO mapred.JobClient:  map 100% reduce 13%
08/11/20 11:06:47 INFO mapred.JobClient:  map 100% reduce 16% (在这里停很久)
08/11/20 11:17:12 INFO mapred.JobClient:  map 100% reduce 0%
08/11/20 11:17:12 INFO mapred.JobClient: Task Id : task_200811191041_0015_r_000000_0, Status : FAILED
Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
08/11/20 11:17:14 WARN mapred.JobClient: Error reading task outputnode2
08/11/20 11:17:14 WARN mapred.JobClient: Error reading task outputnode2
08/11/20 11:17:25 INFO mapred.JobClient:  map 100% reduce 16%
08/11/20 11:17:30 INFO mapred.JobClient:  map 100% reduce 25%
08/11/20 11:17:31 INFO mapred.JobClient:  map 100% reduce 100%
08/11/20 11:17:32 INFO mapred.JobClient: Job complete: job_200811191041_0015



我想找到这个问题的所在了。是secondary name node所在的机器没有配置dfs.http.address这个参数,该参数在hadoop-default.xml里的缺省值是0.0.0.0:50070,应改为name node所在机器的ip地址。参考链接

11. 一些参考链接。

http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/
http://hi.baidu.com/shirdrn/blog/category/Hadoop
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/index.html
http://blog.ring.idv.tw/comment.ser?i=231

补充1:运行hadoop时出现:WARN hdfs.DFSClient: org.apache.hadoop.ipc.RemoteException:java.io.IOException: File <filename> could only be replicated to 0 nodes, instead of 1
解决:
是防火墙的问题,需要把防火墙关掉。
执行
$sudo ufw disable


分享到:
评论

相关推荐

    hadoop配置文件详解

    在Hadoop配置中,还涉及到NameNode高可用性(HA)的配置参数,如: - dfs.namenode.secondary.http-address:为Secondary NameNode指定一个用于管理任务的HTTP地址。 - dfs.nameservices:用逗号分隔的NameService...

    hadoop配置.zip

    这个压缩包文件“hadoop配置”应该包含了上述配置的示例或模板,用于指导Hadoop HA的配置。务必根据自己的集群环境进行适当的修改和调整。在实际部署时,还需要考虑其他的集群管理工具,如Ambari,以简化管理和监控...

    hadoop配置

    7. "hadoop配置.txt" - 可能是作者整理的一份Hadoop配置详解,包含了各种配置参数的含义和设置建议。 综上,这个压缩包提供的资料可以帮助读者深入了解Hadoop的配置、管理和维护,尤其是对于初次接触Hadoop或需要...

    Hadoop集群配置文件备份

    - **确定备份范围**:包括所有节点上的Hadoop配置目录,通常在`/etc/hadoop/`或自定义路径下。 - **执行备份**:可以使用`scp`或`rsync`等命令将配置文件从每个节点复制到安全的存储位置,如另一台服务器或云存储。 ...

    hadoop 默认配置大全

    此外,还有关于安全性和日志记录的配置,如`io.permissions.useCanonicalPath`和`log4j.logger.org.apache.hadoop`等。 接下来,我们转向`hdfs-default.xml`,它是HDFS(Hadoop Distributed File System)的配置...

    centos安装配置hadoop超详细过程.docx

    - 根据实际情况调整Hadoop配置文件中的内存参数,以适应不同规模的集群。 - 安装过程中遇到任何问题,请查阅官方文档或寻求社区帮助。 通过以上步骤,您可以在CentOS环境下成功安装和配置Hadoop集群,实现大数据的...

    伪分布式hadoop的配置信息

    在深入探讨伪分布式Hadoop配置之前,我们先来了解下何为伪分布式模式。伪分布式模式是指Hadoop集群的所有守护进程运行在同一台机器上,但它们仍然通过网络(通常是在不同的端口上)进行通信。这种模式非常适合测试和...

    Linux下Hadoop分布式配置和使用

    - **修改Hadoop配置文件**: - **hadoop-env.sh**: 设置JAVA_HOME环境变量指向已安装的JDK路径。 - **core-site.xml**: 配置Hadoop集群的核心参数,如HDFS的名称节点地址等。 - **hdfs-site.xml**: 配置HDFS...

    配置Eclipse连接Hadoop

    - 指定Hadoop配置文件的位置,如"core-site.xml"、"hdfs-site.xml"和"mapred-site.xml"。这些文件包含集群的配置参数,例如NameNode地址和JobTracker地址。 4. **测试Hadoop连接**: - 在配置完成后,尝试连接到...

    Hadoop的全部配置

    根据提供的信息,“Hadoop的全部配置”这一标题暗示着文章将覆盖Hadoop配置的所有方面,包括但不限于核心配置文件(如`core-site.xml`、`hdfs-site.xml`、`mapred-site.xml`和`yarn-site.xml`)以及其他相关的环境...

    单节点Hadoop配置.doc

    单节点Hadoop配置 在本教程中,我们将详细介绍如何在Ubuntu Linux上设置一个单节点Hadoop集群,使用Hadoop分布式文件系统(HDFS)。如果你正在寻找多节点集群的教程,请参阅其他相关资源。Hadoop是一个用Java编写的...

    spark1.3与hadoop2.6环境配置

    Spark 1.3 和 Hadoop 2.6 环境配置是大数据处理领域中的重要环节,它们共同构建了一个高效、可扩展的数据处理框架。Spark 是一个快速、通用且可扩展的大数据处理引擎,而 Hadoop 则是分布式存储和计算的基础平台。在...

    完全分布式Hadoop2.3安装与配置

    4. 配置对应 Hosts 记录,关闭 iptables 和 selinux。 安装过程包括以下步骤: 1. 安装 JDK。 2. 配置环境变量。 3. 下载 Hadoop 2.3.0。 4. 配置 Hadoop 集群。 5. 启动 Hadoop 集群。 注意:Hadoop 的安装和...

    hadoop的简单配置文件

    这个压缩包文件"had00p的简单配置文件"显然是为了帮助用户快速搭建和启动Hadoop环境。下面,我们将深入探讨Hadoop的核心组件、相关配置文件以及它们在云计算中的作用。 Hadoop由两个主要部分组成:Hadoop ...

    使用hadoop实现WordCount实验报告.docx

    实验报告的目的是详细记录使用Hadoop在Windows环境下实现WordCount应用的过程,包括环境配置、WordCount程序的实现以及实验结果分析。本实验旨在理解Hadoop分布式计算的基本原理,并熟悉Hadoop集群的搭建与管理。 #...

    Hadoop集群配置详细教程

    hadoop配置详细教程,涵盖了Hadoop集群配置从头到尾的所有细节部署,其中注意点已用红色标记,此文档曾用于企业Hadoop集群搭建教程,涵盖了 准备篇---配置篇----启动测试篇---问题篇,解决网络上Hadoop集群配置教程...

    HadoopAPI使用

    org.apache.hadoop.record 包定义了针对记录的 I/O API 类,以及一个记录描述语言翻译器,用于简化记录的序列化和反序列化操作。org.apache.hadoop.tools 包提供了一些通用的工具,用于简化 Hadoop 应用程序的开发和...

    Ubuntu20.04配置Hadoop.txt

    本教程是根据个人在UBUNTU虚拟机上安装配置Hadoop2.7.3的实际操作步骤一步步记录下来的,大部分指令操作的目的都加了注释以方便理解。(本教程很详细,如果还是遇到问题可以直接咨询楼主,不会让你的积分百花的)

    非root权限下配置linux hadoop集群自动SSH记录

    在没有root权限的情况下,普通用户也能配置SSH,实现自动化操作,这对于集群维护和管理尤其方便。本文将详细介绍如何在非root权限下配置Linux Hadoop集群的自动SSH。 首先,理解SSH的基本概念是必要的。SSH是一种...

Global site tag (gtag.js) - Google Analytics