JDK版本:jdk1.8.0_271

Hadoop版本:2.10.1

三台虚拟机搭建Hadoop集群

主节点:192.168.253.128 

从节点1:192.168.253.129 

从节点2:193.168.253.130
 

 

关闭防火墙:
      systemctl stop firewalld.service
      禁用防火墙:systemctl disable firewalld.service
     查看防火墙状态 systemctl status firewalld.service

一、修改主机名称

方式一、修改配置文件 

vim /etc/hostname

添加主机名称

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop

方式二、通过命令行,永久生效

hostnamectl set-hostname master    

查看主机名称

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_02

二、修改ip映射(三台机器都需要如下三行配置)

vim /etc/hosts

添加映射

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_03

配置完成后使用ping命令检查这3个机器是否相互ping得通(互相检查一下)。

hadoop主从节点怎么区分 配置hadoop集群主节点_hdfs_04

三、3台机器互相配置免密登录

1.在机器A输入下面命令,三次回车后,就在机器A产生公钥和私钥
ssh-keygen
2.在机器A的/root/.ssh目录下执行下面命令,就复制到了机器B上
ssh-copy-id 机器B的ip
3.这样就可以SSH免密到机器B上了,想要相互免密,就相互按照上述步骤

如下为真实操作:

1)主节点执行命令

ssh-keygen

ssh-copy-id 192.168.253.128

ssh-copy-id 192.168.253.129

ssh-copy-id 192.168.253.130

2)在从节点1执行如下命令

ssh-keygen

ssh-copy-id 192.168.253.128

ssh-copy-id 192.168.253.129

ssh-copy-id 192.168.253.130

3)在从节点2执行命令

ssh-keygen

ssh-copy-id 192.168.253.128

ssh-copy-id 192.168.253.129

ssh-copy-id 192.168.253.130

完成之后通过  ssh 用户@ip 来确定是否可以免密登录

注意:每台机子上也要对本机设置免密,否则开启/关闭自己服务的时候还是需要输入密码

四、安装jdk和hadoop

解压jdk至路径

/usr/local/htsoft/jdk1.8.0_271

解压hadoop至路径

/usr/local/htsoft/hadoop-2.10.1

1、配置环境变量(路径改成自己的真实路径)

export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271
export HADOOP_HOME=/usr/local/htsoft/hadoop-2.10.1
export JRE_HOME=/usr/local/htsoft/jdk1.8.0_271/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$HADOOP_HOME/bin

2、hadoop路径下创建文件

创建 /usr/local/htsoft/hadoop-2.10.1/hdfs

创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/tmp

创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/data

创建 /usr/local/htsoft/hadoop-2.10.1/hdfs/name

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_05

3、修改 /usr/local/htsoft/hadoop-2.10.1/etc/hadoop/目录下的8个配置文件

slaves    core-site.xml    hdfs-site.xml     mapred-site.xml     yarn-site.xml     hadoop-env.sh   yarn-env.sh    mapred-env.sh

1) 修改core-site.xml

在<configuration>节点内加入配置:

<!-- 指定Hadoop运行时产生文件的存储目录(自定义即可) --> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property>

2)修改hadoop-env.sh

查看本地JAVA_HOME路径

hadoop主从节点怎么区分 配置hadoop集群主节点_hdfs_06

export   JAVA_HOME=${JAVA_HOME}

改为自己的JDK路径

export   JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271

3)修改hdfs-site.xml

在<configuration>节点内加入配置:

<!-- 指定HDFS副本的数量(默认为3,可自定义)此数值需要和slaves配置文件中配置的数量保持一致,如果不一致,比如此处配置值为2,而slaves中配置了3行,则nameNode所在节点不会生成datanode.-->
  <property>
 <name>dfs.replication</name>
   <value>3</value>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/name</value>
   <final>true</final>
</property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/usr/local/htsoft/hadoop-2.10.1/hdfs/data</value>
   <final>true</final>
 </property>
<!-- 指定Hadoop辅助名称节点主机配置(SecondaryNameNode) -->
 <property>
  <name>dfs.namenode.secondary.http-address</name>
   <value>master:9001</value>
 </property>
 <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>dfs.permissions</name>
   <value>false</value>
 </property>

4)新建并且修改mapred-site.xml

