1、下载hadoop
这里搭建最新的hadoop3.3.0版本的集群,进入hadoop官网https://hadoop.apache.org/releases.html找到要下载的版本,我这里选择的是当前最新的3.3.0版本。进入下载页面,选择清华大学的镜像(速度快)进行下载。
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
2、安装Java
hadoop是在java环境下运行的,因此在正式安装hadoop之前,需要提前装上java。有需要的可以看我另外一篇博客https://blog.csdn.net/weixin_44832837/article/details/110808500
3、hadoop安装
因为下载的是编译版本,所以解压之后,就算安装好了。但是此时的hadoop还不能用,需要我们进行一些配置。
3.1 选择安装路径
这个可以自主决定,我这里安装在/opt/hadoop
目录下。
以下命令使用普通用户执行
- 创建安装目录
mkdir /opt/hadoop
- 复制下载的文件到安装目录
cp hadoop-3.3.0.tar.gz /opt/hadoop/
- 解压
tar -xzvf /opt/hadoop/hadoop-3.3.0.tar.gz
3.2 创建dfs相关目录
cd /opt/hadoop/hadoop-3.3.0/
mkdir dfs
mkdir dfs/name
mkdir dfs/data
mkdir dfs/namesecondary
3.3 配置hadoop运行时环境
进行hadoop安装路径下的etc/hadoop
cd /opt/hadoop/hadoop-3.3.0/etc/hadoop
3.3.1 core-site.xml配置
vim core-site.xml
在configuration标签内加入以下内容,master是你的主机名,根据你的情况调整。目前不一致的话也可以使用master主机名配置,后面再修改主机名为master即可。
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>
NameNode URI.
</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description>
Size of read/write buffer used inSequenceFiles.
</description>
</property>
3.3.2 hdfs-site.xml配置
vim hdfs-site.xml
同样在configuration标签内加入以下内容,slave11是另外一个结点的主机名。dfs相关属性的配置与3.2创建的dfs目录相关。
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave11:50090</value>
<description>
The secondary namenode http server address andport.
</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<!--对应创建的name路径-->
<value>/opt/hadoop/hadoop-3.3.0/dfs/name</value>
<description>
Path on the local filesystem where the NameNodestores the namespace and transactions logs persistently.
</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<!--对应创建的data路径-->
<value>/opt/hadoop/hadoop-3.3.0/dfs/data</value>
<description>
Comma separated list of paths on the local filesystemof a DataNode where it should store its blocks.
</description>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<!--对应创建的namesecondary路径-->
<value>/opt/hadoop/hadoop-3.3.0/dfs/namesecondary</value>
<description>
Determines where on the local filesystem the DFSsecondary name node should store the temporary images to merge. If this is acomma-delimited list of directories then the image is replicated in all of thedirectories for redundancy.
</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
3.3.3 mapred-site.xml配置
vim mapred-site.xml
同样在configuration标签内加入以下内容,master是主机名。mapreduce.application.classpath的value的值与安装路径相关。
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>
Theruntime framework for executing MapReduce jobs. Can be one of local, classic oryarn.
</description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<!--jobhistory运行的主机和端口-->
<value>master:10020</value>
<description>
MapReduce JobHistoryServer IPC host:port
</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>
MapReduce JobHistoryServer Web UI host:port
</description>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/opt/hadoop/hadoop-3.3.0/etc/hadoop,
/opt/hadoop/hadoop-3.3.0/share/hadoop/common/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/common/lib/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/hdfs/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/hdfs/lib/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/mapreduce/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/mapreduce/lib/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/yarn/*,
/opt/hadoop/hadoop-3.3.0/share/hadoop/yarn/lib/*
</value>
</property>
3.3.4 yarn-site.xml配置
vim yarn-site.xml
同样在configuration标签内加入以下内容,master是主机名。
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
<description>
The hostname of theRM.
</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>
Shuffle service that needs to be set for Map Reduceapplications.
</description>
</property>
3.3.5 hadoop-env.sh配置
vim hadoop-env.sh
为了方便查看,我们统一在文件的末尾添加
export JAVA_HOME=/usr/local/java/jdk1.8.0_271
export HDFS_DATANODE_USER=root
# old export HADOOP_SECURE_DN_USER=root
#export HDFS_DATANODE_SECURE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
- JAVA_HOME是java的安装路径,根据具体java安装路径决定。
3.3.6 workers
vim workers
加入以下两行
slave11
slave12
3.3.7 添加环境变量
- 执行下面的操作需要root权限。
为了方便执行hadoop命令,需要进行环境变量的配置。
vim /etc/profile
- 添加以下内容在末尾
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 使修改生效
source /etc/profile
4、主机相关配置
- 执行下面的操作需要root权限
4.1 修改主机名
其中hostname是要修改的主机名,这里的master对应上面hadoop配置中的master。
hostnamectl set-hostname master
4.2 配置hosts文件
vim /etc/hosts
添加下面内容,注意前面的ip是名称对应主机的ip地址,比如,当前这台主机名称为master,ip为192.168.20.160
192.168.20.160 master
192.168.20.161 slave11
192.168.20.162 slave12
4.3 固定ip
如果有图形界面,可以用图形界面操作。如果没有可以按照下面步骤,效果相同。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
以下是我的文件中的所有内容,注意其中有注释的项目,关键是BOOTPROTO,IPADDR,GATEWAY和DNS1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #设置成none取消DCHP获取ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c33c20d2-7a7d-4196-9c0a-15fa53f055d6
DEVICE=ens33
ONBOOT=yes # 开机启动
IPADDR=192.168.20.160 # 你要固定的的ip,hosts文件中的配置与之对应
PREFIX=24
GATEWAY=192.168.20.2 # 你的网关
DNS1=114.114.114.114 # 114的DNS,可以用这个
PEERDNS=no
4.4 配置ssh无密码登录
- 请在root用户下执行以下命令
4.4.1 生成ssh公钥和密钥
ssh-keygen -t rsa
- 期间可以输入密码,这里不需要,所以直接回车。
4.4.2 添加公钥到授权文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
4.4.3 修改authorized_key权限
chmod 600 ~/.ssh/authorized_keys
4.4.4 测试登录
ssh master
第一次登录需要生成一些配置文件,输入yes再回车。
5、构建集群
既然是hadoop集群,当然不能只有一台主机。我们将上面配置好的master主机进行克隆。得到两台新的主机。
5.1 克隆
使用vmware虚拟机进行完整的克隆,克隆出两个主机,分别命名slave11,slave12(与上面hosts中配置的相同哦)。
5.2 修改网卡地址
克隆出来的主机的网卡mac地址是完全相同的,这显然是不对的,我们需要使用vmware重置一下两台克隆主机的mac地址。
5.2 修改克隆主机ip
参照4.3中的方法。因为主机是克隆的,因此其它都已经配置好,只需要修改IPADDR。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.20.161 # 你要固定的的ip
- 注意IPADDR与hosts文件相对应
- 分别对两台主机slave11、slave12修改
- hosts文件内容
192.168.20.160 master
192.168.20.161 slave11
192.168.20.162 slave12
5.3 修改主机名
hostnamectl set-hostname hostname
其中hostname为你要修改的主机名,在slave11上执行
hostnamectl set-hostname slave11
在slave12上执行
hostnamectl set-hostname slave12
5.4 重新配置ssh
在slave11、slave12中使用root用户
重复4.4中的步骤
5.5 ssh连接三台主机
- ssh-copy-id 命令将本机的公钥复制到其它主机,这样就能够实现无密码登录了。
在master主机,执行
ssh-copy-id slave11
再执行
ssh-copy-id slave12
在master上使用ssh以root用户身份访问salva11主机
ssh root@slave11
退出slave11主机,回到master主机
exit
访问salva12主机
ssh root@slave12
- 注意红色箭头位置,代表主机的变换
6、启动hadoop
start-all.sh
在mater主机中访问
http://master:8088/cluster
在宿主机中访问
http://192.168.20.160:8088/
7、总结
hadoop的功能十分的强大,其安装也是有点复杂。需要细心与耐心。上面的安装中,因为是开发环境,因此配置了root用户运行hadoop。如果想要用写其它用户运行的话,主要是hadoop.env.sh中
export HDFS_DATANODE_USER=root
# old export HADOOP_SECURE_DN_USER=root
#export HDFS_DATANODE_SECURE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
root改成你想要的用户。