Hadoop 本地真分布式部署(Windows 11+CentOS 7+VMWare)

Hadoop本地真分布式部署

真分布部署Hadoop需要多台虚拟实现真正物理上的分布式这样可以结合多台机器cpu存储空间硬件资源

配置前基本配置信息检查

配置

说明

宿主机系统

windows 11

虚拟机操作系统

centos 7

虚拟机软件

VMware

ssh 工具

Xshell 8.0 (free for school)

软件包上传路径

/root/softwares

软件安装路径

/usr/local

JDK

jdk1.8

Hadoop

hadoop-3.4.1

由于虚拟机会占用大量的磁盘空间,故最好首先在VMware上修改工作区目录。具体修改方式为:编辑--首选项--工作区--虚拟机的默认位置。除此之外可以给虚拟机的内存空间调大使其具备一定灵活性,设置为主机预留最小内存为主机内存的一半:编辑--首选项--内存--预留内存。

我们可以首先一台机器进行配置修改然后VMware的克隆功能虚拟拷贝注意这里检查你的硬件资源是否充足如果你的硬件资源不足可以每一台虚拟机分配较少cpu核心较少磁盘空间这里每一台虚拟机分配40GB磁盘空间

虚拟机网络部署

在创建虚拟机时,网络模块选择NAT协议网络,为了保证虚拟机的ip地址固定可用,我们需要修改三个地方,一个是VMware的NAT网络设置,一个是宿主机windows的网络设置,还有一个是虚拟机内部的网卡配置。

VMware

首先打开虚拟网络编辑器,然后点击 [更改设置]

在这里,我们把NAT模式的子网IP设置为192.168.10.0网段,指示NAT协议要把虚拟机的ip分配到这个网段,同时在【NAT设置】里需要设置网关为192.168.10.2,网关的最后一位一般都为2。然后点击【确定】来应用设置。

windows:

在上面的vmware的配置中,我们可以看到NAT模式用的是VMnet8这块网卡,然后我们需要在windows中修改这块网卡的网络适配器选项。在设置中搜索-【更改网络适配器设置】,然后找到VMnet8,点击更多属性,设置对应的网关和首选DNS,备用DNS可以填写8.8.8.8公共域名解析器。

VM Machine:

在虚拟机里面,我们需要进到网卡的配置文件里面,网卡的配置文件在

/etc/sysconfig/network-scripts/ifcfg-ens33

文件名是网卡设备名,可以通过ifconfig命令查看虚拟机的网络信息,然后找到正确的网卡,其名字就是我们要更改的配置文件名。

这里可以看到第一块网卡就是连接到外部网络的网卡,名为ens33。

通过vim命令打开配置文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33

原先的BOOTPROTO是DHCP,指示ip地址动态分配,这里我们改成静态分配 BOOTPROTO='static'。除此之外把ip地址和网关以及DNS地址都设置好:

IPADDR=192.168.10.100
PREFEX=24
GATEWAY=192.168.10.2
DNS1=192.168.10.2

然后保存退出之后,运用systemctl重启网络

systemctl restart network

然后ping一下百度和宿主机,能相互ping通说明配置成功。

ping baidu.com
ping 10.69.36.231 //这是我本机的ip 地址

能够ping通,然后关闭防火墙

systemctl stop firewalld
systemctl disable firewalld //禁止开机自启动

【配置成功】。

除此之外,为了便于我们识别和访问不同的结点,我们会对本机和其他结点命名,修改主机通过hostname文件修改主机映射可以通过hosts文件进行修改

【vim编辑hostname文件】

vim /etc/hostname

修改本机设备标识名为hadoop100,如图所示

保存退出随后修改hosts文件创建主机映射

vim /etc/hosts

末尾插入以下内容

192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102

保存退出,重启机器并在终端输入hostname查看修改是否成功:

reboot
hostname

修改成功。

hadoop软件环境配置

hadoop是使用java编写的程序,故必然要给节点安装java的环境,这里我们使用java1.8的环境,最好是自己安装,而不是用yum命令,因为hadoop会检查JAVA_HOME的环境变量,如果没有配置,hadoop是会运行报错的。

【java1.8环境配置】

