您的位置:首页 > 运维架构

nutch on hadoop 遇到 ls: 无法访问data/segments: 没有那个文件或目录

2014-04-09 10:46 513 查看
将nutch部署在hadoop上运行

bin/crawl hdfs://localhost:9000/user/hadoop/urls data http://localhost:8983/solr/ 1


在generator完成之后,提示:

ls: 无法访问data/segments/: 没有那个文件或目录
Operating on segment :
Fetching :


打开HDFS查看,发现明明有这个目录存在。

百思不得其解

在各种百度,google无解之后,想到了查看nutch的源码。

查看了一下crawl脚本的文件内容:

# determines whether mode based on presence of job file

mode=local
if [ -f ../*nutch-*.job ]; then
mode=distributed
fi

......

if [ $mode = "local" ]; then
SEGMENT=`ls $CRAWL_PATH/segments/ | sort -n | tail -n 1`
else
SEGMENT=`hadoop fs -ls $CRAWL_PATH/segments/ | grep segments |  sed -e "s/\//\\n/g" | egrep 20[0-9]+ | sort -n | tail -n 1`
fi

echo "Operating on segment : $SEGMENT"


试了一下

hadoop fs -ls $CRAWL_PATH/segments/ | grep segments |  sed -e "s/\//\\n/g" | egrep 20[0-9]+ | sort -n | tail -n 1
在终端上运行结果正确。然后我就怀疑是模式就选错了mode,即mode的值是local而非distributed。

于是我在脚本中加了

echo $mode


于是发现...输出了local

再认真研读脚本选择mode的代码

# determines whether mode based on presence of job file

mode=local
if [ -f ../*nutch-*.job ]; then
mode=distributed
fi
发现,mode选择distributed的条件是,父目录中有 nutch .job 这个文件。
仔细一看自己的命令...

bin/crawl ....

应该是用 ./crawl 才能让脚本正常检测到 nutch .job那个文件。

进入bin,并将命令改成

./crawl hdfs://localhost:9000/user/hadoop/urls data http://localhost:8983/solr/ 1


即可正常运行。

Linux不会,不熟,真可怕...(脚本写得差,真可怕...脚本都不输出一些关键信息来帮助程序员判断。哎...)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hadoop nutch
相关文章推荐