Hadoop 完全分布式安装与部署

Hadoop官方指导传送门 传送门

截止当前(2020年01月08日),Hadoop最新版本是 3.2.1 ,本文依据 3.2.1 部署安装

本篇文章只介绍了如何安装和配置范围从几个节点到具有数千个节点的超大型Hadoop集群。 要快速天眼使用Hadoop,可能只需要将其安装在单台服务器上。

本篇文章不涉及hadoop安全或高可用性等高级话题。

服务器准备

服务器规划,提供四台服务器,OS 为 centos 7

修改主机名

hostnamectl set-hostname centos-x
复制代码

x 为我们每台服务器

完成我们的主机如下

主机名 IP 预备分配服务
centos-1 10.211.55.11 DataNode NodeManager NameNode
centos-2 10.211.55.12 DataNode NodeManager SecondaryNameNode
centos-3 10.211.55.13 DataNode NodeManager ResourceManager
centos-4 10.211.55.14 DataNode NodeManager HistoryServer

安装openJDK-8

通过yum安装jdk

yum update
yum install java-1.8.0-openjdk-devel -y
复制代码

修改 环境变量

vim /etc/profile
复制代码

在尾部新增

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=$JAVA_HOME/bin:$PATH
复制代码

配置服务器静态IP

vim /etc/sysconfig/network-scripts/ifcfg-enp0s5
复制代码

完整配置如下

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 修改dhcp 为 static
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="enp0s5"
UUID="e2bda9d6-dc4f-4513-adbc-fdf3a1e2f384"
DEVICE="enp0s5"
ONBOOT="yes"

# 新增
GATEWAY=10.211.55.1 # 修改网关,虚拟机需要注意修改nat
IPADDR=10.211.55.12 # 分配IP地址
NETMASK=255.255.255.0 # 子网掩码
DNS1=223.5.5.5 # 使用阿里公共DNS1
DNS2=223.6.6.6 # 使用阿里公共DNS2
复制代码

增加 dhfs 用户

通常,建议HDFS和YARN以单独的用户身份运行。

在大多数安装中,HDFS进程以“hdfs”执行。YARN通常使用“yarn”帐户

adduser hdfs
passwd hdfs # 修改密码
复制代码

设置SSH无密码登录

四台服务器全部设置

ssh-keygen -t rsa
复制代码
  1. 分配ssh key
ssh-copy-id centos-1
ssh-copy-id centos-2
ssh-copy-id centos-3
ssh-copy-id centos-4
复制代码

安装部署Hadoop

切换至 hdfs 用户

su - hdfs
复制代码

下载

curl http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz -O
复制代码

解压

这里直接解压到 /usr/local/

tar -zxf hadoop-3.2.1.tar.gz  -C /usr/local/hadoop-3.2.1
复制代码

修改环境变量

sudo vim /etc/profile
复制代码

修改原先配置为

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export HADOOP_HOME=/usr/local/hadoop-3.2.1

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
复制代码

修改配置

这里我们进入 $HADOOP_HOME 文件夹开始操作

mkdir -p $HADOOP_HOME/hdfs/data
mkdir -p $HADOOP_HOME/tmp
复制代码

配置hadoop-env.sh

sudo vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
复制代码

增加 或 修改

export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
复制代码

配置core-site.xml

vim etc/hadoop/core-site.xml
复制代码

configuration配置如下

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://10.211.55.11:4000</value>
        <description>HDFS的URI,文件系统://namenode标识:端口号</description>
    </property>
    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-3.2.1/tmp</value>
        <description>namenode上本地的hadoop临时文件夹</description>
    </property>

</configuration>
复制代码

fs.defaultFSNameNode 的地址。 hadoop.tmp.dirhadoop 临时目录的地址,默认情况下, NameNodeDataNode 的数据文件都会存在这个目录下的对应子目录下。

配置hdfs-site.xml

vim etc/hadoop/hdfs-site.xml
复制代码
<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>10.211.55.12:50090</value>
    </property>
    <property>
        <name>dfs.http.address</name>
        <value>10.211.55.11:50070</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-3.2.1/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-3.2.1/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>
复制代码

dfs.namenode.secondary.http-address 是指定 secondaryNameNode 的http访问地址和端口号,因为在规划中,我们将 centos-2 规划为 SecondaryNameNode 服务器。

dfs.http.address 配置的是本机默认的 dfs 地址,有些服务器可以不用配置,我的试过了,必须加上,不然后续网页打不开。 dfs.namenode.name.dir 指定name文件夹, dfs.datanode.data.dir 指定data文件夹 dfs.datanode.data.dir 指定副本数,一般小于服务器数,我们设置为 3

