1、下载hadoop
这里搭建最新的hadoop3.3.0版本的集群,进入hadoop官网/releases.html找到要下载的版本,我这里选择的是当前最新的3.3.0版本。进入下载页面,选择清华大学的镜像(速度快)进行下载。
wget https://mirrors.tuna./apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
2、安装Java
hadoop是在java环境下运行的,因此在正式安装hadoop之前,需要提前装上java。有需要的可以看我另外一篇博客/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 dfsmkdir dfs/namemkdir dfs/datamkdir 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_271export HDFS_DATANODE_USER=root# old export HADOOP_SECURE_DN_USER=root#export HDFS_DATANODE_SECURE_USER=rootexport HDFS_NAMENODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root
JAVA_HOME是java的安装路径,根据具体java安装路径决定。
3.3.6 workers
vim workers
加入以下两行
slave11slave12
3.3.7 添加环境变量
执行下面的操作需要root权限。为了方便执行hadoop命令,需要进行环境变量的配置。
vim /etc/profile
添加以下内容在末尾
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0export 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 master192.168.20.161 slave11192.168.20.162 slave12
4.3 固定ip
如果有图形界面,可以用图形界面操作。如果没有可以按照下面步骤,效果相同。
vim /etc/sysconfig/network-scripts/ifcfg-ens33
以下是我的文件中的所有内容,注意其中有注释的项目,关键是BOOTPROTO,IPADDR,GATEWAY和DNS1
TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=none #设置成none取消DCHP获取ipDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33UUID=c33c20d2-7a7d-4196-9c0a-15fa53f055d6DEVICE=ens33ONBOOT=yes # 开机启动IPADDR=192.168.20.160 # 你要固定的的ip,hosts文件中的配置与之对应PREFIX=24GATEWAY=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 master192.168.20.161 slave11192.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=rootexport HDFS_NAMENODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root
root改成你想要的用户。