该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,然后改名为mapred-site.xml,命令是:

cp mapred-site.xml.template mapred-site.xml

修改这个新建的mapred-site.xml文件,在<configuration>节点内加入配置:

<property>
   <name>mapred.job.tracker</name>
   <value>master:49001</value>
</property>
<property>
      <name>mapred.local.dir</name>
       <value>/root/hadoop/var</value>
</property>
<property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
</property>

5)修改slaves文件

修改/usr/local/htsoft/hadoop-2.10.1/etc/hadoop/slaves文件,将里面的localhost删除,添加如下内容:

此节点中表示datanode和nodemanager的位置(如下配置表示master、slave1、slave2三个节点均有datanode和nodemanager,而仅master节点有namenode)

master
slave1
slave2

说明:这个只需要修改hadoop01主机,另外两台不需要修改!!!使用ip地址也可以

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

s6)修改yarn-site.xml文件

修改/usr/local/htsoft/hadoop-2.10.1/etc/hadoop/yarn-site.xml文件, 在<configuration>节点内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是因为机器不行):

<!-- 指定YARN的ResourceManager的地址 -->
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
   </property>
   <property>
        <description>The address of the applications manager interface in the RM.</description>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8032</value>
   </property>
   <property>
        <description>The address of the scheduler interface.</description>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:8030</value>
   </property>
   <property>
        <description>The http address of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:8088</value>
   </property>
   <property>
        <description>The https adddress of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>${yarn.resourcemanager.hostname}:8090</value>
   </property>
   <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>${yarn.resourcemanager.hostname}:8031</value>
   </property>
   <property>
        <description>The address of the RM admin interface.</description>
        <name>yarn.resourcemanager.admin.address</name>
        <value>${yarn.resourcemanager.hostname}:8033</value>
   </property>
<!-- Reducer获取数据的方式 -->
   <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
   </property>
   <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value>
        <discription>每个节点可用内存,单位MB,默认8182MB</discription>
   </property>
   <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>2.1</value>
   </property>
   <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
</property>
   <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>

7)修改yarn-env.sh

#export JAVA_HOME=XXXXXXXX

前面的#解开,并改成自己的地址

export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271

8) 修改mapred-env.sh

#export JAVA_HOME=XXXXXXXX

改成

export JAVA_HOME=/usr/local/htsoft/jdk1.8.0_271

 

五、配置从节点

从节点1:192.168.253.129

从节点2:192.168.253.130

以上两个节点为从节点。

2个从节点需要配置:

1、防火墙关闭

2、hostname的设置

3、host映射的配置

4、免密登录的设置

5、环境变量(jdk和hadoop)

如上1~5步骤按照之前的讲解配置即可

6、将master节点已经配置好的hadoop-2.10.1项目压缩并发送到从节点1和从节点2

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop_07

hadoop主从节点怎么区分 配置hadoop集群主节点_hdfs_08

六、启动hadoop

1.在namenode上执行初始化

首次启动hadoop需要先在 Master 节点执行 NameNode 的格式化,# 首次运行需要执行初始化,之后不需要

因为master是namenode,所以只需要在master所在服务器格式化nameNode

[root@master]# cd   /usr/local/htsoft/hadoop-2.10.1/bin
[root@master bin]#  ./hadoop  namenode  -format

2.执行启动命令

进入sbin目录

./start-all.sh

3.从节点上的2个服务无需启动。主节点启动时,会扫描 etc/hadoop/slaves 配置文件。根据配置来启动对应服务器上的datanode和nodemanager

特别注意:

NameNode不要随便格式化,会清空所有数据。如果格式化异常可能会导致 NameNode 和 DataNode 节点 VERSION 不一致,导致集群启动失败。

如果一定要格式化,格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 所有主从节点的data 和 log 数据)

七、Web端查看启动情况

Ⅰ. 查看HDFS文件系统

hadoop主从节点怎么区分 配置hadoop集群主节点_JAVA_09

根据core-site.xml文件中的配置。得知HDFS的namenode所在节点在master,故地址如下

地址:http://192.168.253.128:50070

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop_10

Ⅱ. 查看YARN页面

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_11

根据yarn-site.xml文件配置,得知yarn在master节点,故地址如下

地址:http://192.168.253.128:8088

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_12

