Hadoop启动时出现Unrecognized option: -jvm

2019-03-28 13:58|来源: 网络

接着上一篇文章继续,当我终于解决了namenode -format的问题之后,本以为可以顺利的启动Hadoop了,但是却继而遇到了另外一个问题。

在执行bin/start-all.sh命令执行过程中,报告一下错误:

  1. MyHostName: Unrecognized option: -jvm  
  2. MyHostName:   Could not create the Java virtual machine.    

网上很多都是说内存分配不够导致的,我觉得问题不在这里,就没有尝试,不过这里还是把因为此问题而修改的代码,贴出来,至少是一种思路

/hadoop/conf/hadoop-env.sh中:

  1.  The maximum amount of heap to use, in MB. Default is 1000.
  2.  export HADOOP_HEAPSIZE=2000
继而在网上找到其他的解决方案就继续尝试,在bin/hadoop 脚本中有以下一段代码:

CLASS= 'org.apache.hadoop.hdfs.server.datanode.DataNode'
if [[ $EUID - eq 0 ]]; then
HADOOP_OPTS= "$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
else
HADOOP_OPTS= "$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"
fi

其中的

if [[ $EUID - eq 0 ]]; then
HADOOP_OPTS= "$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
 
可以在命令行中输入echo $EUID 可以看到其为0, 因为我是在root用户下跑的该程序,所以用户标识码EUID为0,

所以我就把这段代码的if else语句给去掉了,就只剩下,else语句中的那句话:

1
HADOOP_OPTS= "$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"
然后再运行start-all.sh发现运行成功了

执行jps可以得到namenode datanode tasktrack jobtrack等进程信息。

然后根据官网上的命令执行了mapreduce操作,至此伪分布式的hadoop程序就跑起来了。

至此结束了一天的工作,甚是开心,java的东西就是需要耐心的配置,所以这里给出记录以备后续之用。

相关问答

更多
  • 拉兹的回答是一个很好的开始,但是不够灵活,无法满足我的需求。 MultiStoreKeyManager显式检查自定义KeyManager,然后如果操作失败,则返回到jvm KeyManager。 我其实是想先检查jvm证书; 最好的解决方案应该能够处理这两种情况。 此外,答案无法提供工作的TrustManager。 我写了几个更灵活的类,CompositeX509KeyManager和CompositeX509TrustManager,它以任意顺序添加了对任意数量的密钥库的支持。 CompositeX509 ...
  • 使用-server,JVM将更积极地编译热点(即经常执行的部分代码),因此编译器将花费更多时间来执行此操作。 这不是问题,因为当您的进程长时间运行时(例如在服务器上),您只使用此选项。 使用-client时,完成的优化更轻,更快,因为当编译器在运行客户端应用程序时启动时,您不希望长时间停顿。 With -server the JVM will compile hotspots (i.e. parts of the code that are often executed) more aggressively ...
  • 实际上,安装的Windows-> Preferences-> Java->不会显示一个Eclipse运行的,而只是运行下面的默认JRE。 要查看一个Eclipse正在运行,请转到帮助 - >关于Eclipse平台 - >配置详细信息,并查找属性eclipse.vm。 例如: eclipse.vm = C:\ Program Files \ Java \ jre6 \ bin \ client \ jvm.dll Actually, Windows->Preferences->Java->installed ...
  • 总结链接后找到的信息:JVM分配由-Xms指定的数量,但操作系统通常不会分配真实的页面,直到需要。 因此,JVM分配由Xms指定的虚拟内存,但只需要根据需要分配物理内存。 您可以使用Sysinternals的Process Explorer,而不是在Windows上的任务管理器来看到这一点。 所以使用-Xms64M和-Xms512M有一个真正的区别。 但是我认为最重要的区别是你已经指出的那样:垃圾收集器如果真的需要512MB但是只能以64MB开始运行的频率会更高。 To summarize the info ...
  • 你可以尝试检查 HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java运行时环境 编辑注册表中的currentversion以指向正确的版本。 你的情况应该是1.8。 You could try checking HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment Edit the currentversion in the registry to point to the correct ver ...
  • 第二个“java”命令与运行Tomcat无关! 这只会启动第二个JVM。 如果要查看实际启动Tomcat JVM的参数,那么在Linux上使用Solaris上的ps eww -p 或pargs 。 顺便说一句,CATALINA_OPTS优先于JAVA_OPTS,后者用于tomcat安装启动的所有Java进程,CATALINA_OPTS仅用于主服务器进程。 The second "java" command has nothing to do with your running Tomc ...
  • 这是一个问题,你使用什么版本的elasticsearch。 如果fe 5.x然后在/ etc / elasticsearch /目录中你应该有文件jvm.options,其中可以设置堆。 另一个问题是用户正在盯着弹性搜索。 该用户必须设置导出JAVA_OPTIONS =“ - Xmx256M”但没有前缀_ It is a question what version of elasticsearch do you use. If f.e. 5.x then in /etc/elasticsearch/ dir ...
  • 问题似乎是无效的最大堆大小:-Xmx4g。 有关最大大小的更多信息,请查看此答案以设置64位操作系统上32位JVM的最大Java堆大小 The problem seems to be Invalid maximum heap size: -Xmx4g . Check this answer for more on max size to be set Maximum Java heap size of a 32-bit JVM on a 64-bit OS
  • 作为前两个选项 - 升级JVM并使用tzupdater - 是不可能的,您将不得不使用解决方法。 您可以使用user.timezone属性为JVM设置默认时区。 您需要将时区设置为距离实际时区一小时的区域,以补偿2014年的变化。 俄罗斯时区可用 Europe/Kaliningrad Europe/Moscow Europe/Samara Europe/Volgograd Asia/Yekaterinburg Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia ...
  • JVM很可能已经在服务器模式下运行。 对于Linux上的JDK 5/6,JVM将在服务器级机器上默认为服务器模式: “[...]服务器级机器的定义是具有至少2个CPU和至少2GB物理内存的机器。” 这里有记录( 这里是Java 6)。 没有说明FreeBsd上会发生什么,但我希望FreeBsd JVM只是服务器模式,或者它们在服务器级机器上默认为服务器模式,就像Linux一样。 It is quite possible that the JVM was already running in server m ...