配置workers

hadoop2.x 中叫做 slaves ,在 3.x 版本中改名 workers 。 用来指定 HDFS 上有哪些 DataNode 节点,以及各个节点使用 ip地址 或者 主机名 ,用换行分隔。

vim etc/hadoop/workers
复制代码

这里我们就使用主机名

centos-1
centos-2
centos-3
centos-4
复制代码

配置yarn-site.xml

vim etc/hadoop/yarn-site.xml
复制代码

配置如下

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>centos-3</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
  </property>
</configuration>
复制代码

按照规划使用 centos-3 做为 resourcemanager 使用 yarn.log-aggregation-enable 开启日志聚合, yarn.log-aggregation.retain-seconds 配置聚集的日志在HDFS上最多保存多长时间。

配置mapred-site.xml

vim etc/hadoop/mapred-site.xml
复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>centos-4:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>centos-4:19888</value>
    </property>
</configuration>
复制代码

mapreduce.framework.name 设置 mapreduce 任务运行在yarn上。 mapreduce.jobhistory.address 是设置 mapreduce 的历史服务器安装在 centos-4 上。 mapreduce.jobhistory.webapp.address 是设置历史服务器的web页面地址和端口号。 yarn.app.mapreduce.am.env , mapreduce.map.env , mapreduce.reduce.env 需要设置为 HADOOP_MAPRED_HOME=${HADOOP_HOME} ,否则在运行yarn程序的时候会出现jar包未找到的错误。

启动 hadoop集群

完成上述所有必要的配置后,将文件分发到所有服务器的 HADOOP_CONF_DIR 目录下 (/user/local) 。在所有计算机上,该目录应该是相同的目录。

格式化

要启动Hadoop集群,需要同时启动 HDFSYARN 集群。 首次启动 HDFS 时, 必须 对其进行格式化。将新的分布式文件系统格式化为 hdfs .

$HADOOP_HOME/bin/hdfs namenode -format <群集名称>
复制代码

集群名称可以不填写,不出意外,执行完成后 $HADOOP_HOME/hdfs/data 中就有东西了。

启动 HDFS

如果配置了 workersssh互信 我们可以

$HADOOP_HOME/sbin/start-dfs.sh
复制代码

启动 YARN

如果配置了workers和ssh互信我们可以

$HADOOP_HOME/sbin/start-yarn.sh
复制代码

若上面没有配置的 workersssh互信 我们可以

  1. 启动 namenode
$HADOOP_HOME/bin/hdfs --daemon start namenode
复制代码
  1. 启动 DataNode
$HADOOP_HOME/bin/hdfs --daemon start datanode
复制代码

启动 NodeManager

规划在 centos-4 上,因此我们在 centos-4 上执行

$HADOOP_HOME/bin/yarn --daemon start nodemanager
复制代码

启动 ResourceManager

规划在 centos-3 上,因此我们在 centos-3 上执行

$HADOOP_HOME/bin/yarn --daemon start resourcemanager
复制代码

启动 HistoryServer

规划在 centos-4 上,因此我们在 centos-4 上执行

$HADOOP_HOME/bin/mapred --daemon start historyserver
复制代码

查看HDFS Web页面

位于 centos50070 端口: http://centos-1:50070/

查看YARN Web 页面

位于 centos-38088 端口: http://centos-3:8088/

查看历史WEB页面

位于 centos-419888 端口: http://centos-4:19888/

测试

为了测试我们使用 wordcount 来测试

  1. 新建文件
sudo vim /opt/word.txt
复制代码
  1. 文本内容
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop
复制代码
  1. 新建 hadoop 里文件夹 demo
hadoop fs -mkdir /demo
复制代码
  1. 文件写入
hdfs dfs -put /opt/word.txt /demo/word.txt
复制代码
  1. 执行输入到 hadoo p的 /output
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /demo/word.txt /output
复制代码
  1. 查看文件列表
hdfs dfs -ls /output
复制代码
Found 2 items
-rw-r--r--   3 hdfs supergroup          0 2020-01-07 02:20 /output/_SUCCESS
-rw-r--r--   3 hdfs supergroup         60 2020-01-07 02:20 /output/part-r-00000
复制代码
  1. 查看文件中内容
hdfs dfs -cat /output/part-r-00000
复制代码
2020-01-07 16:40:19,951 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
hadoop	3
hbase	1
hive	2
mapreduce	1
spark	2
sqoop	1
storm	1
复制代码
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章