伪分布式模式也是只需要一台机器,但是与本地模式的不同,伪分布式使用的是分布式的思想,具有完整的分布式文件存储和分布式计算的思想。只不过在进行存储和计算的时候涉及到的相关的守护进程都运行在同一台机器上,都是独立的Java进程。因而称为伪分布式集群。比本地模式多了代码调试功能,允许检查内存使用情况、HDFS输入输出、以及其他的守护进程交互。
总结来说: 伪分布式集群就是只有一个节点的分布式集群。
平台软件说明
平台&软件 | 说明 |
---|---|
宿主机操作系统 | Windows / MacOS |
虚拟机操作系统 | CentOS 7 |
虚拟机软件 | Windows: VMWare MacOS: Parallels Desktop |
SSH工具 | Windows: MobaXterm / FinalShell MacOS: FinalShell / iTerm2 |
软件包上传路径 | /root/softwares |
软件安装路径 | /usr/local |
JDK | X64: jdk-8u321-linux-x64.tar.gz ARM: jdk-8u321-linux-aarch64.tar.gz |
Hadoop | X64: hadoop-3.3.1.tar.gz ARM: hadoop-3.3.1-aarch64.tar.gz |
用户 | root |
搭建环境准备
-
总纲
1. 确保防火墙是关闭状态。 2. 确保NAT模式和静态IP的确定 (192.168.10.101) 3. 确保/etc/hosts文件里, ip和hostname的映射关系 4. 确保免密登陆localhost有效 5. jdk和hadoop的环境变量配置
复制代码 -
防火墙关闭
[root@qianfeng01 ~]# systemctl stop firewalld [root@qianfeng01 ~]# systemctl disable firewalld [root@qianfeng01 ~]# systemctl stop NetworkManager [root@qianfeng01 ~]# systemctl disable NetworkManager #最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled [root@qianfeng01 ~]# vi /etc/selinux/config ......... SELINUX=disabled .........
复制代码 -
修改host映射
# 进入hosts文件,配置一下ip和hostname [root@qianfeng01 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.101 qianfeng01 # 添加本机的静态IP和本机的主机名之间的映射关系
复制代码 -
确保ssh对localhost的免密登陆认证有效
# 1. 使用rsa加密技术,生成公钥和私钥。一路回车即可 [root@qianfeng01 ~]# ssh-keygen -t rsa # 2. 进入~/.ssh目录下,使用ssh-copy-id命令 [root@qianfeng01 .ssh]# ssh-copy-id root@qianfeng01 # 3. 进行验证,去掉第一次的询问(yes/no) [hadoop@qianfeng01 .ssh]# ssh localhost
复制代码 -
确保JDK与Hadoop已经安装完成,并且已经配置好环境变量
配置文件修改
-
core-site.xml
<configuration> <!-- 设置namenode节点 --> <!-- 注意: hadoop1.x时代默认端口9000 hadoop2.x时代默认端口8020 hadoop3.x时代默认端口 9820 --> <property> <name>fs.defaultFS</name> <value>hdfs://qianfeng01:9820</value> </property> <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-3.3.1/tmp</value> </property> </configuration>
复制代码 -
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>qianfeng01:9868</value> </property> <!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局 --> <property> <name>dfs.namenode.http-address</name> <value>qianfeng01:9870</value> </property> </configuration>
复制代码 -
hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_321 # Hadoop3中,需要添加如下配置,设置启动集群角色的用户是谁 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
复制代码
格式化集群
注意事项:
我们在core-site.xml中配置过hadoop.tmp.dir的路径,在集群格式化的时候需要保证在这个路径不存在!如果之前存在数据,先将其删除,再进行格式化!
hdfs namenode -format
复制代码
image-20220128125929695
启动集群
[root@qianfeng01 hadoop]# start-dfs.sh
Starting namenodes on [qianfeng01]
Starting datanodes
Starting secondary namenodes [qianfeng01]
[root@qianfeng01 hadoop]# jps
11090 Jps
10595 NameNode
10938 SecondaryNameNode
10763 DataNode
复制代码
webUI查看
在电脑的浏览器中输入虚拟机的IP地址,如果做过了主机名映射,可以直接使用主机名
http://192.168.10.101:9870
image-20220128130634155
案例演示: wordcount
-
数据准备
[root@qianfeng01 ~]# mkdir input && cd input [root@qianfeng01 input]# echo "hello world hadoop linux hadoop" >> file1 [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1 [root@qianfeng01 input]# echo "hadoop linux mysql linux hadop" >> file1 [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1 [root@qianfeng01 input]# echo "linux hadoop good programmer" >> file2 [root@qianfeng01 input]# echo "good programmer qianfeng good" >> file2
复制代码 -
上传到集群
# 因为伪分布式集群也应用到了分布式的思想,分布式的存储。任务处理的数据是HDFS的数据,而并不是Linux本地的。 [root@qianfeng01 input]# hdfs dfs -put ~/input/ / # 检查是否已经上传成功 [root@qianfeng01 input]# hdfs dfs -ls -R / drwxr-xr-x - root supergroup 0 2022-01-28 13:11 /input -rw-r--r-- 1 root supergroup 31 2022-01-28 13:11 /input/file -rw-r--r-- 1 root supergroup 127 2022-01-28 13:11 /input/file1 -rw-r--r-- 1 root supergroup 59 2022-01-28 13:11 /input/file2
复制代码 -
执行任务
[root@qianfeng01 input]# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
复制代码 -
查看结果
[root@qianfeng01 input]# hdfs dfs -cat /output/* good 3 hadoop 9 hadop 2 hello 3 linux 10 mysql 2 programmer 2 qianfeng 1 world 1
可以观看视频:
千锋教育大数据Hadoop全新升级版入门教程,零基础从安装搭建到集群调优