文章目录
前言
上一节介绍了虚拟机的下载以及Java环境的搭建,这节主要讲解Hadoop集群的搭建
一、集群环境的下载及其配置
我们需要现在一台机器上配置好 hadoop,然后再把它拷贝到其他机器上,这里我选择在master 也就是要做为 nameNode 的那台机器
1.下载hadoop
再次强调 建议在克隆之前,先在一台机器上,下载、解压好再克隆,这样多台机器就都有了
下载
注:需要提前安装wget包 命令: yum install wget
官方地址:
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
国内镜像地址(建议清华大学):
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/stable/hadoop-3.3.0.tar.gz
解压
下载完成后,下一步是解压
我是解压到/usr/local/hadoop
目录下,其中/hadoop
目录是我预先创建的
mkdir usr/local/hadoop
快速解压(参考别的博主):
tar -zxvf hadoop-3.3.0.tar.gz -C /usr/local/hadoop
如果遇到tar: Error is not recoverable: exiting now 错误,可参考https://stackoverflow.com/questions/3950839/tar-error-is-not-recoverable-exiting-now
简言之,分解压缩步骤,进入目录 /usr/local/hadoop 逐步执行如下代码
gunzip hadoop-3.3.0.tar.gz
tar xf hadoop-3.3.0.tar
2.配置 hadoop 环境变量
vi /etc/profile
在末尾追加hadoop环境
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
配置完成之后,刷新
nmcli c reload
查看变量是否生效
hadoop version
显示如下信息即正确
配置hadoop 核心环境
配置 hadoop-env.sh
首先,查看 JAVA_HOME 的地址
echo $JAVA_HOME
配置 JAVA_HOME 路径
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
末尾追加以下代码
export JAVA_HOME=JAVA_HOME的地址
export JAVA_HOME=${JAVA_HOME}
如下图
配置 core-site.xml
创建 HDFS 数据存储目录,我的存储路径是放在$HADOOP_HOME
目录下的 /hdfs_data/
mkdir /usr/local/hadoop/hadoop-3.3.0/hdfs_data
mkdir /usr/local/hadoop/hadoop-3.3.0/tmp
vi $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<!-- 设置 NameNode 的ip及端口,这里的ip也可以换成主机名 -->
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<!-- 存放数据的临时目录,注意这里的路径要写绝对路径,并且不要使用 ~ 等符号 -->
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-3.3.0/tmp</value>
</property>
<property>
<!-- 设置 HDFS 数据在本地文件系统上的存储 -->
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hadoop-3.3.0/hdfs_data</value>
</property>
</configuration>
配置 hdfs-site.xml
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<!-- 设置 SecondaryNameNode 的ip及端口,这里的ip也可以换成主机名-->
<name>dfs.namenode.secondary.http-address</name>
<value>slaver001:9868</value>
</property>
</configuration>
配置 mapred-site.xml
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<!-- 设置 mapreduce 使用 yarn 框架 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置 yarn-site.xml
vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<!-- 设置 yarn 的混洗方式为 mapreduce 默认的混洗算法 -->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!-- 指定ResourceManager的地址 -->
<name>yarn.resourcemanager.address</name>
<value>slaver002</value>
</property>
</configuration>
配置 workers
vi $HADOOP_HOME/etc/hadoop/workers
删除里面初始的内容,写入以下主机名称
master
slaver001
slaver002
禁用防火墙
关闭防火墙
systemctl stop firewalld
取消开机启动
systemctl disable firewalld
至此,单台机器的环境配置结束,下一步克隆虚拟机,并配置 ssh 免密登陆
二、克隆虚拟机及其相应设置
1. 克隆虚拟机
VMware Fusion 关闭虚拟机,默认为挂起。 点击导航栏的 VMware Fusion—> 偏好设置—> 关闭虚拟机时: 将挂起改为 关闭。 因为虚拟机的克隆要在完全关闭的情况下进行
右键刚才创建的虚拟机,选择 创建完整克隆
创建俩个虚拟机启动后,输入以下代码 修改主机名为之间预设的,我这里是slaver001,slaver002
hostnamectl set-hostname 主机名
分别进入slaver001 和 slaver002
vi /etc/sysconfig/network-scripts/ifcfg-网卡名
只需修改IPADDR这项,相应的主机对应相应的ip,我这里是 slaver001 = 192.168.148.102, slaver = 192.168.148.103
测试虚拟机之间是否通畅
ping ip或者设置的主机名
如果发生问题,需要排查之前的ip,网关等设置是否正确,可参考https://blog.csdn.net/qq_27283619/article/details/103706736
2.配置 ssh 免密登陆
配置 ssh 免密登陆有两个目的
- 让 nameNode 下发命令给 dataNode
- 让 resourceManager 下发命令给 nodeManager
相对的,我们也需要配置 nameNode 免登陆 nameNode,resourceManager 免的登陆 nodeManager。
按照文章开始的功能划分,即
- 配置master 免登陆slaver001,slaver002
- 配置slaver001免登陆master,slaver002
Linux 免密登陆另一台 Linux
假设有两台 Linux, 机器1、机器2。如果我们需要让 机器1 免密登陆 机器2,需要如下操作
生成密钥对
在 机器1 下生成密钥对,每步都输入回车(表示不使用私钥密码)
ssh-keygen
如下
查看生成的密码
注:需要预先安装tree,命令:yum install tree
tree ~/.ssh -C -pf
id_rsa
是私钥 ,id_rsa.pub
是公钥
将公钥发给其他机器
ssh-copy-id 机器2的ip
免密登陆其他机器
完成上面步骤后,机器1就可以免密登陆机器2了
在机器1上
ssh 机器2的ip
第一次需要输入机器2的密码 之后即可以快速切换主机,这样我们可以在一个shell里使用多个虚拟机
三、hadoop的启动
格式化 HDFS(只需在第一次启动时执行)
$HADOOP_HOME/bin/hdfs namenode -format
显示has been successfully formatted
则表示格式化成功
格式化成功后,查看core-site.xml
里hadoop.tmp.dir
指定的目录下是否有了 dfs 目录
tree -C -pf $HADOOP_HOME/tmp/
cat $HADOOP_HOME/tmp/dfs/name/current/VERSION
启动集群
在 master上执行如下命令
start-dfs.sh
如遇到
使用
vi $HADOOP_HOME/sbin/ 要打开的文件名
在所有机器start-dfs.sh
、stop-dfs.sh
文件头部添加如下内容
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh
、stop-yarn.sh
文件头部添加如下内容
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
配置好之后重新启动
如遇到【hadoop】/sbin/start-dfs.sh Error: JAVA_HOME is not set and could not be found.可参考https://blog.csdn.net/CGD_ProgramLife/article/details/82703073
启动yarn
ssh连接到ResourceManager即slaver002,执行
start-yarn.sh
服务验证
在任意主机执行
jps
即启动成功
总结
至此hadoop环境的搭建就完成了,接下来就是部署spark,之后我们就可以开始使用spark进行数据分析的相关工作了,感谢大家