Apache Hadoop 3.3.1 集群部署

后知后觉 暂无评论

Hadoop 是什么?它是一个大数据计算框架,实质上它是一个分布式计算引擎 + 分布式文件系统的集合。

Hadoop

Hadoop 的缔造者 Doug Cutting 在他最初开发的 Lucene 基础上与 Apache 开源基金会的开发者合作开发出了一款开源搜索引擎 Nutch 。

在 2004 年,Doug Cutting 基于谷歌公开的几篇论文,将论文中的谷歌公司开发的一个用于存储海量搜索数据而设计的专用文件系统 GFS(Google File System)实现了出来,并命名为 NDFS(Nutch Distributed File System),将另一个用于分布式计算的框架 MapReduce 实现并集成进了 Nutch。

在 2006 年,Doug Cutting 进入 Yahoo! (雅虎)进行大数据方面的工作,对 Nutch 和 NDFS 进行了升级、翻新,重命名为 Hadoop ,NDFS 也更名为 HDFS(Hadoop Distributed File System),后续又将谷歌的论文中分布式实时数据库 BigTable 实现了出来,并命名为 HBase。

至此,开源大数据 Hadoop 生态便初具雏形了。

+-----------------------------------+
|     HBase     |     MapReduce     |
| 分布式实时数据库 |    分布式计算引擎    |
|-----------------------------------+
|              HDFS                 |
|          分布式文件系统              |
+-----------------------------------+
小贴士:顺便一提的是此项目名字的来源是 Doug Cutting 儿子的一个黄色玩具大象叫 Hadoop,因此该项目的图标是一个奔跑的黄色大象。

基础

推荐使用普通用户进行安装和配置,需要为普通用户开通 sudo 权限,并且使用普通用户和 root 用户对所有节点配置免密认证,方便后续操作。

## 关闭 SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
## 关闭 Firewalld
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

规划

Hadoop 3 集群本文使用三节点进行演示

hostnameIP(仅供参考)Source
hadoop110.10.10.11NameNode, DataNode, ResourceManager, NodeManager
hadoop210.10.10.12SecondaryNameNode, DataNode, NodeManager
hadoop310.10.10.13DataNode. NodeManager

修改机器主机名,并配置 hosts

vim /etc/hosts
## 加入以下内容至文件尾部
# Hadoop
10.10.10.11 hadoop1
10.10.10.12 hadoop2
10.10.10.13 hadoop3

下载

下载安装包

wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1-aarch64.tar.gz

解压

sudo tar xf hadoop-3.3.1-aarch64.tar.gz -C /opt/

授权

sudo chown -R $USER:$USER /opt/hadoop-3.3.1/

部署 JDK

安装 oracle java jdk

sudo dnf localinstall jdk-8u333-linux-aarch64.rpm
注意!这里如果是 amd64 架构,那么文件名略有不同,请根据实际情况修改,下文的环境变量路径同理。

配置环境变量

sudo vim /etc/profile.d/hadoop.sh
## 写入以下内容
export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/opt/hadoop-3.3.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=/opt/hadoop-3.3.1/etc/hadoop
export HIVE_HOME=/opt/apache-hive-3.1.3-bin
export PATH=$HIVE_HOME/bin:$PATH
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.7.1-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export HBASE_HOME=/opt/hbase-2.4.15
export PATH=$HBASE_HOME/bin:$PATH

生效环境变量或者重新登录终端

source /etc/profile

修改配置

进入产品目录

cd $HADOOP_HOME

a) 修改 etc/hadoop/hadoop-env.sh 找到 JAVA_HOME 改为

JAVA_HOME=/usr/java/jdk1.8.0_333-aarch64

b) 修改 etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop-3.3.1/data</value>
  </property>
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
  </property>
</configuration>

c) 修改 etc/hadoop/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop2:9868</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
</configuration>

d) 修改 etc/hadoop/mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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>
</configuration>

e) 修改 etc/hadoop/yarn-site.xml

<?xml version="1.0"?>
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop1</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
  <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</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.nodemanager.remote-app-log-dir</name>
    <value>/opt/hadoop-3.3.1/nodemanager-remote-app-logs</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>file:///opt/hadoop-3.3.1/nodemanager-logs</value>
  </property>
  <property>
    <name>yarn.nodemanager.delete.debug-delay-sec</name>
    <value>604800</value>
  </property>
</configuration>

f) 修改 etc/hadoop/workers

hadoop1
hadoop2
hadoop3

初始化 Hadoop

格式化 NameNode

hdfs namenode -format

将配置完毕的产品分发到所有节点上

sudo rsync -av /opt/hadoop-3.3.1/ root@hadoop2:/opt/hadoop-3.3.1/
sudo rsync -av /opt/hadoop-3.3.1/ root@hadoop3:/opt/hadoop-3.3.1/

启动集群

start-all.sh

检查集群

执行命令查看堆栈是否正常加载

$ jps
86017 NodeManager
85505 DataNode
85329 NameNode
85892 ResourceManager

集群拉起后可以使用浏览器访问来查看 Hadoop 管理页面

SortAddress
NameNodehttp://hadoop1:9870
ResourceManagerhttp://hadoop1:8088

常见问题

a) 在 WebGUI 控制台里只能看到一个 Datanodes

先检查防火墙,服务器是否存活,然后检查 hostname 配置是否唯一,都没有问题的情况下继续下面的操作。

删除 core-site.xml 中配置的数据存储目录 <name>hadoop.tmp.dir</name> 和日志目录

rm -rf /opt/hadoop-3.3.1/data/
rm -rf /opt/hadoop-3.3.1/logs/

然后重新初始化数据

hdfs namenode -format

然后再启动集群

start-all.sh

稍等片刻,然后重新查询节点信息

hdfs dfsadmin -report

可以看到 DataNodes 数量恢复正常

b) 使用命令 hadoop checknative 检查原生组件时报错

比如

$ hadoop checknative
Native library checking:
hadoop:  true /opt/hadoop-3.3.1/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
zstd  :  true /lib64/libzstd.so.1
bzip2:   true /lib64/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L:   false Loading ISA-L failed: Failed to load libisal.so.2 (libisal.so.2: cannot open shared object file: No such file or directory)
PMDK:    false The native code was built without PMDK support.

其中

Object NamePackage NameSource Name
zlibzlib-devel/
zstdzstd-devel/
bzip2bzip2-devel/
opensslopenssl-devel/
ISA-L/github.com
PMDK/pmem.io

ISA-L 可以在 ARMv8(aarch64) 和 AMD64(x86_64) 架构上编译

## 启用 PowerTools 仓库(如果提示命令不存在,则需要安装 dnf-plugins-core 后再次尝试)
sudo dnf config-manager --set-enabled powertools
## 安装依赖
sudo dnf install gcc make autoconf automake libtool git nasm
## 克隆源码
git clone https://github.com/01org/isa-l/
## 编译
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
sudo make install

PMDK(Persistent Memory Development Kit) 可以使用发行版的包管理器进行安装,也可以编译安装

## 安装依赖
sudo dnf install ndctl-devel daxctl-devel pandoc cmake gcc-c++
## 克隆源码
git clone https://github.com/pmem/pmdk
## 编译
make
sudo make install prefix=/usr

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
回复 / 查看「历史评论
回答18+40=