我想在linux内核上运行nutch,我已经以root用户身份登录,我已经设置了所有的环境变量和nutch文件设置。我创建了一个 url.txt 文件,其中包含要抓取的 url,当我尝试使用以下命令运行 nutch 时,
bin/nutch crawl urls -dir pra
它产生以下异常。
crawl started in: pra
rootUrlDir = urls
threads = 10
depth = 5
Injector: starting
Injector: crawlDb: pra/crawldb
Injector: urlDir: urls
Injector: Converting injected urls to crawl db entries.
Exception in thread "main" java.io.IOException: Failed to get the current user's information.
at org.apache.hadoop.mapred.JobClient.getUGI(JobClient.java:717)
at org.apache.hadoop.mapred.JobClient.configureCommandLineOptions(JobClient.java:592)
at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:788)
at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1142)
at org.apache.nutch.crawl.Injector.inject(Injector.java:160)
at org.apache.nutch.crawl.Crawl.main(Crawl.java:113)
Caused by: javax.security.auth.login.LoginException: Login failed: Cannot run program "whoami": java.io.IOException: error=12, Cannot allocate memory
at org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:250)
at org.apache.hadoop.security.UnixUserGroupInformation.login(UnixUserGroupInformation.java:275)
at org.apache.hadoop.mapred.JobClient.getUGI(JobClient.java:715)
... 5 more
服务器有足够的空间来运行任何 java 应用程序。我已经附上了静态数据..
total used free
Mem: 524320 194632 329688
-/+ buffers/cache: 194632 329688
Swap: 2475680 0 2475680
Total: 3000000 194632 2805368
nutch的内存空间够吗?请有人帮助我,我是 linux 内核和 nutch 的新手。提前致谢。
读取输出:
看起来您没有足够的 RAM 或没有交换文件/分区。
在 Java 中调用可执行文件(如 whoami)需要首先制作 Java 进程的完整副本。您需要将最大堆大小 (-Xmx256m) 降低到您可能在 RAM 中同时拥有两个副本的位置。
在操作系统的 32 位安装中,JVM(Java 虚拟机)无法处理大于 4GB 的内存。如果你想使用 JVM 占用 4GB 以上,那么你必须使用 64 位版本的 JVM,这也意味着操作系统也应该是 64 位版本。
我想这就是您收到该错误的原因。您有 5GB 内存,这可能是问题所在。您应该告诉您的应用程序仅使用 75% 的可用内存或尝试将 RAM 减少到 4GB 并检查。我在使用 Java 作为 Web 界面的 Zimbra 消息传递解决方案中遇到了同样的问题。
您的服务器可能已禁用 /proc/sys/vm/overcommit_memory。在没有过度使用的情况下,“fork”系统调用要求您的服务器有足够的 RAM 或交换 Java 进程的完整第二个副本。这可能是很多 RAM。