首先说一些我的关于hadoop的配置吧:

  • hadoop集群的主要配置文件有:
  1. hadoop-env.sh:配置hadoop运行所需的环境变量
  2. yarn-env.sh:配置yarn运行所需的环境变量
  3. core-site.xml:hadoop核心全局配置文件,可在其他配置文件中引用
  4. hdfs-site.xml:HDFS配置文件,继承core-site.xml配置文件
  5. mapred-site.xml:MapReduce配置文件,继承core-site.xml
  6. 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的配置
<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的配置
<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的配置
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  • yarn-site.xml的配置
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不能启动
    解决方案:
  1. 先是再次将主节点再次格式化,hdfs namenode -format,再次启动hadoop,无效。
  2. 查看日志:ulimit -a for user root,网上查询原因得到:datanamenode运行时打开文件数,达到系统最大限制当前最大限制,ulimit -n 65536,调整最大文件数再次启动hadoop,无效。
  3. 检查配置文件,发现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下的文件,成功解决。

坎坷的道路