第一个mapreduce

2018/03/10

最后面才是真正运行正确的地方。

自己写了一个简单的mapreduce脚本,直接放在本地上,运行很快,但是失败了。

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.9.0.jar  \
-input ss_data/* -output output -mapper test_map.py -reducer test_reduce.py
18/03/10 12:47:38 INFO mapreduce.Job: Task Id : attempt_1520648935308_0001_m_000004_0, Status : FAILED
Container launch failed for container_1520648935308_0001_01_000017 : 
org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container

上面是第一条错误信息
这部分是由于时间为同步引起,

clush -a "ntpdate ntp1.aliyun.com"

即可。


重新运行脚本,提示

ERROR streaming.StreamJob: Error Launching job : Output directory hdfs://node1:9000/user/root/output already exists
Streaming Command Failed!

需要重新设置输出目录


再次出现错误

Cannot run program "test_map.py": error=2, No such file or directory

怀疑是必须把这个脚本放置到HDFS上才能生效。
上传文件,还是失败。
增加 --files选项,制定的文件还是本机的路径

hadoop jar $HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-2.9.0.jar  \
 -files test_map.py,test_reduce.py -input ss_data/* -output output -mapper test_map.py -reducer test_reduce.py 

运行后出现新的错误:

18/03/10 13:07:25 INFO mapreduce.Job: Task Id : attempt_1520648935308_0004_m_000013_1, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1

节点刚刚还挂了一个!!这个暂时还不知道是为什么,重新去机器上启动了。
上面的错误是因为脚本编写错误了。
修改脚本后,在改下执行的权限,估计应该跟这个也有关系。毕竟他可能没那么只能去找python的执行文件。


程序能够运行,但是还是报错了。这个。。。

[2018-03-10 13:18:06.857]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f4e00000, 105381888, 0) failed; error='Cannot allocate memory' (errno=12)

看来可能是应为内存不够了。
但是出来的结果数据是正确的,


这两个脚本都很简单,只是挑出来某一行,然后直接打印了。
这个任务就跟grep一个字符串然后输出一样。
而且,速度的却不如这个直接grep快。
自己写了点其他的这种脚本,说实话,的却不如这个直接用shell脚本来的快。

当然你不能说这就不行,还是说,还是要找到其执行的优势在什么地方。
比如说,后期文件大的时候,一个文件很大,但是这个文件的每个分割都需要解析。最后还需要汇总,这样就展现它的能力了。
这里速度虽然跟不上,是因为大部分时间都在这个调度上。

你可能感兴趣的:(第一个mapreduce)