当前位置:   article > 正文

Hadoop(一) 完全分布式搭建_hadoop完全分布式搭建

hadoop完全分布式搭建

HDFS完全分布式搭建

hadoop运行模式:本地模式、伪分布式模式、完全分布式模式、高可用的完全分布式模式。

4.1 规划

首先将四台虚拟机均拍摄一个快照:hadoop完全分布式Pre。如果安装失败,那么很方便进行重置。

node1node2node3node4
NameNodeSecondaryNameNode
DataNode-1DataNode-2DataNode-3

注意:NameNode和SecondaryNameNode都比较消耗内存,所以不要将它们安装在同一台服务器上。

##4.2 前置环境

###4.2.1 免密钥设置

首先将node1和node2拍摄快照,并还原到初始化快照上。

由于后续hadoop等需要四台服务器之间互相均可以免密登录,所以本次直接配置四台服务器的彼此之间的免密登录。配置思路如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HsCaakul-1655972241798)(…/…/…/…/百战3.0/百战3.0新录制/05-第四阶段:Zookeeper分布式协调服务框架/文档/image/mianmi.jpg)]

a、 首先在四台服务器上都要执行:

ssh-keygen  -t  dsa  -P  ''  -f  ~/.ssh/id_dsa
  • 1

b、在node1上将node1 的公钥拷贝到authorized_keys中:

cat ~/.ssh/id_dsa.pub  >>  ~/.ssh/authorized_keys
  • 1

将该文件拷贝给node2:

scp ~/.ssh/authorized_keys  node2:/root/.ssh/
  • 1

c、在node2中将node2的公钥追加到authorized_keys中:

cat ~/.ssh/id_dsa.pub  >>  ~/.ssh/authorized_keys
  • 1

将该文件拷贝给node3:

scp ~/.ssh/authorized_keys  node3:/root/.ssh/
  • 1

d、在node3中将node3的公钥追加到authorized_keys中:

cat ~/.ssh/id_dsa.pub  >>  ~/.ssh/authorized_keys
  • 1

将该文件拷贝给node4:

scp ~/.ssh/authorized_keys  node4:/root/.ssh/
  • 1

e、在node4中将node4的公钥追加到authorized_keys中:

cat ~/.ssh/id_dsa.pub  >>  ~/.ssh/authorized_keys
  • 1

将该文件拷贝给node1、node2、node3:

scp ~/.ssh/authorized_keys  node1:/root/.ssh/
scp ~/.ssh/authorized_keys  node2:/root/.ssh/
scp ~/.ssh/authorized_keys  node3:/root/.ssh/
  • 1
  • 2
  • 3

f.测试是否实现了免密登录

ssh node[1、2、3、4]
exit # 退出
  • 1
  • 2

###4.2.2 JDK安装环境变量配置

node1-node4上目录的创建目录/opt/apps

mkdir /opt/apps
  • 1

将jdk-8u221-linux-x64.rpm上传到node1/opt/apps

将/opt/apps下的jdk-8u221-linux-x64.rpm scp到node2、node3、node4的对应目录中

clear
scp jdk-8u221-linux-x64.rpm node3:/opt/apps
scp jdk-8u221-linux-x64.rpm node4:/opt/apps
  • 1
  • 2
  • 3

在node1、node2、node3、node4上安装jdk并配置profile文件

rpm -ivh jdk-8u221-linux-x64.rpm
  • 1

node1上修改环境变量

vim /etc/profile

export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将node1的/etc/profile拷贝到node2、node3、node4上并执行 source /etc/profile

scp /etc/profile node[234]:`pwd`
  • 1

##4.3 集群搭建实战

4.3.1 hadoop安装包相关

Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

将hadoop安装文件上传到node1的/opt/apps目录下,并解压到/opt目录下

#创建一个用户,默认会创建一个同名的用户组
[root@node1 ~]# useradd itbaizhan
#解压
[root@node1 ~]# cd /opt/apps
[root@node1 apps]# tar -zxvf  hadoop-3.1.3.tar.gz  -C  /opt
  • 1
  • 2
  • 3
  • 4
  • 5

重要目录

