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.3.1 ~ 3.3.4 版本上测试通过,搭建过程完全相同,部署不同版本时请自行更换路径、配置文件中的版本号。
规划
Hadoop 3 集群本文使用三节点进行演示
hostname | IP(仅供参考) | Source |
---|---|---|
hadoop1 | 10.10.10.11 | NameNode, DataNode, ResourceManager, NodeManager |
hadoop2 | 10.10.10.12 | SecondaryNameNode, DataNode, NodeManager |
hadoop3 | 10.10.10.13 | DataNode. NodeManager |
修改机器主机名,并配置 hosts
vim /etc/hosts
## 加入以下内容至文件尾部
# Hadoop
10.10.10.11 hadoop1
10.10.10.12 hadoop2
10.10.10.13 hadoop3
下载
下载安装包
## 官方 aarch64 版本,其他版本需要自行编译
wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1-aarch64.tar.gz
## 官方 amd64 版本
wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
解压
sudo tar xf hadoop-3.3.4.tar.gz -C /opt/
授权
sudo chown -R $USER:$USER /opt/hadoop-3.3.4/
部署 JDK
安装 Oracle JDK
sudo dnf localinstall jdk-8u333-linux-x64.rpm
注意:这里如果是 ARMv8 (aarch64) 架构,那么文件名略有不同,请根据实际情况修改,下文的环境变量路径同理。
配置环境变量
sudo vim /etc/profile.d/hadoop.sh
## 写入以下内容
export JAVA_HOME=/usr/java/default
export HADOOP_HOME=/opt/hadoop-3.3.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=/opt/hadoop-3.3.4/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.4/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.4/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.4/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.4/ root@hadoop2:/opt/hadoop-3.3.4/
sudo rsync -av /opt/hadoop-3.3.4/ root@hadoop3:/opt/hadoop-3.3.4/
启动集群
start-all.sh
检查集群
执行命令查看堆栈是否正常加载
$ jps
86017 NodeManager
85505 DataNode
85329 NameNode
85892 ResourceManager
集群拉起后可以使用浏览器访问来查看 Hadoop 管理页面
Sort | Address |
---|---|
NameNode | http://hadoop1:9870 |
ResourceManager | http://hadoop1:8088 |
常见问题
a) 在 WebGUI 控制台里只能看到一个 Datanodes
先检查防火墙,服务器是否存活,然后检查 hostname 配置是否唯一,都没有问题的情况下继续下面的操作。
删除 core-site.xml
中配置的数据存储目录 <name>hadoop.tmp.dir</name>
和日志目录
rm -rf /opt/hadoop-3.3.4/data/
rm -rf /opt/hadoop-3.3.4/logs/
然后重新初始化数据
hdfs namenode -format
然后再启动集群
start-all.sh
稍等片刻,然后重新查询节点信息
hdfs dfsadmin -report
可以看到 DataNodes 数量恢复正常
b) 使用命令 hadoop checknative
检查原生组件时存在组件报错 false
比如
$ hadoop checknative
Native library checking:
hadoop: true /opt/hadoop-3.3.4/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.
请参考文章 基于 aarch64 编译 Hadoop 3.3.4 Native Libraries 完整套件。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2022-11-09 17:58 PM