首先找到华为的java镜像网站:

https://repo.huaweicloud.com/java/jdk/

在里面找到最新的java8版本:8u202-b08

然后选择linux需要的x64压缩包:jdk-8u202-linux-x64-tar.gz

https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

在虚拟机里,cd到软件的存放目录,并解压软件包:

cd /root/softwares //这是我提前创建的,没有的话需要创建
wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local //-C解压重定向到软件安装目录
mv /usr/local/jdk1.8.0_202 /usr/local/jdk-1.8.0 //改个名称

然后配置系统环境变量:

vim /etc/profile

插入以下几行(必须):

export JAVA_HOME=/usr/local/jdk-1.8.0 #注意等号两边不要有空格
export PATH=$PATH:$JAVA_HOME/bin

随后保存退出,用source命令激活

source /etc/profile

java -version看一下是否配置成功

java -version

【配置成功】

【hadoop环境配置】

我们首先去到清华的hadoop镜像站下载hadoop3.4.1

https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.4.1/hadoop-3.4.1.tar.gz

下载之后,复制到虚拟机,注意vmware的复制功能不是很好用,会缺掉文件的大部分,故用winscp等scp工具来复制文件。

我们已经复制文件到~/softwares目录下之后,解压软件包:

tar -zxvf hadoop-3.4.1.tar.gz -C /usr/local/

然后配置环境变量信息:

vim /etc/profile

插入以下环境变量:

#hadoop_home
export HADOOP_HOME=/usr/local/hadoop-3.4.1
export PATH=$PATH:$HADOOP_HOME/sbin //集群管理脚本
export PATH=$PATH:$HADOOP_HOME/bin //hdfs基本指令

同样退出保存,并source激活

source /etc/profile

输入hadoop命令查看是否配置成功

hadoop version

出现如上结果代表【配置成功】

虚拟克隆

我们虚拟机hadoop100基本环境已经配置好了随后退出虚拟机打开vmware,右键hadoop100虚拟机点击管理--克隆,克隆两次,依次命名Hadoop101,Hadoop102

克隆过程除了下面一些选项特别配置以外其他点击下一步就好

克隆类型选择完整克隆

名称需要修改正确名称随后点击完成这里根据设备硬件速度需要等待时间不同所以耐心等待几分钟

克隆完成之后打开虚拟这里我们两个地方需要修改一个克隆IP地址另一个hostname

vim /etc/hostname

修改主机克隆都要修改正确主机

vim /etc/sysconfig/network-scripts/ifcfg-ens33

这里IP地址修改节点对应IP地址保存退

reboot

重启虚拟机器做完之后,相互ping 一下,同时ping一下百度

【配置完成

虚拟机集群免密

配置hadoop集群需要涉及跨机器的数据传输,为了高效跨机器访问数据,需要对不同节点配置免密登录。所以我们在三个节点上都跑一次下面的指令:

1.ssh秘钥对生成, 使用rsa算法生成秘钥

ssh-keygen -t rsa

2.秘钥生成之后,会在用户的home目录生成一个.ssh隐藏文件夹,进入这个文件夹会有两个文件

cd ~/.ssh
ls -l
-rw-------. 1 root root 1675 1130 03:22 id_rsa
-rw-r--r--. 1 root root  396 1130 03:22 id_rsa.pub

3.使用ssh-copy-id指令传输秘钥到远程机器,这里我们把秘钥传到每一个节点让集群之间相互免密:

ssh-copy-id hadoop100
ssh-copy-id hadoop101
ssh-copy-id hadoop102

然后一直按回车或者输入yes,这时候目标节点的~/.ssh目录下会出现两个文件,一个是验证文件authorized_keys,另一个是known_hosts。前者是用来验证其他机器要免密登录时的私钥的,后者是标识本设备登录过哪些节点。

至此,免密登录配置完成,通过ssh hadoop100; ssh hadoop101; ssh hadoop102来确定是否需要密码登录,不需要密码则说明配置成功。

hadoop集群启动配置信息

真分布式hadoop主节点节点我们选择hadoop100主节点然后打开主节点虚拟机修改hadoop集群启动配置信息

