hadoop2.8集群集群跑任务求助

博客分类:
Hadoop集群配置
建立一个三台服务器的hadoop集群,三台服务器ip和对应的主机名分别为:
192.168.0.100:shirleyren100,
192.168.0.101:shirleyren101,
192.168.0.102:shirleyren102,
其中192.168.0.100为namenode,另外两台为datanode。在三台服务器上创建hadoop账号
1,在namenode上创建hadoop账号的无密码公钥方式登录
ssh-keygen \-t dsa \-P '' \-f \~/.ssh/id_dsa
将namenode的上生成的id_dsa.pub和id_dsa文件复制到datanode上,并将id_dsa.pub 文件追加到datanode 的authorized_keys 内,以保证各台服务器之间的正常通信
2,在各台服务上安装sun jdk
为防止不必要的错误,请尽量保证各服务器上的JDK版本和安装路径的一致,并将JAVA安装路径放到环境变量中 /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22
export JRE_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22/jre
3,安装hadoop
在namenode上安装hadoop, 将下载的压缩包解压到安装目录下即可,附件中是我配置中修改的conf/下的文件
把hadoop 的安装路径添加到环境变量/etc/profile 中
export HADOOP_HOME=/home/hadoop/hadoop/hadoop-0.20.203.0
export HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-0.20.203.0/conf
4,在conf/hadoop-env.sh中配置JAVA路径
在此文件中要把java的安装路径配置进去,即在该文件中加上以下代码
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22
5,配置conf/core-site.xml, conf/hdfs-site.xml 及conf/mapred-site.xml三个文件
以下代码为最简单的配置方式,其他的属性可以根据自己的情况自行配置
core-site.xml:
&configuration&
&property&
&name&hadoop.tmp.dir&/name&
&value&/home/hadoop/hadoop/tmp&/value&
&description&A base for other temporary directories.&/description&
&/property&
&property&
&name&fs.default.name&/name&
&value&hdfs://shirleyren100:9000&/value&
&/property&
&/configuration&
hdfs-site.xml
replication 默认为3,建议将replicatio设置为小于或等于datanode的数量
&configuration&
&property&
&name&dfs.name.dir&/name&
&value&/home/hadoop/hadoop/name&/value&
&/property&
&property&
&name&dfs.data.dir&/name&
&value&/home/hadoop/hadoop/data&/value&
&/property&
&property&
&name&dfs.replication&/name&
&value&2&/value&
&/property&
&/configuration&
mapred-site.xml:
&configuration&
&property&
&name&mapred.job.tracker&/name&
&value&shirleyren100:9001&/value&
&/property&
&/configuration&
5,配置datanode
将以上配置好的hadoop包直接复制到datanode上即可
6,配置namenode的conf/masters 和conf/slaves 文件
shirleyren100
shirleyren101
shirleyren102
此时所有的配置就完成了,下面启动以下试试看
首次启动的时候需要首先格式化文件系统,进入到/home/hadoop/hadoop/hadoop-0.20.203.0路径下执行以下命令
bin/hadoop namenode -format
之后在namenode上执行
bin/start-all.sh
此时可以使用jps命令在namenode和datanode上查看已启动的进程,
在namenode上看到的是
23550 JobTracker
23215 NameNode
23462 SecondaryNameNode
在datanode上看到的是
3972 DataNode
4063 TaskTracker
同样可以在web下查看,在浏览器输入以下地址http://192.168.0.100:50070/
也可以执行几个hadoop的命令,验证hadoop是否正确启动
1,bin/hadoop dfs -mkdir input
/*创建名为input的目录*/
2,bin/hadoop dfs -put test.txt input/
/*将文件test.txt上传到input目录下*/
3,bin/hadoop dfs -ls
/*查看input目录下的文件*/
需要注意的几点
1,在第4步的配置文件中,一定使用主机域名而不是ip地址;
2,建议各台服务器的JDK和Hadoop的安装路径一直,这样就可以避免由于路径的问题,在不同服务器上频繁修改配置文件;
3,replication的值建议修改为小于或等于datanode数量;
4,建议hadoop.tmp.dir的路径不要设置在/tmp下,这是因为linux系统重启后会将tmp目录删除,此时运行hadoop会报 java.io.IOException:
could only be replicated to 0 nodes, instead of 1的异常,需要重新format;
5,每次重新格式化后一定要删除hadoop tmp目录下的所有文件;
常见问题总结
1,启动时报错 java.net.UnknownHostException
结果:不能正常启动
原因:通过localhost.localdomain根本无法映射到一个IP地址
解决办法:查看/etc/hosts,将主机名添加到hosts文件
2,启动时报错 java.io.IOException:
could only be replicated to 0 nodes, instead of 1
此时,首先检查防火墙是否关闭,是否对各节点的通信产生了影响,
第二,可以检查namenode和datanode中namespaceID的值是否相同,在不同的情况下会造成该问题,修改为相同的值后,重启该节点;
第三,将SAFEMODE设置为OFF状态;
hadoop dfsadmin -safemode leave
此外,还需检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.1.1或localhost。
将SAFEMODE设置为OFF状态可以有两种方法
执行上面的语句可以将safemode强制置为off状态,或者在hdfs_site.xml配置文件中增加下面代码,将safemode的设为较小的值,此种方法避免了在执行hadoop过程中经常性遇到错误Name node is in safe mode而导致的需强制将safemode置为off。
&property&
&name&dfs.safemode.threshold.pct&/name&
&value&0.95f&/value&
&/property&
3,ip和域名解析的问题
也会造成 could only be replicated to 0 nodes, instead of 1的问题
此时要检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.1.1或localhost。
4,报错:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
执行任务时,任务卡死在reduce上,不执行
原因:任务最后会在最后将所有的reduce task复制到一台机器上,做最后总的reduce,此时需要ip和主机域名的配置正确
解决方法:将各节点的ip和主机域名配置正确,不能使用127.0.1.1或localhost,使用内网ip可加快处理速度
5,Hive执行时报错 java.lang.OutOfMemoryError: GC overhead limit exceeded
原因:这个是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。
解决办法:,关闭该功能,可以添加JVM的启动参数来限制使用内存:在mapred-site.xml 里新增项:mapred.child.java.opts 内容:-XX:-UseGCOverheadLimit
如何杀掉当前正在执行的hadoop任务
1,使用hadoop帐号登录namenode
2,cd hadoop/hadoop-0.20.203.0
3,执行下面命令
bin/hadoop job -list
会列出当前所有的正在执行hadoop任务
SchedulingInfo
4,找到需要被删除的任务id,执行下面命令
bin/hadoop job -kill job__0512
下载次数: 1
shirley.ren
浏览: 32378 次
来自: 北京
zcc 写道按照你的方法设置了,设置成其他的任何编码,shel ...
按照你的方法设置了,设置成其他的任何编码,shell中“没有任 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
今天在hadoop集群上跑MapReduce程序,遇到的一些问题和解决的方法,希望对大家有帮助!1.从HDFS上传下载文件到第一种错误:
Exception inthread"main"java.lang.IllegalArgumentException:
Wrong FS: hdfs://192.168.1.11:9000/usr/yujing/wordcount,
expected: hdfs://master:9000
这个很多人都遇到过,不管是在ubuntu还是windows系统中,在连接集群的时候,不能直接使用hdfs://192.168.1.11:9000,要在hosts文件中添加192.168.1.11的映射,有人可能不知道windows下hosts文件在哪?C:\Windows\System32\drivers\etc\hosts(这个是隐藏文件你可以显示出来),在host文件中添加192.168.1.11 master就可以了。第二种错误:
org.apache.hadoop.ipc.RemoteException:
org.apache.hadoop.hdfs.server.namenode.SafeModeException:
Cannot create file/usr/yujing/wordcount. Name node is in
safe mode.
The ratio of reported blocks 0.0000 has not reached the
threshold 0.9990. Safe mode will be turned off
automatically.
这个错误出现的原因是client对集群中HDFS的操作没有权限解决办法:(1)在代码中加上一行代码conf.set("dfs.permissions","false");(2)在集群配置文件hdfs-site.xmlproperty&
&name&dfs.permissions&/name&
&value&false&/value&&/property&然后重启1.对于hadoop提供的wordcount例子第一种错误:
12/02/10 14:24:59 INFO ipc.Client: Retrying connect to
server: localhost/127.0.0.1:9000. Already tried 0 time(s).
12/02/10 14:25:01 INFO ipc.Client: Retrying connect to
当你在代码中明明写的是集群的IP,但是它连接就是localhost,这是因为mapreduce默认连接的是localhost解决办法:conf.set("fs.default.name", "hdfs://master:9000");conf.set("hadoop.job.user", "yujing");conf.set("mapred.job.tracker", "master:9001");这样JobClient就会把Job任务提交到hadoop集群中第二种错误:
Exception in thread "main"
org.apache.hadoop.mapreduce.lib.input.InvalidInputException
: Input path does not exist:
hdfs://master:9000/user/yujing/D:/qq.txt
这种错误是因为向集群中提交job任务是文件的输入路径必须要是HDFS上的文件路径,输出路径也要是HDFS上的文件第三种错误:
2/02/10 14:52:36 WARN mapred.JobClient: No job jar file
User classes may not be found. See JobConf(Class) or
JobConf#setJar(String).
12/02/10 14:52:36 INFO mapred.JobClient: Cleaning up the
staging area hdfs://master:9000/tmp/hadoop-
hadoop/mapred/staging/yujing/.staging/job__0293
以上的错误是由于mapreduce的输出路径已存在,必须先删除掉那个文件正确的运行结果:
12/02/10 14:59:35 INFO input.FileInputFormat: Total input
paths to process : 1
12/02/10 14:59:35 INFO mapred.JobClient: Running job:
12/02/10 14:59:36 INFO mapred.JobClient:
map 0% reduce 0%
12/02/10 14:59:48 INFO mapred.JobClient:
map 100% reduce
12/02/10 15:00:04 INFO mapred.JobClient:
map 100% reduce
12/02/10 15:00:09 INFO mapred.JobClient: Job complete:
12/02/10 15:00:09 INFO mapred.JobClient: Counters: 25
2.自己写的mapReduce程序第一种错误:
java.lang.RuntimeException:
java.lang.ClassNotFoundException: cn.hadoop.InvertedIndex
$InvertedIndexMapper
at org.apache.hadoop.conf.Configuration.getClass
(Configuration.java:866)
org.apache.hadoop.mapreduce.JobContext.getMapperClass
(JobContext.java:195)
第一种解决方法:这是由于及集群中没有我们提交的jar包,所以namenode不知道怎么执行我们的job任务,所以就会报空指针异常错误,所以要自己打jar提交给集群。解决方法: 所以先给自己的程序打成jar包,然后放到工程的根目录下,然后在代码中添加JobConf conf=new JobConf();conf.setJar("pr.jar");这样就可以了,这个错误困扰了我们很久。第二种解决方法:使用eclipse插件解决,有很多人刚刚开始的时候使用插件老是会出不来想要的结果,这个可能和eclipse或者是插件包的版本有关,有的版本的eclipse不兼容hadoop插件,还有就是hadoop-eclipse-plugin-0.20.203.0.jar的插件里面少了一些包,要自己进行手动修改,这个网上又怎么修改的方法,关于在eclipse安装插件就是要多试试就可以了,当插件完成后,然后点击run hadoop,插件内部会打包你的程序提交到集群上。
第三种解决方法:自己在程序中打包自己的mapreduce程序,然后提交job任务,这方面这部分代码在eclipse插件中也是实现了的,我们这里就是要用代码实现插件的功能。第二种错误:
2/02/10 14:59:35 INFO input.FileInputFormat: Total input
paths to process : 1
12/02/10 14:59:35 INFO mapred.JobClient: Running job:
12/02/10 14:59:36 INFO mapred.JobClient:
map 0% reduce 0%
12/02/10 14:59:48 INFO mapred.JobClient:
map 100% reduce
这种错误出现的原因是mapreduce默认的reduce个数是1个,所以如果当map的个数很大时,reduce过程迟迟不会进行,解决方法是在代码中添加job.setNumReduceTasks(4);设置reduced的个数。
浏览 25794
浏览: 73776 次
来自: 长沙
非常好,很强大,谢谢lz 帮解决了我的问题
在ClassNotFoundExceptiond第二个解决办法 ...
编码问题如何解决
远程访问的时候,client是非集群里的机器,就会存在权限问题 ...
每一个程序员都懂得代码!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'当前位置: &&>> 阅读正文
View: 8,297
Author: Dong
- 359,967 阅 - 273,614 阅 - 261,862 阅 - 247,109 阅 - 245,229 阅 - 243,154 阅 - 223,098 阅 - 214,592 阅 - 211,833 阅 - 204,386 阅
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '
collapsItems['collapsArch-'] = '匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。15:48 提问
Hadoop HA 集群 提交mr任务不成功
Job job_0_0001 failed with state FAILED due to:
Application application_0_0001 failed 2 times due to Error launching appattempt_0_. Got exception: java.net.ConnectException: Call From localhost.localdomain/127.0.0.1 to localhost:43660 failed on connection exception: java.net.ConnectException: C For more details see:
其他一切正常,就是无法执行mr程序
推断是将任务提交到本地了而不是集群
其他相关推荐

我要回帖

更多关于 hadoop分布式集群搭建 的文章

 

随机推荐