桥接网络配置
输入命令:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置好ip地址网关等
ONBOOT="yes"
IPADDR=10.1.12.197
GATEWAY=10.1.0.1
NETMASK=225.225.192.0
DNS1=114.114.114.114
DNS2=8.8.8.8
重启网络:
service network restart #重启网卡network服务
systemctl restart network #重启网卡
systemctl enable network #开机启动网卡
NAT网络配置
设置网络
点击更改设置
设置IP地址和子网掩码,一般都有自动生成的ip如果有默认即可,没有ip自行设置不用和我的ip一样,设置好后点击NAT设置
设置网关,这个一般自动生成的有,有则默认没有自行设置
勾选如下图选项然后确定
设置Windows网络,在任务栏中点击搜索“网络连接”点击“查看网络连接”
双击打开
输入命令配置ifcfg-ens33:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
将做如图设置:
MACADDR=preserve
ETHTOOL_OPTS="autoneng on"
IPADDR=ip地址和VMnet8处于同一网段即可
NETMASK=子网掩码
GATEWAY=默认网关
DNS1=DNS服务器ip
DNS2=DNS服务器ip
使用cmd可查看本机IP及DNS服务:
配置完后按键盘ESC键
然后shift+:
输入wq保存退出
service network restart //输入命令重启网络
ping一下网络是否连通,如图则表示ping通了
ping百度和宿主机
设置时间同步
关闭防火墙操作:
firewall-cmd --state 查看防火墙状态“not running”出现表示关闭,“running”表示开启
systemctl stop firewalld.service 关闭防火墙
service firewalld restart 重启防火墙
输入命令进入:
crontab -e
输入以下内容,并保存退出:
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
输入命令:
/usr/sbin/ntpdate cn.pool.ntp.org
出现如图配置成功:
搭建Hadoop集群
一、配置虚拟机集群环境
1、关闭防火墙
查看防火墙当前状态(默认running)
firewall-cmd --state
或
systemctl status firewalld.service
关闭防火墙(运行状态变为 not running)
systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
重新启动防火墙
systemctl start firewalld.service
使防火墙开机启动
systemctl enable firewalld.service
2、新建安装目录(记住不然找不到你就完了)
目录“/opt”常用用于存放第三方软件包和数据文件。创建一个文件夹“packages”,用来存放软件安装包
mkdir /opt/packages
创建jdk安装目录
mkdir /usr/local/java
创建hadoop安装目录
mkdir /usr/local/hadoop
mkdir /usr/local/hadoop/temp
mkdir /usr/local/hadoop/dfs
mkdir /usr/local/hadoop/dfs/name
mkdir /usr/local/hadoop/dfs/data
创建zookeeper安装目录
mkdir /usr/local/zookeeper
3、下载、安装和配置JDK
- 下载
根据自己需要下载安装jdk版本
在本文中使用的安装包:百度网盘链接:https://pan.baidu.com/s/1GgjsA0SUqtAARerLR9EAWA 提取码:ufsh
官网下载地址:https://www.oracle.com/ - 卸载centOS 7系统预装的jdk
查看系统已安装的OpenJDk
rpm -qa|grep openjdk
将查到的OpenJDk全部卸载
rpm -e --nodeps
- 将下载的jdk上传到虚拟机
将jdk上传到“/opt/packages” - 安装配置jdk
将jdk解压到“/usr/local/Java”
tar -zxvf jdk-19_linux-x64_bin.tar.gz -C /usr/local/java
修改“/etc/profile”,配置jdk系统环境变量
vim /etc/profile
在“/etc/profile”文件末尾加入以下类容
export JAVA_HOME=/usr/local/java/jdk1.8.0_351
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
刷新“/etc/profile”
source /etc/profile
查看jdk信息验证jdk是否安装成功,如图说明成功了
java -version
4、克隆虚拟机和配置主机IP映射
- 克隆虚拟机克隆两台分别命名为“hadoop02”和“hadoop03”
- 修改另外两台hadoop的主机名
hostnamectl set-hostname [主机名]
- 修改另外两台hadoop的IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络
service network restart
- 配置主机映射
在三个节点上分别操作,修改hosts文件
vim /etc/hosts
在末尾处添加以下内容
192.168.237.XXX hadoop01
192.168.237.XXX hadoop02
192.168.237.XXX hadoop03
三台主机相互ping一下是否能ping通
5、配置集群各节点SSH免密码登录
分别在3个节点,生成密钥文件
ssh-keygen -t rsa
分别在3个节点上执行
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
在各节点用以下命令测试SSH免密登录
ssh hadoop01
ssh hadoop02
ssh hadoop03
二、搭建Hadoop高可用集群
1、安装配置与配置ZooKeeper
- 下载地址:https://archive.apache.org/dist/zookeeper/
- 将下载的ZooKeeper上传到hadoop01节点的“/opt/packages”
cd /opt/packages
- 将ZooKeeper压缩包减压到“/opt/programs”
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/local/zookeeper
- 切换到ZooKeeper安装目录
cd /usr/local/zookeeper
在该目录下分别创建文件夹“data”和“logs”
mkdir data
mkdir logs
切换到新建data目录下,新建一个名为“myid”的文件,并写入id号“1”
echo '1'>myid
- 进入ZooKeeper安装目录下的“conf”文件夹,将“zoo_sample.cfg”文件复制一份并重命名为“zoo.cfg”
cd /usr/local/zookeeper/apache-zookeeper-3.7.1-bin/conf
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg文件
vim zoo.cfg
将文件中的“dataDir”
dataDir=/usr/local/zookeeper/data
再在文件末尾添加以下内容
dataLogDir=/usr/local/zookeeper/logs
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
- 将hadoop01整个节点的ZooKeeper安装目录远程复制到hadoop02和hadoop03节点
scp -r /usr/local/zookeeper root@hadoop02:/usr/local
scp -r /usr/local/zookeeper root@hadoop03:/usr/local
此处容易报错的几点:
- 错误1:“Permission denied, please try again.”,密码错误重新输入正确的密码即可,因为我们在Linux系统中输入密码是无法明码显示,所以在输入密码时要输入正确密码,防止在一些操作中造成不可逆结果。如图
- 错误2:“No such file or directory”,没有这样的文件或目录,请仔细查看直接的文件夹名或者目录是否输入正确
- 错误3:“Permission denied”,没有权限,请将普通用户名改为root用户,比如“liao@hadoop02”中的“liao”改为“root@hadoop02”,像下面
scp -r /usr/local/zookeeper liao@hadoop02:/usr/local
↓↓
scp -r /usr/local/zookeeper liao@hadoop02:/usr/local
- 复制完成后,将hadoop02和hadoop03节点中的myid文件值修改为对应的数字,
即:将hadoop02节点中的/usr/local/zookeeper/apache-zookeeper-3.7.1/data/myid文件中的值改为2,
将hadoop03节点中的/usr/local/zookeeper/apache-zookeeper-3.7.1/data/myid文件中的值改为3。如图演示: - 在3个节点中分别执行以下命令,修改文件“/etc/profile”,配置ZooKeeper环境变量
vim /etc/profile
在文件末尾添加以下类容:
export ZOOKEEPER_HOME=/usr/local/zookeeper/apache-zookeeper-3.7.1-bin
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
保存之后刷新“profile”文件,使修改生效
source /etc/profile
- 重启Linux系统
- 然后执行以下命令,启动ZooKeeper集群。启动成功后如下图所示:
zkServer.sh start # 启动ZooKeeper服务命令
zkServer.sh stop # 关闭ZooKeeper服务命令
- 在3个节点上分别执行下面命令来查看ZooKeeper集群状态,分别如图所示:
zkServer.sh status
2、安装与配置Hadoop
- 基本信息
主机名 | IP | 用户 |
hadoop01 | 192.168.237.135 | liao |
hadoop02 | 192.168.237.136 | liao |
hadoop03 | 192.168.237.137 | liao |
- 安装包等信息
安装包名 | 安装包路径 |
hadoop-3.3.4.tar.gz | /opt/packages |
jdk-8u351-linux-x64.tar.gz | /opt/packages |
- 下载
- 下载地址:https://archive.apache.org/dist/hadoop/core
- 我这里下载的版本是3.3.4
- 跳转到此页找到后缀为**
.tar.gz
** 压缩包**(警告:不管你用什么版本,下载时一定要下载后缀带.tar.gz
的压缩包)**
- 将下载的压缩包上传到hadoop01节点的“/opt/packages”目录下,然后进入该目录
cd /opt/packages
- 将“hadoop-3.3.3.tar.gz”解压到“/opt/programs”目录下
tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/hadoop
- 配置环境变量
修改profile
vi /etc/profile
末尾添加:
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重启profile
source /etc/profile
- 进入“/usr/local/hadoop/hadoop-3.3.3/etc/hadoop/”目录,依次修改配置文件
hadoop-env.sh
、yarn-env.sh
、core-site.xml
、hdfs-site.xml
、mapred-site.xml
、yarn-site.xml
- 修改配置文件hadoop-env.sh
vim hadoop-env.sh
找到图中“# The java implementation to use. By default, this environment”位置,修改jdk路径
vim hadoop-env.sh
- 修改配置文件yarn-env.sh
vim yarn-env.sh
在开头处加入
export JAVA_HOME=/usr/local/java/jdk1.8.0_351
- 修改配置文件core-site.xml
vim core-site.xml
将“<.configuration>”和"<./configuration>"标签的内容修改如下:
注意要修改的地方
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/temp</value><!--这个是之前创建temp文件夹路径-->
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
- 修改配置文件hdfs-site.xml
vim hdfs-site.xml
将“<.configuration>”和"<./configuration>"标签的内容修改如下:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:9001</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<!-- 设置namenode.name目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value><!--这个是之前创建name文件夹路径-->
</property>
<!-- 设置namenode.data目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value><!--这个是之前创建data文件夹路径-->
</property>
<!-- 设置副本个数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 开启webHDFS -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.web.ugi</name>
<value>supergroup</value>
</property>
</configuration>
- 修改配置文件mapred-site.xml
vim mapred-site.xml
将“”和""标签的内容修改如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value><!--将“hadoop01”修改为自己的主机名-->
</property>
</configuration>
- 修改配置文件yarn-site.xml
vim yarn-site.xml
将“<.configuration>”和"<./configuration>"标签的内容修改如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop01:8032</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop01:8030</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop01:8031</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop01:8033</value><!--将“hadoop01”修改为自己的主机名-->
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01:8088</value><!--将“hadoop01”修改为自己的主机名-->
</property>
</configuration>
- 修改配置文件workers
将内容修改如下:
hadoop01
hadoop02
hadoop03
- 执行以下命令将hadoop01节点的Hadoop安装目录远程复制到hadoop02和hadoop03节点
scp -r /usr/local/hadoop/ root@hadoop02:/usr/local/
scp -r /usr/local/hadoop/ root@hadoop03:/usr/local/
- 在主节点的hadoop目录
执行命令
./bin/hdfs namenode -format
- 报错解决
hadoop-3.1.0启动hadoop集群时会报如下错误:
root@hadoop01:~# start-all.sh
Starting namenodes on [hadoop]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
2018-07-16 05:45:04,628 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
......
解决方案:
source /etc/profile
然后在末尾加入加入如下的内容
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
重启profile
source /etc/profile
3、启动与测试Hadoop
- 由于第一次启动Hadoop之前,需要格式化NameNode。格式化NameNode需要先启动JournalNode(以后就不必了)。在3个节点上分别执行以下命令,启动JournalNode:
hdfs --daemon start journalnode
- 格式化NameNode
hdfs namenode -format
- 格式化ZKFC
hdfs zkfc -formatZK
- 主节点上在hadoop目录下执行:
./sbin/start-all.sh
5.在浏览器中输入“主机名或IP:9870”,注意:3.x 版本50070端口 改为9870端口了检查。 namenode 和 datanode 是否正常。UI 页面如下图所示:
6.在浏览器中输入“主机名或IP:8088”, 检查 Yarn 是否正常,页面如下图所示: