首先说一些我的关于hadoop的配置吧:
- hadoop集群的主要配置文件有:
- hadoop-env.sh:配置hadoop运行所需的环境变量
- yarn-env.sh:配置yarn运行所需的环境变量
- core-site.xml:hadoop核心全局配置文件,可在其他配置文件中引用
- hdfs-site.xml:HDFS配置文件,继承core-site.xml配置文件
- mapred-site.xml:MapReduce配置文件,继承core-site.xml
- yarn-site.xml:yarn配置文件,继承core-site.xml
- 关于hadoop-env.sh
这个里面需要配置JAVA_HOME,也就是配置一下jdk的安装路径# The java implementation to use. export JAVA_HOME=/export/servers/jdk
- 关于core-site.xml的配置
这里配置了Hadoop集群的主节点位置,同时配置了hadoop的临时文件存储的目录(注意这个tmp:namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录,如果不清空tmp下的文件,就会导致datanode启动不成功)<configuration> <!-- 用于指定hadoop的文件系统 --> <property> <name>fs.defaultFS</name> <!-- 指定namenode在hadoop001这台机器上 --> <value>hdfs://hadoop001:9000</value> </property> <property> <!-- 配置Hadoop临时文件存储目录 --> <name>hadoop.tmp.dir</name> <value>/export/servers/hadoop-2.7.4/tmp</value> </property> </configuration>
- 关于hdfs-site.xml的配置
这里配置了HDFS数据块的副本数量,默认为3,此处不必配置,并且设置了secondarynamenode的主机是谁<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop002:50090</value> </property> </configuration>
- 关于mapred-site.xml的配置
这里的配置很简单,就是配置了我们hadoop的mapReduce的运行框架为yarn,下面就是关于yarn的配置<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- yarn-site.xml的配置
在这里,我们配置了yarn的主进程resourceManager运行的主机为hadoop001,并且配置了关于nodeManager运行的附属服务mapreduce_shuffle,只有配置这个才能正常运行MapReduce默认程序,后面分别是定义nodemanager上要提供正在运行的容器的全部可用资源大小,资源管理器中分配给每个容器请求的最小内存限制,nodemanager可以分配的cpu核数。configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop001</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</value> </property> </configuration>
中间关于hadoop集群配置出现的问题
-
问题一:配置完成后,namenode不能启动
解决方案:- 先是再次将主节点再次格式化,hdfs namenode -format,再次启动hadoop,无效。
- 查看日志:ulimit -a for user root,网上查询原因得到:datanamenode运行时打开文件数,达到系统最大限制当前最大限制,ulimit -n 65536,调整最大文件数再次启动hadoop,无效。
- 检查配置文件,发现core-site.xml中关于配置hadoop集群主节点位置,属性的名称写错了… 解决
-
问题二:解决namenode之后可以正常启动了,但是jps发现进程中没有nodemanager,启动之后就挂掉,就是nodemanager总是掉线
解决方案:修改配置文件yarn-site.xml<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>1</value> </property>
分别是定义nodemanager上要提供正在运行的容器的全部可用资源大小,资源管理器中分配给每个容器请求的最小内存限制,nodemanager可以分配的cpu核数, 问题解决。
-
问题三:修改了上述问题后,又格式化了一下hdfs的文件系统,重新启动hadoop竟然发现,datanode不能成功启动
解决方案:
问题原因:namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败。
解决:清空hadoop安装目录下的tmp目录,也就是之前配置文件中指定的tmp目录,重新启动tmp,注意:我是三台,所以三台机器都要清空tmp下的文件,成功解决。
坎坷的道路