Ⅲ. 查看SecondaryNameNode页面

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_13

根据hdfs-site.xml文件。得知SecondaryNameNode所在节点在master

地址:http://192.168.253.128:9001

 

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop_14

注意:打开 SecondaryNamenode information管理页面,没有任何信息提示。Hadoop查看Secondary Namenode管理页面无信息的解决办法,参考:,感谢 loetca 博主的文章帮助

此处摘录一下:

1.打开浏览器的开发者工具的Console,发现如下提示:

dfs-dust.js:61 Uncaught ReferenceError: moment is not defined
 at Object.date_tostring (dfs-dust.js:61)
 at Object.dust.filter (dust-full-2.0.0.min.js:1)
 at Chunk.reference (dust-full-2.0.0.min.js:1)
 at body_1 (eval at dust.loadSource (dust-full-2.0.0.min.js:1), :1:572)
 at Chunk.section (dust-full-2.0.0.min.js:1)
 at body_0 (eval at dust.loadSource (dust-full-2.0.0.min.js:1), :1:77)
 at Object.dust.load (dust-full-2.0.0.min.js:1)
 at Object.dust.render (dust-full-2.0.0.min.js:1)
 at render (snn.js:61)
 at Object.finished_request (snn.js:38)



2.解决办法:
进入:hadoop/share/hadoop/hdfs/webapps/static/dfs-dust.js 修改
查看 dfs-dust.js 的第61行

'date_tostring' : function (v) {
	return moment(Number(v)).format('ddd MMM DD HH:mm:ss ZZ YYYY');
},

修改成

'date_tostring' : function (v) {
	return new Date(Number(v)).toLocaleString();
},

hadoop主从节点怎么区分 配置hadoop集群主节点_hdfs_15

 

八.测试集群(此部分为copy其他博客)

Ⅰ. 测试HDFS文件系统

1.在HDFS文件系统上创建一个input文件夹
 [root@hadoop201 hadoop]# hdfs dfs -mkdir -p /input
  
 2.编辑 text.txt,写入如下内容
 Hadoop Hive Apache
 James Mary
 Hadoop Mary
  
 3.将 text.txt 上传到 hdfs /input 目录下
 [root@hadoop201 hadoop]# hdfs dfs -put test.txt /input
  
 4.查看上传的文件
 [root@hadoop201 hadoop]# hdfs dfs -ls /input
 Found 1 items
 -rw-r–r-- 3 root supergroup 42 2020-10-29 11:18 /input/test.txt
  
 5.查看上传的文件内容
 [root@hadoop201 hadoop]# hdfs dfs -cat /input/test.txt
 Hadoop Hive Apache
 James Mary
 Hadoop Mary
  
 6.HDFS页面查看文件

hadoop主从节点怎么区分 配置hadoop集群主节点_JAVA_16

Ⅱ. 测试YARN调度系统

  Hadoop 为我们预装了一些测试案例供我们使用,位于 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar 目录下,现在来运行 MapReduce 程序,对 HDFS 上传的 test.txt 进行 wordcount 计算

1.执行示例程序
[root@hadoop201 hadoop]# hadoop jar /usr/local/env/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /input /output

参数介绍:
1.hadoop :已经配置环境变量,可以在任意目录执行(该命令位于 /usr/local/env/hadoop/bin 目录下)
2. jar:执行jar包
3.hadoop-mapreduce-examples-2.10.1.jar:示例程序jar包
4.wordcount:wordcount主程序入口
5./input:输入文件地址
6./output:输出文件地址

hadoop主从节点怎么区分 配置hadoop集群主节点_hadoop主从节点怎么区分_17

1.查看计算完成,文件输出地址
[root@hadoop201 hadoop]# hdfs dfs -ls /output
 Found 2 items
 -rw-r–r-- 3 root supergroup 0 2020-10-29 11:27 /output/_SUCCESS
 -rw-r–r-- 3 root supergroup 40 2020-10-29 11:27 /output/part-r-00000  
2.查看计算结果
 [
root@hadoop201 hadoop]# hdfs dfs -cat /output/part-r-00000
 Apache 1
 Hadoop 2
 Hive 1
 James 1
 Mary 2  
 3.HDFS页面查看结果文件

hadoop主从节点怎么区分 配置hadoop集群主节点_JAVA_18