1、下载hadoop

这里搭建最新的hadoop3.3.0版本的集群,进入hadoop官网https://hadoop.apache.org/releases.html找到要下载的版本,我这里选择的是当前最新的3.3.0版本。进入下载页面,选择清华大学的镜像(速度快)进行下载。

hadoop 机房服务器搬迁 存放hadoop集群服务器_主机名

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。有需要的可以看我另外一篇博客

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

hadoop 机房服务器搬迁 存放hadoop集群服务器_hadoop_02

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

以下是我的文件中的所有内容,注意其中有注释的项目,关键是BOOTPROTOIPADDRGATEWAYDNS1

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

hadoop 机房服务器搬迁 存放hadoop集群服务器_vim_03

  • 期间可以输入密码,这里不需要,所以直接回车。

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

hadoop 机房服务器搬迁 存放hadoop集群服务器_hadoop 机房服务器搬迁_04

第一次登录需要生成一些配置文件,输入yes再回车。

5、构建集群

既然是hadoop集群,当然不能只有一台主机。我们将上面配置好的master主机进行克隆。得到两台新的主机。

5.1 克隆

使用vmware虚拟机进行完整的克隆,克隆出两个主机,分别命名slave11,slave12(与上面hosts中配置的相同哦)。

5.2 修改网卡地址

克隆出来的主机的网卡mac地址是完全相同的,这显然是不对的,我们需要使用vmware重置一下两台克隆主机的mac地址。

hadoop 机房服务器搬迁 存放hadoop集群服务器_vim_05

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

hadoop 机房服务器搬迁 存放hadoop集群服务器_vim_06


退出slave11主机,回到master主机

exit

hadoop 机房服务器搬迁 存放hadoop集群服务器_vim_07

访问salva12主机

ssh root@slave12

hadoop 机房服务器搬迁 存放hadoop集群服务器_hadoop 机房服务器搬迁_08

  • 注意红色箭头位置,代表主机的变换

6、启动hadoop

start-all.sh

hadoop 机房服务器搬迁 存放hadoop集群服务器_主机名_09


mater主机中访问

http://master:8088/cluster

hadoop 机房服务器搬迁 存放hadoop集群服务器_主机名_10

在宿主机中访问

http://192.168.20.160:8088/

hadoop 机房服务器搬迁 存放hadoop集群服务器_主机名_11

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改成你想要的用户。