hadoop2.7伪分布式模式运行C++程序

来源:互联网 发布:深圳软件基地 编辑:程序博客网 时间:2024/04/28 03:31

按上一篇步骤,伪分布式部署好之后,先执行一次hadoop自带的测试程序,确认是否可以正常运行

1、创建输入目录hadoop fs -mkdir /input

2、创建输入文件t,内容为1 2 4 5 6,上传到hdfs,hadoop fs -put t /input

3、进入hadoop安装目录,执行命令

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input/t /output


第一次一直卡在 mapreduce.Job:  map 0% reduce 0%,磁盘占用率100%,后来查看logs/userlogs下面的日志,日志的目录结构为

usrlogs

 ----application_********

--------container_*******

------------stderr stdout syslog

其中stderr包含了关键错误,查看此文件,发现最后有一行

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f9ad8fce000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)

确定是虚拟机分配的内存不足,将虚拟机内存由原来的1G调整为2G


再次执行测试命令

又出现以下错误

16/02/18 10:36:54 INFO client.RMProxy: Connecting to ResourceManager at hadoop1/188.168.1.180:8032
16/02/18 10:36:58 INFO input.FileInputFormat: Total input paths to process : 1
16/02/18 10:36:59 INFO mapreduce.JobSubmitter: number of splits:1
16/02/18 10:36:59 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1455762878791_0001
16/02/18 10:37:01 INFO impl.YarnClientImpl: Submitted application application_1455762878791_0001
16/02/18 10:37:01 INFO mapreduce.Job: The url to track the job: http://hadoop1:8088/proxy/application_1455762878791_0001/
16/02/18 10:37:01 INFO mapreduce.Job: Running job: job_1455762878791_0001
16/02/18 10:37:35 INFO mapreduce.Job: Job job_1455762878791_0001 running in uber mode : false
16/02/18 10:37:35 INFO mapreduce.Job:  map 0% reduce 0%
16/02/18 10:37:53 INFO mapreduce.Job:  map 100% reduce 0%
16/02/18 10:37:53 INFO mapreduce.Job: Task Id : attempt_1455762878791_0001_m_000000_0, Status : FAILED
Exception from container-launch.
Container id: container_1455762878791_0001_01_000002
Exit code: 1
Stack trace: ExitCodeException exitCode=1: 
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)
        at org.apache.hadoop.util.Shell.run(Shell.java:456)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)
        at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)




Container exited with a non-zero exit code 1

查看错误日志,一是也没有头绪,从网上查看其他人的配置过程,发现自己在上一篇的配置过程中,忘了修改yarn-env.sh,修改如下

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.8.0_71


再次重启集群服务,执行测试命令,通过。


下面将自己用C++编写的WordCount程序上传到hdfs

hadoop fs -put wordcount /bin/wordcount

启动程序

hadoop pipes -D hadoop.pipes.java.recordreader=true -D hadoop.pipes.java.recordwriter=true -D mapred.job.name=wordcount -input /input/t -output output -program /bin/wordcount

得到如下错误

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f7780000, 40894464, 0) failed; error='Cannot allocate memory' (errno=12)

看来还是内存不足,继续加大内存到2.5G。再次执行测试,通过。

0 0
原创粉丝点击