基于Win11、CentOS7、VMWare15pro搭建Hadoop2.7.7
注意,本文章只有实操,基本没有理论概述,因为鄙人也在新手阶段,这点微薄知识就不上传了。需要进一步深入了解请移步到官网
一. 安装
- 首先在vm虚拟机里搭建一台linux(centos7)root账户密码都设置为 123456
- 注意的事项为
以下文章的命令都是适用centos7
的,centos6部分命令不适用
hadoop01 的内存为4G,hadoop02、hadoop03都为3G
不要配置分区
不要配置yum源
语言都使用English(US) 方便学习 或 不要产生不必要的问题
不要安装图形界面
网络模式使用NAT
参考链接:https://www.cnblogs.com/frankdeng/p/9027037.html
二. 配置IP映射
-
安装完成后找到vm虚拟机左上角的编辑 -> 虚拟网络编辑器 -> 选择类型为NAT模式 -> 下方子网IP改为:
192.168.121.0
-
右下DHCP设置 -> 起始IP与结束IP分别改为:
192.168.121.128
192.168.121.254 -
打开hadoop01,登陆root账户
vi /etc/hosts
按i
在下面输入:192.168.121.134 hadoop01
192.168.121.135 hadoop02
192.168.121.136 hadoop03保存: Esc > :wq
三. 克隆
- 克隆前先把 hadoop01 关机
在左边库中对hadoop01右键找到管理->克隆->选择完整克隆
修改克隆的名字为hadoop02与存储位置 (建议把三台linux放在同一个位置)
克隆完后修改内存为3G
hadoop03一样的操作
四. 修改主机名
-
hadoop02、hadoop03也要修改对应的主机名
hostnamectl set-hostname hadoop01
查看结果
hostname
重启生效
reboot
五. 配置网卡
hadoop01
HWADDR 的值在左边我的计算机下面的hadoop01右键->设置->网络适配器->高级->下方的MAC地址找到后复制到某个文本里 后面需要用到
-
修改网卡配置 ifcfg-ens33 以实际为准 可在该目录下查看 一般第一个就是
vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改: ONBOOT=yes BOOTPROTO=static 添加: IPADDR=192.168.121.134 GATEWAY=192.168.121.2 NETMASK=255.255.255.0 DNS1=8.8.8.8 DNS2=114.114.114.114 HWADDR=00:0C:29:29:B9:44 删除: UUID 或者注释 #UUID 重启网卡: systemctl restart network.service 验证: ping www.baidu.com
2. 关闭NetworkManager
>systemctl stop NetworkManager.service
>systemctl disable NetworkManager.service
hadoop02、hadoop03也是一样的操作,除了ip地址与HWADDR值不一样
六. 关闭防火墙
hadoop02、hadoop03也是一样的操作
systemctl start firewalld (开启防火墙)
systemctl status firewalld (查看防火墙状态 active 开启)
systemctl disable firewalld (永久关闭防火墙 重启生效)
systemctl stop firewalld (临时关闭 立即生效)
systemctl status firewalld ( 检查为 inactive 关闭)
七. 关闭SElinux
hadoop02、hadoop03也是一样的操作
查看命令 sestatus
SELinux status: enabled (为开启)
vi /etc/selinux/conf
找到 SELINUX=enforcing
修改为 SELINUX=disabled
保存 esc > :wq
重启 reboot
验证效果
ping hadoop01
ping hadoop02
ping hadoop03
在每台都验证一下 看是否防火墙关闭成功
八. 开启、配置shhd密匙认证
-
查看是否安装 ssh服务
rpm -qa | grep ssh
没有则安装:yum install -y openssl openssh-server
vi /etc/ssh/sshd_config
将下面的值取消 注释 或 修改为 yes
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys重启sshd服务
systemctl restart sshd
-
创建普通用户
2.1. 在后面的操作都将使用普通用户进行操作,root账户的权限太高,防止出现不可逆转的因素
创建普通用户
useradd hadoop
设置密码
passwd hadoop (密码都为 123456)su hadoop
2.2. 给普通用户添加使用sudo权限 (进入root账户操作)
su
visudo
在 root ALL=(ALL) ALL 下面添加
hadoop ALL=(ALL) ALL
去掉 %wheel ALL=(ALL) NOPASSWD:ALL前面的#
保存 esc > :wq
gpasswd -a hadoop wheel
su hadoop
测试 sudo date -
生成公钥与私钥
然后在hadoop01、hadoop02、hadoop03上都运行下面代码ssh-keygen -t rsa
ssh-copy-id hadoop01 # 输入yes 然后输入密码
ssh-copy-id hadoop02
ssh-copy-id hadoop03 -
免密测试
ssh hadoop02
ssh hadoop03
ssh hadoop01都不需要输入密码就能登陆,就是成功了
九. 安装配置jdk8
-
下载账户
因为下载jdk需要登陆账户,所有为大家提供一个账户(密码后有位小数点),方便学习使用,请不要改密码,谢谢!user:lateautumns@163.com
passwd: Oracle123. -
首先创建目录在根目录下
cd ~
sudo mkdir -p /export/data # 存放数据类文件
sudo mkdir -p /export/servers # 存放服务类软件
sudo mkdir -p /export/software # 存放安装包文件 -
下载
下载jdk-8uxxx-linux-x64.tar.gz (xxx表示版本)参考链接:https://blog.csdn.net/pdsu161530247/article/details/81582980
利用SecureFX OR WinSCP等软件将文件上传到Linux里export/software目录下,执行下面命令cd /export/software tar -zxvf jdk-8uxxx-linux-x64.tar.gz -C /export/servers/ 配置环境变量 vi /etc/profile 执行下面命令快速编辑 99gg > o 复制以下内容 export JAVA_HOME=/export/servers/jdk1.8.0_xxx #jdk安装目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin export PATH=$PATH:${JAVA_PATH} 保存命令 esc > :wq 让环境变量立即生效 source /etc/profile 验证: javac java -version
十. 安装配置hadoop
-
安装:
下载hadoop-2.7.7.tar.gz
下载链接:https://archive.apache.org/dist/hadoop/common/?C=M;O=D
利用SecureFX 将文件复制到export/software目录下cd /export/software
tar -zxvf jdk-8uxxx-linux-x64.tar.gz -C /export/servers/
配置环境变量
vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
让环境变量立即生效
source /etc/profile
验证
hadoop version
2. 修改配置文件:
需要修改的配置文件有hadoop-env.sh、core-site.xml、 hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves。
下面进行个性化配置
hadoop-env.sh
> cd /export/servers/hadoop2.7.7/etc/hadoop/
> vi hadoop-env.sh
> 将 export JAVA_HOME=${JAVA_HOME}
> 修改为:export JAVA_HOME=/export/servers/jdk1.8.0_xxx # java安装路径
> 保存:> esc > :wq
core-site.xml
>vi core-site.xml
找到<configuration>标签
在里面插入如下内容
```xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop2.7.7/tmp</value>
</property>
```
保存:> esc > :wq
hdfs-site.xml
>vi hdfs-site.xml
找到<configuration>
在里面插入如下内容
```xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
```
保存:> esc > :wq
mapred-site.xml
没有该文件 需要使用用到模板文件进行复制改名
>cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
找到<configuration>
在里面插入如下内容
```xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
```
保存:> esc > :wq
yarn-site.xml
>vi yarn-site.xml
找到<configuration>
在里面插入如下内容
```xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
```
保存:> esc > :wq
slaves
>vi slaves
删掉loaclhost
添加 (每个占一行)
hadoop01
hadoop02
hadoop03
十一、分发配置文件与资源
scp /etc/profile hadoop02:/etc/profile
scp /etc/profile hadoop03:/etc/profile
scp -r /usr/local/* hadoop02:/usr/local/
scp -r /usr/local/* hadoop03:/usr/local/
然后在hadoop02、hadoop03分别执行
source /etc/profile # 刷新配置文件
分别验证
java -version
hadoop version
十二. 测试启动Hadoop集群
-
格式化文件系统命令:
hdfs namenode -format
(在生成的日志记录中看到 been successfully formatted 表示成功)。
如果有报错信息,查看报错信息,根据报错信息解决问题。一般为前面配置的4个文件是否有误。
修改后重新格式化。
使用普通用户启动hadoop集群(因为我们是在hadoop用户中配置的ssh免登陆)su hadoop
start-dhs.sh # 这些命令是在hadoop目录下的sbin目录里
start-yarn.sh
jps # 查看节点是否启动 分别为
hadoop01
resourcemanager \ nodemanager \ datenode \ namenode
hadoop02
datenode \ nodemanager \ secondarynamenode
hadoop03
datenode \ nodemanager如果少一个,可以试试关闭集群,重新启动 或者单独启动缺少的节点 命令在sbin目录中查找
需要在对应的节点启动对应的节点 (hadoop01为主节点)关闭命令
stop-dhs.sh
stop-yarn.sh还不行可能是配置,可以去查看haoop目录下的logs目录中的log文件找报错原因
2. 配置windows的hosts文件
找到`C:\Windows\System32\drivers\etc` 目录下的hosts文件,右键,属性,把只读的选项取消。然后用笔记本或notepad++打开hosts文件,在下面添加如下内容
>192.168.121.134 hadoop01
>192.168.121.135 hadoop02
>192.168.121.136 hadoop03
在浏览器里打开 <http://hadoop01:50070>与<http://hadoop01:8088>。查看运行情况,成功打开
至此Hadoop集群搭建完毕
十三. 测试Hadoop集群
单词词频统计
cd ~/export/data/
sudo vi word.txt
添加:
hello itcast
hello itheima
hello hadoop
保存:esc >:wq
hadoop fs -mkdir -p /wordcount/input
hadoop fs -put word.txt /wordcount/input
cd /export/servers/hadoop-2.7.7/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input wordcount/output
查看浏览器的两个页面,8088端口的会显示运行状态,结束后,查看50070端口,点击utilities > Browse the file system 输入 /wordcount/output
> 点击part-r-00000 > 下载后使用notepad++打开查看结果
参考链接:https://blog.csdn.net/qq_40487484/article/details/96772856
https://blog.csdn.net/pengjunlee/article/details/81589972
https://www.cnblogs.com/theyang/p/12336391.html
https://blog.csdn.net/pengjunlee/article/details/53932094
十四. 配置hadoop集群时间同步
使用Hadoop01为主服务器,其他节点根据主服务器来自动修正时间
所有节点都需要安装ntp与ntpdate
yum install -y ntp and yum install -y ntpdate
hadoop01:
vi /etc/ntp.conf
授权192.168.121.128-192.168.121.255网段上的所有机器可以从这台机器上查询和同步时间
修改
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
为
restrict 192.168.121.128 mask 255.255.255.0 nomodify notrap
集群在局域网中,不使用其他互联网上的时间
注释 类似 server 0.centos.pool.ntp.org iburst
有多少注释多少
并在后面添加主服务器的ip
server 192.168.121.134
server cn.pool.ntp.org perfer # 网络时间同步
当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步,所以到末尾添加
server 127.127.1.0
fudge 127.127.1.0 stratum 10
保存
修改ntpd配置
vi /etc/sysconfig/ntpd
添加
SYNC_HWCLOCK=yes
重新启动
systemctl enable ntpd
systemctl restart ntpd
开机自启
chkconfig ntpd on
hadoop02、hadoop03配置
vi /etc/ntp.conf
注释 类似server 0.centos.pool.ntp.org iburst
有多少注释多少
并在后面添加主服务器的ip
server 192.168.121.134
保存后
crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop01 # 每过10分钟与hadoop01同步时间
hadoop01 先调整时间
sudo date -s “2022-3-17 18:18:06”
等待其他机器同步时间
ntpdate hadoop01 # 强制与hadoop01同步时间 但不建议这么做
ntpd 是与服务器的时间通过计算慢慢的把自己的时间更改过来
ntpdate 是立即同步时间,即时间的跃变。对某些依靠时间的程序造成不可逆转的问题
参考连接:https://www.cnblogs.com/liushui-sky/p/9203657.html
有问题请留言或联系鄙人
不足之处请多多指教,感谢!!!