centos7中进行hadoop搭建全过程
1.模版虚拟机环境准备
1.安装模版虚拟机,(以下地址均为实例,具体情况具体应用)IP地址192.168.10.100,主机名称hadoop100,内存4G,硬盘50G
2.配置要求
1)确认虚拟机联网,ping www.baidu.com试试,ping的同即可
2)安装epel-release
epel-release全称Extra Packages for Enterprise Linux,为"红帽系"的操作系统提供的额外的软件包,适用于RHEL,Centos和Scientific Linux.相当于一个软件仓库.安装原因为大多数rpm包在官方repository中是找不到的
(采用yum方式安装,-y为对所有回答都回答yes)
yum install -y epel-release
如果Linux安装的是最小系统版,还需要安装net-tool和vim
net-tool:工具包集合,包含ifconfig等命令
yum install -y net-tools
vim:编辑器
yum install -y vim
3)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service
在企业开发中,公司一般都会对外设置安全的防火墙,所以单个服务器防火墙关闭是无影响的,具体情况具体对待
4)创建用户(这里示例为user1),并修改user1的密码
useradd user1
passwd user1
5)给用户配置root权限,方便后期加sudo执行root权限的命令
(在root账户下修改/etc/sudoers文件) vim /etc/sudoers
在%wheel下添加(
具体位置为:
##Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL的下方)
user1 ALL=(ALL) NOPASSWD:ALL
不要放在root行下,因为所有的用户都属于wheel组,你在root下配置user1具有免密功能,但按行执行到%wheel行时,又会被覆盖为普通用户,需要密码,所以切记user1要放到%wheel下
6)在/opt目录下创建文件夹,并修改所属主和所属组
在/opt目录下创建module,software文件夹
mkdir /opt/module
mkdir /opt/software
修改module,software文件夹的所有者和所属组均为user1用户
chown user1:user1 /opt/module
chown user1:user1 /opt/module
查看module,software文件夹的所有者和所属组
cd /opt/
ll
7)卸载虚拟机自带的JDK
如果安装的是Linux最小版跳过这步
rpm -qa | grep -i java | xargs -n1 rpm -e --nodes
解释:
- rpm -qa:查询所有安装的rpm软件包
- grep -i:忽略大小写
- xargs - n1:每次只传递一个参数
- rpm -e -nodeps:强制卸载软件
8)重启
reboot
2.克隆虚拟机
1.利用模版机hadoop100,克隆三台:hadoop102,hadoop103,hadoop104(克隆时关闭hadoop100)
2.修改克隆机IP,以hadoop102举例
1)修改克隆机的静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改为:
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.10.102
PREFIX=24
GATEWAY=192.168.10.2
DNS1=192.168.10.2
2)查看Linux虚拟机的虚拟网络编辑器,编辑>虚拟网络编辑器>VMnet8
3)查看Windows系统适配器VMware Network Adapter VMnet8的IP地址
4)保证Linux系统ifcfg-ens33文件中IP地址,虚拟网络编辑器地址和Windows系统VM8网络IP地址相同
3.修该克隆机主机名,以hadoop102为例
1)修改主机名
vim /etc/hostname 为hadoop102
2)配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts
vim /etc/hosts
添加如下内容:
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
4.重启hadoop102
reboot
5.修改windos的主映射文件(hosts文件)
1)进入C:\Windows\System32\driver\etc
2)打开hosts文件添加如下内容
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
注意window10无法直接修改,建议将hosts文件复制到桌面修改后再复制回C:\Windows\System32\driver\etc替换
6.在hadoop102中安装JDK
1)卸载JDK:上文有
2)使用XShell将JDK导入/opt/software下
这里我使用的是jdk-8u212-linux-x64.tar.gz
3)解压JDK到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module
4)配置JDK环境变量
新建/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
添加以下内容:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
保存后退出(:wq)
source以下/etc/profile文件,让环境变量生效
5)测试JDK是否安装成功
java -version
如果有java version "1.8.0_212"类似出现则成功(没有出现但确认上面无错reboot一下)
4.在hadoop102中安装Hadoop
1.用XShell文件将hadoop-3.1.3.tar.gz导入opt目录下的software下
2.解压到/opt/module下
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
3.将Hadoop添加到环境变量
1)获取Hadoop安装路径
pwd
显示:/opt/module/hadoop-3.1.3
2)打开/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
在文末添加:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
3)source /etc/profile
4.测试是否安装成功hadoop version
显示:Hadoop 3.1.3
5.重启
sudo reboot
5.完全分布式搭建
截止目前还需做:配置集群,单点启动,配置ssh,群起并测试集群
1.编写集群分发脚本(便捷我们搭建)
1)这里要了解两个工具scp和rsync
scp为拷贝工具,rsync为同步工具,两者区别在于scp为全复制,rsync为只复制被更改文件
语法规则:
scp -r $user@$host:$pdir/$fname $user@$host:$pdir/$fname
rsync -av $user@$host:$pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 被拷贝用户@主机:要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
-r是递归,-a是归档拷贝,-v显示复制过程
如果是拷贝(同步)的是本地用户则被拷贝用户@主机:都可以省略,如果目的地用户为本地则目的用户@主机:可写为./
2)了解完来实现脚本
cd /home/atguigu
mkdir bin(选择这里创建时方便我们,声明在了全局环境变量的路径里了 可以用echo $PATH查看全局环境变量)
cd bin
vim xsync
在文件编写如下
#!/bin/bash
if [ $# -lt 1 ]
then
echo Not Enough Argument!
exit;
fi
for host in hadoop102 hadoop103 hadpoop104
do
echo ========= $host =========
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file); pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
3)修改权限
chmod 777 xsync
4)将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
5)同步环境变量
sudo ./bin/xsync /etc/profile.d/my_env.sh
6)hadoop103,hadoop104刷新一下
source /etc/profile
2.ssh免密配置
1)cd /home/atguigu/.ssh
2)生成公钥
ssh-keygen -t rsa
3)拷贝发送公钥
ssh-copy-id hadoop102(一定要给自己也搞一下免密,不然后面会出错)
ssh-copy-id hadoop103
ssh-copy-id hadoop104
4)完成后可以cat authorized_keys看看是不是都配齐整了
5)介绍一下.ssh文件夹下的几个文件
known_hosts 记录ssh访问过计算机的公钥
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥
3.集群配置
计划这么安排
Haoop配置文件分为默认配置文件和自定义配置文件,想修改某一默认配置值时应该去修改自定义配置文件,更改相应属性值
默认配置文件有
- core-default.xml hadoop-common-3.1.3.jar/core-default.xml
- hdfs-default.xml hadoop-hdfs-3.1.3.jar/hdfs-default.xml
- yarn-default.xml hadoop-yarn-common-3.1.3.jar/yarn-default.xml
- mapred-default.xml hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml
- yarn-default.xml hadoop-yarn-common-3.1.3.jar/yarn-default.xml
- hdfs-default.xml hadoop-hdfs-3.1.3.jar/hdfs-default.xml
对应的有自定义配置文件:core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,他们都存放在$HADOOP_HOME/etc/hadoop中
1)配置core-site.xml
cd #HADOOP_HOME/etc/hadoop
vim core-site.xml
在<configuration></configuration>标签内添加如下内容
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!--指定hadoop数据的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户为User1-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>user1</value>
</property>
2)配置hdfs-site.xml
vim hdfs-site.xml
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
3)YARN配置文件
vim yarn-site.xml
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
4)MapReduce配置文件
vim mapred-site.xml
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5)分发Hadoop配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
6)配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
增加:
hadoop102
hadoop103
hadoop104
7)同步
xsync /opt/module/hadoop-3.1.3/etc
4.启动集群
1)第一次启动需要再102节点格式化NameNode
hdfs namenode -format
5.配置历史服务器
1)vim mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
3)在hadoop102启动历史服务器
mapred --daemon start historyserver
4)查看JobHistory
http://hadoop102:19888/jobhistory
6.开启日志聚集功能
1)vim yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2)老样子分发
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
3)使用前要重启NodeManager,ResourceManager和HistoryServer
sbin/stop-yarn.sh
mapred --daemon stop historyserver
start-yarn.sh
mapred --daemon start historyserver
4)历史服务器地址
http://hadoop102:19888/jobhistory
至此,Hadoop搭建结束
(至此,源稚生小队全灭)
附加两个脚本便捷日后操作
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start
historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop
historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)