(base) [root@node1 /]# cd /opt/apps/
(base) [root@node1 apps]# ll
总用量 852364
drwxr-xr-x. 28 root root      4096 6月  27 17:15 anaconda3
-rw-r--r--.  1 root root 570853747 6月  27 01:13 Anaconda3-Linux-x86_64.sh
drwxr-xr-x. 10 thc  thc        161 6月  26 00:08 hadoop-3.1.3
drwxr-xr-x.  2 root root       279 6月  25 22:58 mysql
-rw-r--r--.  1 root root    985600 6月  25 22:59 mysql-connector-java-5.1.37.jar
drwxrwxrwx. 15 root root       235 6月  27 20:08 spark-3.2.1
-rw-r--r--.  1 root root 300971569 6月  27 17:39 spark-3.2.1-bin-hadoop3.2.tgz
(base) [root@node1 apps]# cd hadoop-3.1.3/
(base) [root@node1 hadoop-3.1.3]# ll
总用量 180
drwxr-xr-x. 2 thc  thc     183 9月  12 2019 bin
drwxr-xr-x. 3 thc  thc      20 9月  12 2019 etc
drwxr-xr-x. 2 thc  thc     106 9月  12 2019 include
drwxr-xr-x. 3 thc  thc      20 9月  12 2019 lib
drwxr-xr-x. 4 thc  thc     288 9月  12 2019 libexec
-rw-rw-r--. 1 thc  thc  147145 9月   4 2019 LICENSE.txt
drwxr-xr-x. 2 root root   4096 11月  5 22:20 logs
-rw-rw-r--. 1 thc  thc   21867 9月   4 2019 NOTICE.txt
-rw-rw-r--. 1 thc  thc    1366 9月   4 2019 README.txt
drwxr-xr-x. 3 thc  thc    4096 6月  26 23:28 sbin
drwxr-xr-x. 4 thc  thc      31 9月  12 2019 share
(base) [root@node1 hadoop-3.1.3]# ^C

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • bin目录:存放对Hadoop相关服务(hadoop,hdfs,yarn)进行操作的脚本
  • etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
  • lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
  • sbin目录:存放启动或停止Hadoop相关服务的脚本
  • share目录:存放Hadoop的依赖jar包、文档、和官方案例

配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

  • 默认配置文件:
要获取的默认文件文件存放在Hadoop的jar包中的位置
[core-default.xml]hadoop-common-3.1.3.jar/ core-default.xml
[hdfs-default.xml]hadoop-hdfs-3.1.3.jar/ hdfs-default.xml
  • 自定义配置文件:

core-site.xml、hdfs-site.xml两个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

文件作用
hadoop-env.sh找jdk环境变量
workers(hadoop2.x中的名称slaves )指定datanode节点
core-site.xml涉及到的参数如果没有配置,找对应的默认文件中的配置
hdfs-site.xml涉及到的参数如果没有配置,找对应的默认文件中的配置
  • 常用端口号说明
DaemonAppHadoop2Hadoop3
NameNode PortHadoop HDFS NameNode8020 / 90009820
Hadoop HDFS NameNode HTTP UI500709870
Secondary NameNode PortSecondary NameNode500919869
Secondary NameNode HTTP UI500909868
DataNode PortHadoop HDFS DataNode IPC500209867
Hadoop HDFS DataNode500109866
Hadoop HDFS DataNode HTTP UI500759864

4.3.2 HDFS集群配置

  • node1-4关闭和禁用防火墙
