[所有节点]IP地址设置vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 设置为静态ip static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33" # 网卡的名称
DEVICE="ens33" # 设备的名称
ONBOOT="yes" # 设置为yes, 表示开机启动
IPADDR="192.168.46.150"
PREFIX="24"
GATEWAY="192.168.46.2"
DNS1="114.114.115.115"
systemctl restart network
ping www.baidu.com 如果可以ping通公网: 说明 ip地址和网关都配置正确 如果通过 ip addr 不能查看到ip地址, 说明配置有错误 如果可以ping通内网 192.168.46.1 但是不能ping通外网的话, 则说明网关配置有错误
[所有节点]设置主机名vi /etc/hostname hadoop01 02 03,biz01 都得改
[所有节点]设置域名映射解析vi /etc/hosts 192.168.3.129 biz01 192.168.3.130 hadoop01 192.168.3.131 hadoop02 192.168.3.132 hadoop03
[所有节点]关闭防火墙和Selinuxsystemctl stop firewalld.service
systemctl disable firewalld.servicevi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted[所有节点]配置免密登录
ssh root@hadoop01 ip addr
测试需要用户名和密码;
ssh-keygen -t rsa
后面直接所有的交互都敲回车 即可
[所有节点]配置服务器节点时钟同步可以忽略
[所有节点]安装常用软件快速方式:yum install -y vim net-tools lrzsz rsync wget
yum install -y vim
yum install -y net-tools
yum install -y lrzsz
yum install -y rsync
yum install -y wget[所有节点]创建统一目录mkdir -p /bigdata/{soft,server}
/bigdata/soft 安装文件的存放目录
/bigdata/server 软件安装的目录
[所有节点]安装软件rsyncyum install -y rsync[hadoop01] 配置同步脚本mkdir /root/bin
cd /root/bin #到新创建的目录
vim xsync #vim 是vi的高级版
#!/bin/bash
#1 获取命令输入参数的个数,如果个数为0,直接退出命令
paramnum=$#
echo "paramnum:$paramnum"
if (( paramnum == 0 )); then
echo no params;
exit;
fi
# 2 根据传入参数获取文件名称
p1=$1
file_name=`basename $p1`
echo fname=$file_name
#3 获取输入参数的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取用户名称
user=`whoami`
#5 循环执行rsync
current=`hostname`
nodes=$(cat /root/bin/workers)
for host in $nodes; do
echo ------------------- $host --------------
if [ "$host" != "$current" ];then
rsync -rvl $pdir/$file_name $user@$host:$pdir
fi
done[hadoop01]创建workers文件cd /root/bin
vi workers
hadoop01
hadoop02
hadoop03这个环境变量,后期会经常使用
vi /etc/profile.d/custom_env.sh
#! /bin/bash
# root/bin
export PATH=$PATH:/root/bin
source /etc/profile设置文件执行权限
chmod u+x /root/bin/xsyncxsync xx.txt
vi /etc/profile.d/custom_env.sh
export JAVA_HOME=/bigdata/server/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH/
>
> 重新加载配置文件
>
> source /etc/profile
5. 测试验证 <img src="image/image-20220619155330268.png" alt="image-20220619155330268" style="zoom:150%;" />
6. 同步至所有节点
```shell
# 同步到biz01, hadoop01, hadoop02, hadoop03
xsync /etc/profile/custom_env.sh
xsync /bigdata/server/jdk1.8.0_241 #我们使用了修改文件夹,这行命令,不需要了
xsync /bigdata/server/jdk1.8
#如果biz01已经传递过文件,则忽略下面的操作。
scp -r /etc/profile/custom_env.sh biz01:/etc/profile/custom_env.sh
scp -r /bigdata/server/jdk1.8.0 biz01:/bigdata/server/jdk1.8
在biz01 创建软链接
ln -s jdk1.8.0_241/ jdk1.8## 查询MySQL相关的依赖
rpm -qa |grep mysql
## 如果存在, 则通过rpm -e --nodeps 进行卸载请问bigdata /server,使用ls查看,会发现 mysql80-community-release-el7-6.noarch.rpm,多出来了。
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpmrpm -ivh mysql80-community-release-el7-6.noarch.rpmcd /etc/yum.repos.d/
`禁用8.0的版本, 启用5.7的版本`
mysql-community.repo: 用于指定下载哪个版本的安装包
#将5.7的enable设置为1, 8.0设置为0 即可。
mysql-community-source.repo: 用于指定下载哪个版本的源码## 导入签名的信息key
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
## 安装5.7
yum install -y mysql-community-serversystemctl status mysqld
systemctl start mysqld
#
systemctl enable mysqld## 查看初始密码
less /var/log/mysqld.log |grep pass
## 登录数据库
mysql -uroot -p'XRY046OefV<7'#这条命令将全局密码最小长度设置为4
set global validate_password_length=4;
#表示不使用任何密码策略。
set global validate_password_policy=0;#修改用户的密码,为123456
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
#创建一个远程登录用户,%:模糊匹配
create user 'root'@'%' identified by '123456';
## 设置远程登录权限
grant all privileges on *.* to 'root'@'%';上述设置完毕,>输入exit,
mysql -uroot -p1213456
查看编码格式; ..show variables like '%char%';
vi /etc/my.cnf
## 在mysqld下面设置
character_set_server=utf8
## 重启服务
systemctl restart mysqldhadoop01 | hadoop02 | hadoop03 | |
|---|---|---|---|
角色 | 主节点 | 从节点 | 从节点 |
NameNode | √ | ||
DataNode | √ | √ | √ |
ResourceManager | √ | ||
NodeManager | √ | √ | √ |
SecondaryNameNode | √ | ||
Historyserver | √ |
手动上传/bigdata/soft/
tar -zxvf /bigdata/soft/hadoop-3.3.3.tar.gz -C /bigdata/server/
cd /bigdata/server ln -s hadoop-3.3.3/ hadoop #我这里是直接更名
目录 | 作用 | 说明 |
|---|---|---|
bin/ | Hadoop最基本的管理脚本和使用脚本 | hdfs: 文件上传命令<br/>hadoop文件管理基础命令<br/>yarn: 资源调度相关<br/>mapred: 程序运行, 启动历史服务器 |
etc/ | Hadoop配置文件的目录 | core-site.xml<br/>hdfs-site.xml<br/>mapred-site.xml<br/>yarn-site.xml |
include/ | 对外提供的编程库头文件 | 对外提供的编程库头文件(具体动态库和静态库在lib目录中),<br />这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序 |
lib/ | 动态库和静态库 | 该目录包含了Hadoop对外提供的编程动态库和静态库,<br />与include目录中的头文件结合使用。 |
libexec/ | shell配置文件 | 各个服务对用的shell配置文件所在的目录,<br />可用于配置日志输出、启动参数(比如JVM参数)等基本信息。 |
sbin/ | Hadoop管理命令 | 主要包含HDFS和YARN中各类服务的启动/关闭脚本 |
share/ | 官方自带示例 | Hadoop各个模块编译后的jar包所在的目录 |
Hadoop安装主要就是配置文件的修改,一般在主节点进行修改,完毕后scp分发给其他各个从节点机器。
下面文件的操作目录:/bigdata/server/hadoop/etc/haddop下,不要弄错。
文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。
vim hadoop-env.sh 54行的JAVA_HOME的设置 export JAVA_HOME=/bigdata/server/jdk1.8 在文件末尾添加如下内容 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
hadoop的核心配置文件,有默认的配置项core-default.xml。 core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。
cd /bigdata/server/hadoop/etc/hadoop/ vim core-site.xml 在文件的configuration的标签中添加以下内容: <property> <name>fs.defaultFS</name> <value>hdfs://hadoop01:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/bigdata/data/hadoop</value> </property> <!-- 设置HDFS web UI用户身份 --> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <!-- 整合hive --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
HDFS的核心配置文件,有默认的配置项hdfs-default.xml。
hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。
cd /bigdata/server/hadoop/etc/hadoop/ vim hdfs-site.xml <!-- 指定secondarynamenode运行位置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop02:50090</value> </property>
MapReduce的核心配置文件,有默认的配置项mapred-default.xml。
mapred-default.xml与mapred-site.xml的功能是一样的,如果在mapred-site.xml里没有配置的属性,则会自动会获取mapred-default.xml里的相同属性的值。
cd /bigdata/server/hadoop/etc/hadoop/ vim mapred-site.xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property>
YARN的核心配置文件,有默认的配置项yarn-default.xml。
yarn-default.xml与yarn-site.xml的功能是一样的,如果在yarn-site.xml里没有配置的属性,则会自动会获取yarn-default.xml里的相同属性的值。
cd /bigdata/server/hadoop/etc/hadoop/ vim yarn-site.xml <!-- 指定YARN的主角色(ResourceManager)的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property> <!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 是否将对容器实施物理内存限制 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!-- 是否将对容器实施虚拟内存限制。 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 开启日志聚集 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置yarn历史服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://hadoop01:19888/jobhistory/logs</value> </property> <!-- 保存的时间7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
workers文件里面记录的是集群主机名。主要作用是配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候workers文件里面的主机标记的就是从节点角色所在的机器。
cd /bigdata/server/hadoop/etc/hadoop/ vim workers hadoop01 hadoop02 hadoop03
有问题:xsync 无法复制到biz01,
这里直接分发的是scp -r hadoop / hadoop02:$PWD
scp -r hadoop-3.3.3/ hadoop02:$PWD scp -r hadoop-3.3.3/ hadoop03:$PWD 在hadoop02节点配置软链接 ln -s hadoop-3.3.3/ hadoop 在hadoop03节点配置软链接 ln -s hadoop-3.3.3/ hadoop
[所有节点]配置环境变量vim /etc/profile.d/custome_env.sh export HADOOP_HOME=/bigdata/server/hadoop export PATH=PATH:HADOOP_HOME/bin: #然后执行 source /etc/profile
要启动Hadoop集群,需要启动HDFS和YARN两个集群。 注意:首次启动HDFS时,必须在主节点hadoop01对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。
hadoop namenode -format
在主节点hadoop01启动namenode
cd /bigdata/server/hadoop/bin ./hdfs --daemon start namenode
在hadoop02启动secondarynamenode
cd /bigdata/server/hadoop/bin ./hdfs --daemon start secondarynamenode
在所有节点启动datanode
cd /bigdata/server/hadoop/bin ./hdfs --daemon start datanode
查看进程情况
jpg netstat -ntlp 其中hdfs的web端口: hadoop01:9870已经可以正常访问
在主节点hadoop01启动ResouceManager
cd /bigdata/server/hadoop/bin ./yarn --daemon start resourcemanager
在所有节点启动Nodemanager
cd /bigdata/server/hadoop/bin ./yarn --daemon start nodemanager
如果想要停止某个节点上某个角色,只需要把命令中的
start改为stop即可。
如果配置了etc/hadoop/workers和ssh免密登录,则可以使用程序脚本启动所有Hadoop两个集群的相关进程,在主节点所设定的机器上执行。
<span style="color:red;font-weight:bold;font-size:20px">hdfs:/bigdata/server/hadoop/sbin/start-dfs.sh</span>
<span style="color:red;font-weight:bold;font-size:20px">yarn:/bigdata/server/hadoop/sbin/start-yarn.sh</span>
停止脚本 hdfs:/bigdata/server/hadoop/sbin/stop-dfs.sh yarn:/bigdata/server/hadoop/sbin/stop-yarn.sh
完整的一键启动hdfs和yarn脚本 start-all.sh: 启动所有的hdfs和yarn的脚本 stop-all.sh: 停止所有的hdfs和yarn的脚本



hdfs:
http://hadoop01:9870

`yarn:
http://hadoop01:8088`

