1 节点简介

image.png
假设这里有16台用于存储数据的服务器,很多人往这16个节点里面存数据,很久以后忘了自己存在哪里怎么办?? 一台一台遍历,显然有点傻。解决方法就是拿出来一台存储一些索引数据,记录其他节点的状态,这个就当做主节点(NameNode),其他的节点用来存储数据叫做(dataNode)。

hadoop有着很明显的主从结构
主节点:NameNode用来尾骨集群的目录树结构,同时对外提供服务。dataNode就是用来存储数据的

我们在02里面部署了三台linux服务器
他们的集群规划是

  1. 集群规划:
  2. +--------------+---------------------+
  3. | Node | Applications |
  4. +--------------+---------------------+
  5. | qianfeng01 | NameNode | qianfeng01 是主节点namenode 也存储数据datanode
  6. | | DataNode | 然后就是ResourceManagerNodeManagere后面yarn学到
  7. | | ResourceManager |
  8. | | NodeManagere |
  9. +--------------+---------------------+
  10. | qianfeng02 | SecondaryNameNode | qianfeng02 这台机子 数据节点,nodemanager
  11. | | DataNode | SecondaryNameNode 后面学到
  12. | | NodeManager |
  13. +--------------+---------------------+
  14. | qianfeng03 | DataNode |qianfeng03 就是一个普通的数据节点datanodeNodeManager
  15. | | NodeManager |
  16. +--------------+---------------------+

2 开始编辑hadoop的配置文件

这里我们主要进行编辑的文件有

  1. 我们需要通过配置若干配置文件,来实现Hadoop集群的配置信息。需要配置的文件有:
  2. hadoop-env.sh
  3. yarn-env.sh
  4. core-site.xml
  5. hdfs-site.xml
  6. mapred-site.xml
  7. yarn-site.xml
  8. Hadoop安装完成后,会在$HADOOP_HOME/share路径下,
  9. 有若干个*-default.xml文件,这些文件中记录了默认的配置信息。
  10. 同时,在代码中,我们也可以设置Hadoop的配置信息。
  11. 三个位置里面都可以对hadoop进行配置,三个地方的优先权是
  12. 这些位置配置的Hadoop,优先级为: 代码设置 > *-site.xml > *-default.xml

首先我们进到qianfeng01里面的Hadoop的安装目录里面去/usr/local/hadoop。
可以看到hadoop里面有这么几个文件夹
image.png

所有的配置文件都是放在hadoop的etc里面的 进到etc里面你就会发现Hadoop的etc里面只有一个文件夹就是hadoop,在进到hadoop里面去,现在我们的位置就是 /usr/local/hadoop/etc/hadoop
里面有很多文件,我们可能要对下面这些进行编辑
image.png

2.1 编辑core-site.xml

  1. [root@qianfeng01 ~]# cd $HADOOP_HOME/etc/hadoop/ 就是进到放置hadoop配置文件的文件夹
  2. [root@qianfeng01 hadoop]# vi core-site.xml 开始编辑配置文件
  3. <configuration>
  4. <!-- hdfs的地址名称:schame,ip,port-->
  5. <!-- 在Hadoop1.x的版本中,默认使用的端口是9000。在Hadoop2.x的版本中,默认使用端口是8020 -->
  6. <property>
  7. <name>fs.defaultFS</name>
  8. <value>hdfs://qianfeng01:8020</value>
  9. </property>
  10. <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
  11. <property>
  12. <name>hadoop.tmp.dir</name>
  13. <value>/usr/local/hadoop/tmp</value>
  14. </property>
  15. </configuration>

直接复制到文件里面就好了,但是我的linux里面中文乱码image.png

2.2 配置hdfs-site.xml

在这个文件里面我们主要就是配置块的副本数,在hdfs里面是以块为单位进行数据的存储的,块是有副本的机制的,我可以在别的节点上面存储我的副本,(可能是为了避免单点故障防止数据的丢失),其他的配置都是hdfs这个文件的默认配置。

首先我们还是要先进到hadoop这个安装目录下面,在hadoop这个文件夹里面有个一etc我们进到etc里面以后有一个hadoop。再进到 hadoop里面,这里面就有很多hadoop的配置文件。

[root@qianfeng01 hadoop]# vi hdfs-site.xml
<configuration>
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <!-- 块的副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 块的大小(128M),下面的单位是字节-->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>qianfeng02:50090</value>
    </property>
      <!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>qianfeng01:50070</value>
    </property>  
</configuration>

我们一开始查看hdfs-site.xml这个文件的时候,里面的配置是空的,我们要将上面文件里面的配置直接复制放进去。
image.png
使用vi 命令编辑这个hdfs-site.xml 文件,编辑之后再重新查看一下这个文件,可以看到已经配置好了,但是因为我们的虚拟机中文没有支持的太好,中文出现了乱码。
image.png