#检查防火墙的状态
[root@node1 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
#关闭防火墙
[root@node1 ~]# systemctl stop firewalld
#禁用防火墙
[root@node1 ~]# systemctl disable firewalld
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 环境变量配置
#node1上修改环境变量
export HADOOP_HOME=/opt/hadoop-3.1.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#Node2上修改环境变量:
export HADOOP_HOME=/opt/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
#node1-2上让配置文件生效:
source /etc/profile
#将node2的/etc/profile拷贝到node3、node4上并执行
scp /etc/profile node[34]:`pwd`
source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • hadoop-env.sh配置
#进入$HADOOP_HOME/etc/hadoop
cd /opt/hadoop-3.1.3/etc/hadoop/
#修改hadoop-env.sh
export JAVA_HOME=/usr/java/default
  • 1
  • 2
  • 3
  • 4

由于通过SSH远程启动进程的时候默认不会加载/etc/profile设置,JAVA_HOME变量就加载不到,需要手动指定。

  • workers配置

修改workers(hadoop2.x为slaves)文件,指定datanode的位置

node2
node3
node4
  • 1
  • 2
  • 3

注意:该文件中不能出现空行,添加的内容结尾也不能出现空格。

  • core-site.xml配置
<configuration>
 <!--用来指定hdfs的老大,namenode的地址-->
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://node1:9820</value>
 </property>
 <!-- 指定hadoop数据的存储目录-->
 <property>
  <name>hadoop.tmp.dir</name>
  <value>/var/thc/hadoop/full</value>
 </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • hdfs-site.xml配置
<configuration>
  <!-- 指定NameNode web端访问地址 -->
  <property>
     <name>dfs.namenode.http-address</name>
     <value>node1:9870</value>
  </property>
  <!-- 指定secondary namenode web端访问地址 -->
  <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>node2:9868</value>
  </property>
  <!-- 指定每个block块的副本数,默认为3 -->
  <property>
     <name>dfs.replication</name>
     <value>2</value>
  </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 拷贝到node2-node4上
#先将之打成压缩包
[root@node1 opt]# tar -zcvf hadoop-3.1.3.tar.gz hadoop-3.1.3/
#将/opt/hadoop-3.1.3.tar.gz scp到node2、node3、node4的对应目录中
[root@node1 opt]# scp  hadoop-3.1.3.tar.gz node2:/opt
[root@node1 opt]# scp  hadoop-3.1.3.tar.gz node3:/opt
[root@node1 opt]# scp  hadoop-3.1.3.tar.gz node4:/opt

#node2、node3、node4分别解压
tar -zxvf hadoop-3.1.3.tar.gz
#node1、node2、node3、node4测试
[root@node4 opt]# had #然后按下 Tab 制表符,能够自动补全为hadoop,说明环境变量是好的。
#获取通过hadoop version命令测试
[root@node4 opt]# hadoop version
Hadoop 3.1.3
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r ba631c436b806728f8ec2f54ab1e289526c90579
Compiled by ztang on 2019-09-12T02:47Z
Compiled with protoc 2.5.0
From source with checksum ec785077c385118ac91aadde5ec9799
This command was run using /opt/hadoop-3.1.3/share/hadoop/common/hadoop-common-3.1.3.jar

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

###4.3.3 格式化、启动和测试

  • 格式化
#在node1上执行:
[root@node1 ~]# hdfs namenode  -format
[root@node1 ~]# ll /var/itbaizhan/hadoop/full/dfs/name/current/
总用量 16
-rw-r--r-- 1 root root 391 10月  8 20:36 fsimage_0000000000000000000
-rw-r--r-- 1 root root  62 10月  8 20:36 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root   2 10月  8 20:36 seen_txid
-rw-r--r-- 1 root root 216 10月  8 20:36 VERSION
#在node1-4四个节点上执行jps,jps作用显示当前系统中的java进程
[root@node1 ~]# jps
2037 Jps
[root@node2 ~]# jps
1981 Jps
[root@node3 ~]# jps
1979 Jps
[root@node4 ~]# jps
1974 Jps
#通过观察并没有发现除了jps之外并没有其它的java进程。
#
[root@node1 ~]# vim  /var/itbaizhan/hadoop/full/dfs/name/current/VERSION
#Sat Oct 09 10:42:49 CST 2021
namespaceID=1536048782
clusterID=CID-7ecb999c-ef5a-4396-bdc7-c9a741a797c4 #集群id
cTime=1633747369798
storageType=NAME_NODE #角色为NameNode
blockpoolID=BP-1438277808-192.168.20.101-1633747369798#本次格式化后块池的id
layoutVersion=-64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 启动HDFS
#在node1启动HDFS集群
[root@node1 ~]# start-dfs.sh
#启动时出现如下错误信息
Starting namenodes on [node1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [node2]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
#解决办法,就是修改start-dfs.sh,添加以下内容
[root@node1 ~]# vim /opt/hadoop-3.1.3/sbin/start-dfs.sh 
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
#查看四个节点上对应的角色是否启动
[root@node1 ~]# jps
3947 Jps
3534 NameNode
[root@node2 ~]# jps
3386 Jps
3307 SecondaryNameNode
3148 DataNode
[root@node3 ~]# jps
3303 Jps
3144 DataNode
[root@node4 ~]# jps
3310 Jps
3151 DataNode

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • Web端查看HDFS的NameNode相关信息

在浏览器地址栏中输入:http://192.168.20.101:9870,查看HDFS上存储的数据信息,以及DataNode节点的相关信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QsloXIcT-1655972241798)(image/hdfs-page.jpg)]

DataNodes相关信息页面:http://192.168.20.101:9870/dfshealth.html#tab-datanode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mrqRahe5-1655972241799)(image/hdfs-dn.jpg)]

HDFS文件系统目录列表信息页:

在这里插入图片描述


  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/455317?site
推荐阅读
相关标签
  

闽ICP备14008679号