JobHistory用来记录已经finished的mapreduce运行日志,日志信息存放于HDFS目录中,默认情况下没有开启此功能,需要在mapred-site.xml中配置并手动启动。
cd /bigdata/server/hadoop/etc/hadoop/ vim mapred-site.xml <property> <name>mapreduce.jobhistory.address</name> <value>hadoop02:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop02:19888</value> </property>
scp mapred-site.xml hadoop02:$PWD scp mapred-site.xml hadoop03:$PWD
我的biz01无法使用xsync mapred-site.xml复制过去,使用下面的命令,复制到biz01
scp mapred-site.xml root@biz01:/opt/servers/hadoop/etc/hadoop
cd /bigdata/server/hadoop/bin ./mapred --daemon start historyserver
http://hadoop02:19888/jobhistory
在hdfs创建一个目录: hdfs dfs -mkdir /input 上传文件到hdfs的/input目录 hdfs dfs -put start-all.sh /input #或改成hdfs dfs -put hello.txt /input 运行示例程序 hadoop jar /bigdata/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
命令查看:
hdfs dfs -ls /output

执行统计
hdfs dfs -cat /output/*



有可能会报错:Couldn’t preview the file. NetworkError: Failed to execute ‘send’ on ‘XMLHttpRequest’: Failed to load ‘http://slave1:9864/webhdfs/v1/HelloHadoop.txt?op=OPEN&namenoderpcaddress=master:9820&offset=0&_=1609724219001’.

解决方案如下所示:
在bigdata/server/hadoop/etc/hadoop下,修改hdfs-site.xml,增加如下配置:
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>Failed to load 'http://hadoop03:9864/webhdfs/v1/input/hello.txt 找个错误,相当于在windows环境下,访问一个域名hadoop03,而你现在windows系统没有配置找个域名,所以:报错。
配置浏览器所在系统的 hosts 文件 windows: 在 C:\Windows\System32\drivers\etc\hosts 末尾增加内容(Hadoop集群中各节点及主机名的映射)(下方配置仅供参考,以个人实际情况为准),增加红色框框的配置即可。
