hadoop分布式集群基本配置:从功能角度(一)

189 views

对于hadoop集群的基本配置,最好的文档永远是官方文档。但是跟着官方文档配置,大多数人无法从功能角度去理解。以致在下一次配置的时候,我们还是要去看官方文档,如果我们从功能角度去理解的话,那我们在第二次配置的时候,就能胸有成竹了。

hadoop主要包括四个大的模块,分别是:

  • common 公用的基础组件
  • hdfs hadoop分布式文件系统(hadoop distributed file system),主要负责文件管理。
  • yarn 分布式的资源管理系统,主要负责资源管理和资源分配,可以说是大数据的操作系统。
  • mapreduce 基于map-reduce编程范式的计算引擎

对于基本的hadoop分布式集群的配置(没有高可用),我们需要配置的文件有site-core.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个文件。

对于整个hadoop系统来说,我们主要需要的功能是hdfs、yarn、MapReduce、日志这四个功能。

hdfs配置

对于hdfs来说,主要配置的属性需求如下:

  • hadoop需要知道我们使用的文件系统提供的服务接口,方便其他服务进行调用
  • hadoop需要了解namenode、secondarynamenode、datanode分别在哪些主机上运行
  • 文件系统的临时文件目录在哪?这个属于可配可不配,需要配置的原因是因为默认的属性防止的文件在系统的临时文件下,这样的话主机重启可能导致文件丢失。

第一,整个系统需要知道我们使用的是哪个文件系统,对于分布式的文件系统来说,我们大多使用的是hdfs,但是我们也可以所以使用其他我们自己设计的分布式文件系统。所以我们需要对整个系统所使用的文件属性进行配置,配置文件为core-site.xml, 配置属性如下:

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://master01.derfei.top:9000</value>
</property>

对于hdfs来说,hdfs的结构里面主要有三个角色,分别是:

  • namenode
  • secondarynamenode
  • datanode
    为了让系统知道我们指定的namenode是哪个,我们第一个需要配置的属性就来了,就是:
<property>
      <name>dfs.namenode.http-address</name>
      <value>master01.derfei.top:50070</value>
</property>

为了让系统知道secondarynamenode是哪个,我们第二个需要配置的属性就来了,就是:

<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>master01.derfei.top:50090</value>
</property>

为了让系统知道datanode是哪个,我们需要配置slavers文件:

master01.derfei.top
node01.derfei.top
node02.derfei.top
node03.derfei.top

OK,配置好上面三个选项hdfs系统已经对每个角色是谁已经有很好的了解了。下一个问题,文件系统管理的文件目录是哪个?对于一个文件系统我们需要配置哪个目录是属于它管辖的(它可以把信息放在目录下),如果没有设置的话,默认的属性会把目录设置在系统的/tmp目录下,这个目录是系统的临时文件存放的地方,当你机器重启的时候这个目录下的文件可能就消失了,所以我们需要配置这个属性,但是属性却不在hdfs-site.xml文件里面,而是在hadoop-core.xml里面配置,因为对于这个属性不是对hdfs来说的,而是对整个文件系统来说的,所以不管你使用的是哪个文件系统,你都需要配置这个属性,为了解耦,放在了core-site.xml文件里面。第四个需要配置的属性在core-site.xml里面,属性信息如下所示:

<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/modules/hadoop-2.7.6/tmp</value>
</property>

对于hdfs模块,从基本的角色配置,到临时文件存放位置,这些基本的属性配置好了,hdfs模块的属性就已经配置好了。

yarn配置

对于yarn来说,主要的配置的属性需求有:

  • resourcemanager运行在哪些主机上?
  • nodemanager运行在哪些主机上?
  • 我该怎么与上层的计算框架(如mapreduce)怎么配合?

对于resoucemanager的配置,我们需要配置yarn-site.xml文件,属性如下所示:

<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master01.derfei.top</value>
</property>

对于nodemanager的配置,其实已经在slaver里面配置了,所以这里已经无需配置了。

第三步,该怎么配合?其实是指在map 和 reduce过程中,我们还需要经过一个阶段,这个阶段需要需要一个公共的服务来完成,这个服务将同一个key的value值构成一个list。一般来说,使用mapreduce计算框架的话,需要配置yarn-site.xml文件属性如下:

<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

mapreduce配置

计算框架需要知道我们使用的是哪个操作系统,也就是我们使用了哪个资源管理系统系统,毕竟在整个系统中,计算框架和资源管理框架的配合是很紧密的,所以对于mapreduce来说,我们需要配置需求只有一个:

  • 我们使用的是哪个资源管理系统?

对于这个需求,我们需要配置mapred-site.xml文件,这个文件在/etc/hadoop/目录下是没有的,我们需要将模板文件重命名,配置的属性如下:

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

日志服务配置

日志也可以作为一种资源来讲,这里配置的日志是yarn和mapreduce任务执行的日志。对于hadoop整个系统的日志保存在安装目录默认的log目录下。每个map和reduce任务执行会产生日志,但是这些日志分布在不同节点上,如果我们要阅读这些日志我们还需要将这些日志收集起来,但是手动收集显然不是一个明智的选择,作为资源管理框架的yarn来进行收集显然是再合适不过了。还好yarn提供了日志聚集的服务。所以对于日志服务服务配置的属性需求有:

  • yarn上的日志聚集
  • mapreduce上的日志服务器提供日志给yarn收集

对于yarn上的日志聚集我们需要配置yanr-site.xml的属性如下:

<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>4320000</value>
</property>

第一个属性配置的是否进行日志聚集,第二个属性配置的是日志保存的时间,毕竟运行过程中日志是很多的,如果我们都进行保存的话,日志爆炸,占用很多的磁盘空间。

对于mapreduce提供的日志,它是通过日志服务器来进行的,map和reduce任务执行过程中产生的日志都会放到historyserver上,所以我们不仅需要进行配置属性,还需要另外通过mapreduce开始jobhistoryserver服务,对于mapred-site.xml我们需要配置的属性如下:

<property>
        <name>mapreduce.jobhistory.address</name>
        <value>master01.derfei.top:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master01.derfei.top:19888</value>
</property>

第一个属性配置了日志服务器在哪个端口提供服务,第二个属性配置了webapp上提供给外界开放的端口。

有了这两个属性配置还不过,我们还需要在开启过程中使用sbin/mr-jobhistory-daemon.sh start historyserver来开启日志服务器。

到这里为止,一个”刚刚好”的分布式的hadoop配置好了,但是这样属性都是针对通用的配置来说的,对于具体的生产环境,我们进行参数的调优,从CPU数量、内存等资源属性到具体的角色分配都是可以进行调优的。

ps: 我配置的简单的分布式hadoop集群的三个文件,记得在配置hadoop之前要配置好jdk。
hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
      <name>dfs.namenode.http-address</name>
      <value>master01.derfei.top:50070</value>
    </property>

    <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>master01.derfei.top:50090</value>
    </property>
    
    <property>
      <name>dfs.replication</name>
      <value>1</value>
    </property>
</configuration>

yarn-site.xml

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master01.derfei.top</value>
    </property>

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>4320000</value>
    </property>
    
    <property>
        <name>yarn.log.server.url</name>
        <value>http://master01.derfei.top:19888/jobhistory/logs/</value>
    </property>

</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master01.derfei.top:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master01.derfei.top:19888</value>
    </property>
</configuration>

slavers

master01.derfei.top
node01.derfei.top
node02.derfei.top
Rating: 5.0/5. From 1 vote.
Please wait...