如何在 Linux 内核上运行 nutch?

如何在 Linux 内核上运行 nutch?

我想在 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 的新手。提前致谢。

答案1

读取输出:

无法运行程序“whoami”:java.io.IOException:错误=12,无法分配内存

看起来您没有足够的 RAM 或没有交换文件/分区。

答案2

在 Java 中调用可执行文件(如 whoami)需要先复制整个 Java 进程。您需要降低最大堆大小 (-Xmx256m),以便可以同时在 RAM 中复制两个副本。

答案3

在 32 位操作系统安装中,JVM(Java 虚拟机)无法处理大于 4GB 的内存。如果您想使用 JVM 占用超过 4GB 的内存,那么您必须使用 64 位版本的 JVM,这也意味着操作系统也应该是 64 位版本。
我猜这就是您收到该错误的原因。您有 5GB 内存,这可能是问题所在。您应该告诉您的应用程序仅使用 75% 的可用内存,或者尝试将 RAM 减少到 4GB 并进行检查。我在使用 Java 作为 Web 界面的 Zimbra Messaging 解决方案中遇到了同样的问题。

答案4

您的服务器可能已禁用 /proc/sys/vm/overcommit_memory。如果没有过度使用,则“fork”系统调用要求您的服务器具有足够的 RAM 或交换空间,以便完整复制 Java 进程的第二份副本。这可能需要大量的 RAM。

相关内容