赞
踩
hadoop运行模式:本地模式、伪分布式模式、完全分布式模式、高可用的完全分布式模式。
首先将四台虚拟机均拍摄一个快照:hadoop完全分布式Pre。如果安装失败,那么很方便进行重置。
node1 | node2 | node3 | node4 |
---|---|---|---|
NameNode | SecondaryNameNode | ||
DataNode-1 | DataNode-2 | DataNode-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
b、在node1上将node1 的公钥拷贝到authorized_keys中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将该文件拷贝给node2:
scp ~/.ssh/authorized_keys node2:/root/.ssh/
c、在node2中将node2的公钥追加到authorized_keys中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将该文件拷贝给node3:
scp ~/.ssh/authorized_keys node3:/root/.ssh/
d、在node3中将node3的公钥追加到authorized_keys中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将该文件拷贝给node4:
scp ~/.ssh/authorized_keys node4:/root/.ssh/
e、在node4中将node4的公钥追加到authorized_keys中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将该文件拷贝给node1、node2、node3:
scp ~/.ssh/authorized_keys node1:/root/.ssh/
scp ~/.ssh/authorized_keys node2:/root/.ssh/
scp ~/.ssh/authorized_keys node3:/root/.ssh/
f.测试是否实现了免密登录
ssh node[1、2、3、4]
exit # 退出
###4.2.2 JDK安装环境变量配置
node1-node4上目录的创建目录/opt/apps
mkdir /opt/apps
将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
在node1、node2、node3、node4上安装jdk并配置profile文件
rpm -ivh jdk-8u221-linux-x64.rpm
node1上修改环境变量
vim /etc/profile
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
将node1的/etc/profile拷贝到node2、node3、node4上并执行 source /etc/profile
scp /etc/profile node[234]:`pwd`
##4.3 集群搭建实战
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
重要目录
(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
配置文件说明
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 | 涉及到的参数如果没有配置,找对应的默认文件中的配置 |
Daemon | App | Hadoop2 | Hadoop3 |
---|---|---|---|
NameNode Port | Hadoop HDFS NameNode | 8020 / 9000 | 9820 |
Hadoop HDFS NameNode HTTP UI | 50070 | 9870 | |
Secondary NameNode Port | Secondary NameNode | 50091 | 9869 |
Secondary NameNode HTTP UI | 50090 | 9868 | |
DataNode Port | Hadoop HDFS DataNode IPC | 50020 | 9867 |
Hadoop HDFS DataNode | 50010 | 9866 | |
Hadoop HDFS DataNode HTTP UI | 50075 | 9864 |
#检查防火墙的状态
[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
#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
#进入$HADOOP_HOME/etc/hadoop
cd /opt/hadoop-3.1.3/etc/hadoop/
#修改hadoop-env.sh
export JAVA_HOME=/usr/java/default
由于通过SSH远程启动进程的时候默认不会加载/etc/profile设置,JAVA_HOME变量就加载不到,需要手动指定。
修改workers(hadoop2.x为slaves)文件,指定datanode的位置
node2
node3
node4
注意:该文件中不能出现空行,添加的内容结尾也不能出现空格。
<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>
<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>
#先将之打成压缩包 [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
###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
#在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
在浏览器地址栏中输入:http://192.168.20.101:9870,查看HDFS上存储的数据信息,以及DataNode节点的相关信息。
DataNodes相关信息页面:http://192.168.20.101:9870/dfshealth.html#tab-datanode
HDFS文件系统目录列表信息页:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。