2.3 配置mapred-site.xml文件

首先还是到/usr/local/hadoop这个文件夹下面,然后进到里面的etc/hadoop/ 里面就存放着hadoop的配置文件。

[root@qianfeng01 hadoop]# cp mapred-site.xml.template  mapred-site.xml
[root@qianfeng01 hadoop]# vi mapred-site.xml
<configuration>
    <!-- 指定mapreduce使用yarn资源管理器-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置作业历史服务器的地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>qianfeng01:10020</value>
    </property>
    <!-- 配置作业历史服务器的http地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>qianfeng01:19888</value>
    </property>
</configuration>

我们先看一下配置之前的mapred-site.xml文件,但是进到文件夹以后我们发现并没有mapred-site.xml这个文件mapred-site.xml.template这个文件,这个mapred-site.xml.template文件是一个模板文件,我们吧这个模板复制一下并且命名为mapred-site.xml 命令:cp mapred-site.xml.template
image.png
执行命令之后,我们再查看一下文件
image.png
可以看到已经多了一个 mapred-site.xml文件了

开始输入vi mapred-site.xml对这个文件进行编辑
image.png
配置以后就可以了,这里的配置的解释我们会在后期学期yarn的时候详细介绍。

2.4 配置yarn-site.xml文件

[root@qianfeng01 hadoop]# vi yarn-site.xml
<configuration>
    <!-- 指定yarn的shuffle技术-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定resourcemanager的主机名-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>qianfeng01</value>
    </property> 
    <!--下面的可选-->
    <!--指定shuffle对应的类 -->
    <property> 
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
    </property>

    <!--配置resourcemanager的内部通讯地址-->
    <property>
    <name>yarn.resourcemanager.address</name>
    <value>qianfeng01:8032</value>
    </property>

    <!--配置resourcemanager的scheduler的内部通讯地址-->
    <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>qianfeng01:8030</value>
    </property>

    <!--配置resoucemanager的资源调度的内部通讯地址-->
    <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>qianfeng01:8031</value>
    </property>

    <!--配置resourcemanager的管理员的内部通讯地址-->
    <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>qianfeng01:8033</value>
    </property>

    <!--配置resourcemanager的web ui 的监控页面-->
    <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>qianfeng01:8088</value>
    </property>
</configuration>

我们先查看一下这个文件里面的数据
image.png
里面其实也是什么配置都没有,我们开始添加配置
及时上面的代码配置进去就可以了。

2.5 配置hadoop-env.sh文件

[root@qianfeng01 hadoop]# vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8
.........

还是进到/usr/local/hadoop/etc/hadoop里面看一下hadoop-env.sh文件这个文件里面的内容还是比较多的。
image.png

我们主要就是在这个文件夹里面配置一下我们jdk的环境变量
image.png

2.6 配置yarn-env.sh文件

[root@qianfeng01 hadoop]# vi yarn-env.sh
.........
# some Java parameters
export JAVA_HOME=/usr/local/jdk
if [ "$JAVA_HOME" != "" ]; then
  #echo "run java in $JAVA_HOME"
  JAVA_HOME=/usr/local/jdk1.8
fi
.........

还是进到/usr/local/hadoop/etc/hadoop里面看一下hadoop-env.sh文件这个文件里面的内容还是比较多的。
image.png
一会我们要在这里设置上我们自己的jdk的位置
image.png

2.7 slaves文件

此文件用于指定datanode守护进程所在的机器节点主机名 ,我们三台机器都是datanode所以就在主节点里面指定一下这三台机器,其实就是配置从节点

[root@qianfeng01 hadoop]# vi slaves
qianfeng01
qianfeng02
qianfeng03

还是进到/usr/local/hadoop/etc/hadoop里面看一下hadoop-env.sh文件这个文件里面的内容还是比较多的。
image.png

先查看下slaves
cat slaves
image.png

这样我们就编辑好了
image.png

做好以后我们cd ..
回到上一级其实就是 /usr/local/hadoop/etc ,在etc下面就是hadoop文件夹,文件夹里面就是我们刚刚已近配置多的所有节点了。我们要将这个hadoop文件夹,分发给qianfeng02和qianfeng03,同步一下文件
同步的命令,发给qianfeng02 : scp -r hadoop/ qianfeng02:$PWD
里面的 qianfeng02:$PWD表示的就是qianfeng02的当前位置( /usr/local/hadoop/etc)
同步的命令,发给qianfeng03 : scp -r hadoop/ qianfeng03:$PWD
里面的 qianfeng03:$PWD表示的就是qianfeng02的当前位置( /usr/local/hadoop/etc)

image.png
这样就全都发过去了。