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

在Hadoop 2.7伪分布式环境中,遇到运行C++程序时的内存不足问题。通过调整虚拟机内存至2GB,解决了首次测试hadoop自带wordcount程序的内存问题。但在运行自编译的WordCount程序时,再次出现内存不足错误。进一步检查发现yarn-env.sh配置错误,修复后重启服务,问题解决,成功运行C++程序。
摘要由CSDN通过智能技术生成

按上一篇步骤,伪分布式部署好之后,先执行一次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。再次执行测试,通过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值