cd 到hadoop的安装目录:

cd $HADOOP_HOME //这里是我之前在环境变量已经配置好了,没有配置的需要自己去找安装路径
ls
bin  include  libexec         licenses-binary  logs           NOTICE.txt  sbin   tmp
etc  lib      LICENSE-binary  LICENSE.txt      NOTICE-binary  README.txt  share

这里我们需要修改的是etc下的配置信息,故cd到对应目录

cd etc/hadoop

这里主要要修改个文件:core-site.xml,hdfs-site.xml,hadoop.env.sh,workers

vim core-site.xml

插入以下信息:

<configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop100:9820</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-3.4.1/tmp</value>
    <!--在初始化集群的时候一定要确保所有节点的tmp目录都不存在,否则有的节点启动不起来-->
    </property>
</configuration>

同理,针对hdfs-site.xml,插入以下信息:

<configuration>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop101:9868</value>
    </property>

    <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop100:9870</value>
    </property>
</configuration>

这里9870是主节点的http访问端口,可以在web上通过hadoop100的ip地址的9870端口来查看集群和hdfs的信息。

replication是备份的意思,表示要每个节点的文件备份几份,这里是分布式,我们三个节点,所以设置为3即可。secondary针对SecondaryNameNode配置指定第二命名结点hadoop101。

针对hadoop.env.sh,添加如下信息:

##JAVA_HOME
export JAVA_HOME=/usr/local/jdk-1.8.0

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

这里指示了JAVA_HOME以及在主节点,次节点和数据节点上登录的用户角色,这里设置为root确保最高权限。

最后针对workers我们workers内容替换实际线工作节点,如图所示:

全部配置完成后保存退出。

集群配置信息分发

我们已经hadoop100成功配置基本信息随后我们可以使用scp指令etc文件发到其他节点但是首先每一个节点(除了hadoop100)上原本$HADOOP_HOMEetc文件删除

cd $HADOOP_HOME
rm -rf etc

然后回到hadoop100scpetc文件发给其他节点

cd $HADOOP_HOME
scp etc hadoop101:$PWD
scp etc hadoop102:$PWD

至此集群配置信息分发完毕

集群初始化启动

集群初始化启动只需要主节点命令就好所以我们打开hadoop100进行操作

cd $HADOOP_HOME
rm -rf tmp//保hadoop.tmp.dir目录不存
hadoop namenode -format //初始化集群

随后使用脚本启动集群

start-dfs.sh

【以上过程的任何出现的命令不存在,都请检查环境变量的配置】

使用jps查看三台机器java进程可以看到我们设置主节点hadoop100上NameNode进程DataNode进程Hadoop101上则有SecondaryNameNode进程DataNode进程Hadoop102只有DataNode进程

至此集群启动完毕可以通过windows宿主机浏览器访问主节点的9870端口查看集群信息,可以看到总的可用空间是107.44G,这说明各个机器的硬件资源确实被整合了:

可以点击Utilities-Browse the file system 来查看hdfs文件系统:

如果浏览器有上述界面则说明集群【启动成功】

词频统计案例-hdfs测试案例

这里我们通过编写java程序接口方式访问文件系统这里我们一个官方的案例来使用hdfs

首先我们构建输入文件夹

cd ~
mkdir input 
cd input
echo "a b c d e f g" >> file1 //给file1一些初始输入
for i in {1..100};do cat file1 >> file2; done//把file1的内容拷贝100份到file2,注意;的位置
ls -l

hdfs不是用的linux的文件系统,所以我们需要先把input文件夹上传到hdfs里面才能使用

上传指令 -put

cd ..
hdfs dfs -put input /input

在浏览器已经可以看到我们的input文件夹了

然后运行hdfs的案例jar包的程序来实现词频统计,以后想要运行自己程序可以自己代码之后导出jar这样运行我们自己程序

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.1.jar wordcount /input /output

注意我们刚刚把input文件夹放到了hdfs的/input里,所以这里实际上的输入是/input 输出是/output,执行前确保输出目录不存在,否则无法执行。

等待执行结束之后,查看文件

hdfs dfs -cat /output/*

MapReduce成功利用hdfs执行了词频统计的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值