Hadoop集群搭建(本人亲测可以)

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

添加主机名称

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

hostnamectl set-hostname master    

查看主机名称

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

vim /etc/hosts

添加映射

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

三、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

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路径

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

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文件系统

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

地址:http://192.168.253.128:50070

Ⅱ. 查看YARN页面

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

地址:http://192.168.253.128:8088

Ⅲ. 查看SecondaryNameNode页面

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

地址:http://192.168.253.128:9001

 

注意:打开 SecondaryNamenode information管理页面,没有任何信息提示。Hadoop查看Secondary Namenode管理页面无信息的解决办法,参考:https://blog.csdn.net/adsl624153/article/details/100040310,感谢 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();
},

 

八.测试集群(此部分为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页面查看文件在这里插入图片描述

Ⅱ. 测试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:输出文件地址

在这里插入图片描述

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页面查看结果文件
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值