快速部署Hadoop单节点

简介

  • Hadoop: 1个使用Java编写的Apache开放源代码框架,它允许使用简单的编程模型跨大型计算机的大型数据集进行分布式处理。
  • 基于Hadoop框架工作的应用程序可以在跨计算机群集提供分布式存储和计算的环境中工作。
  • Hadoop旨在从单一服务器扩展到数千台机器,每台机器都提供本地计算和存储。

环境

网址

  • Hadoop《传送门》
  • JDKHadoop的兼容性:《传送门》
  • 官方教程:《传送门》

版本

  • OSCentOS 7.7Ubuntu 16.04
  • JDK1.8
  • Hadoop3.2.1

架构

  • Hadoop框架包括以下5个模块:
    • Hadoop Common:支持其他Hadoop模块的通用Java库和实用程序,并包含启动HadoopJava文件和脚本。
    • Hadoop Distributed File SystemHDFS,提供对应用程序数据的高吞吐量访问的分布式文件系统。
    • Hadoop YARN:用于作业调度和集群资源管理的框架。
    • Hadoop MapReduce:基于YARN的大型数据集并行处理系统。
    • Hadoop OzoneHadoop的对象存储。
  • Hadoop的框架最核心的设计:
    • HDFS:为海量的数据提供了存储。
    • MapReduce:为海量的数据提供了计算能力。

目标

  • Hadoop 3.X目前仅支持JDK 8,从Hadoop 3.3开始将支持JDK 11
  • 本文介绍了如何部署和配置单节点Hadoop的安装,以便您可以使用Hadoop MapReduceHDFS执行一些简单的操作。

部署

基础

CentOS

  • 关闭SELinux
1
2
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
  • 关闭防火墙:
1
2
systemctl stop firewalld.service
systemctl disable firewalld.service

Common

  • 修改主机名:
1
echo "hadoop" > /etc/hostname
  • 内部解析:
1
2
echo '127.0.0.1 localhost' > /etc/hosts
echo '172.18.20.10 hadoop' >> /etc/hosts
  • 提示符:
1
echo 'export PS1="\u@\[\e[1;93m\]\h\[\e[m\]:\w\\$\[\e[m\] "' >> /root/.bashrc
  • 添加用户:
1
2
groupadd -r -f hadoop && useradd -r -g hadoop -G sudo -m hadoop -s /bin/bash
echo "hadoop:hadoop" | chpasswd
  • 免密通信:
1
2
3
ssh-keygen -t rsa -P "" -C "Hadoop" -f '/root/.ssh/id_rsa' >/dev/null 2>&1
echo "" >> /root/.ssh/authorized_keys
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
1
2
3
rm -rf /home/hadoop/.ssh/
cp -ar /root/.ssh /home/hadoop/
chown -R hadoop:hadoop /home/hadoop

JDK

  • 依照JDKHadoop的兼容性,从Oracle下载最新版本的JDK二进制文件。
  • 参考《Linux上安装JDK》,完成JDK的安装。

Hadoop

  • 依照JDKHadoop的兼容性,从Apache下载最新版本的Hadoop二进制文件。
  • 解压到指定目录:
1
tar -zxvf hadoop-3.2.1.tar.gz -C /opt/
  • 创建软连接:
1
ln -sf /opt/hadoop-3.2.1 /opt/hadoop
  • 环境变量:
1
2
3
4
5
echo '' >> /etc/profile
echo '# Hadoop Home' >> /etc/profile
echo 'export HADOOP_HOME="/opt/hadoop"' >> /etc/profile
echo 'export PATH="${PATH}:${HADOOP_HOME}/bin"' >> /etc/profile
source /etc/profile
  • 获取版本信息:
1
hadoop version
  • 更改目录权限:
1
2
chown -R hadoop:root /opt/hadoop
chown -R hadoop:root /opt/hadoop-3.2.1

运行方式

单机模式

  • 单机模式(Standalone):Hadoop默认以非分布式模式作为单个Java进程运行,这对调试是友好的。
  • 单机模式不使用HDFS,也不加载任何Hadoop的守护进程,此模式主要用于开发调试MapReduce程序的应用逻辑。
1
2
3
4
mkdir -p /root/input
cp -a /opt/hadoop/etc/hadoop/*.xml /root/input
hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep /root/input /root/output 'dfs[a-z.]+'
cat /root/output/*
  • 命令执行完成后,发现output目录中生成2个文件part-r-00000_SUCCESS

    • part-r-00000:记录着在input目录中的所有xml文件中上述正则表达式匹配成功的单词的数量。
  • 可以通过如下的命令检验结果的正确性:

1
grep -1 --color "dfs" /root/input/*.xml
  • Hadoop 3.2版本中的所有xml文件中仅匹配到dfsadmin这个单词且只出现了1次。

伪分布式模式

  • 伪分布模式(Pseudo-Distributed Mode):在单节点上以伪集群的方式上运行Hadoop,其所有的守护进程都运行在同一台机器上。

  • 伪分布模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS的输入输出,以及其他的守护进程交互。

  • 伪分布模式只需要在单机模式的基础上,额外修改2个配置文件并且格式化文件系统即可。

  • 切换到hadoop用户:

1
su - hadoop
  • 编辑core-site.xml
1
vim /opt/hadoop/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
  • 编辑hdfs-site.xml
1
vim /opt/hadoop/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/tmp/dfs/data</value>
</property>
</configuration>
  • Hadoop的运行方式是依据配置文件的,从伪分布式模式切换回单机模式,只需要删除core-site.xml配置文件中configuration内的内容即可。

  • 伪分布式模式其实只需配置fs.defaultFSdfs.replication就可以运行了(官方教程),但若未配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoop-root,而此目录可能会在系统重启时被清理掉,导致必须重新格式化,所以才添加了额外的配置。

  • 格式化文件系统:

1
hdfs namenode -format
  • 配置hadoop-env.sh
1
echo 'export JAVA_HOME="/opt/jdk"' >> /opt/hadoop/etc/hadoop/hadoop-env.sh
  • 启动NameNode守护程序和DataNode守护程序:
1
/opt/hadoop/sbin/start-dfs.sh
  • 查询进程状态:
1
2
# NameNode、DataNode、SecondaryNameNode
jps
  • 访问NameNodeWeb界面:
    • 地址:https://<External IP>:9870
    • 端口:Hadoop 2.X默认的端口为50070Hadoop 3.X默认的端口为9870
  • 单机模式读取的是本地数据,伪分布式模式读取的则是HDFS上的数据,使用HDFS之前,需要先创建目录。
  • 设置执行MapReduce作业所需的HDFS目录:
1
hdfs dfs -mkdir -p /user/hadoop
  • 将输入文件复制到分布式文件系统中:
1
2
hdfs dfs -mkdir input
hdfs dfs -put /opt/hadoop/etc/hadoop/*.xml input
  • 查看文件列表:
1
hdfs dfs -ls input
  • 执行作业:
1
hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
  • 检查分布式文件系统中的输出文件:
1
hdfs dfs -cat output/*
  • 从分布式文件系统拷贝输出文件并检查:
1
2
hdfs dfs -get output output
cat output/*
  • 关闭Hadoop
1
/opt/hadoop/sbin/stop-dfs.sh
  • 下次启动Hadoop时,无需进行文件系统的格式化,仅运行start-dfs.sh即可。

  • 添加配置文件并运行ResourceManager守护程序和NodeManager守护程序,以伪分布式模式在YARN上运行MapReduce作业。

  • 编辑mapred-site.xml

1
vim /opt/hadoop/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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>mapreduce.application.classpath</name>
<value>${HADOOP_MAPRED_HOME}/share/hadoop/mapreduce/*:${HADOOP_MAPRED_HOME}/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
  • 编辑yarn-site.xml
1
vim /opt/hadoop/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
  • 启动ResourceManager守护程序和NodeManager守护程序:
1
/opt/hadoop/sbin/start-yarn.sh
  • 查询进程状态:
1
2
# ResourceManager、NodeManager
jps
  • 访问ResourceManagerWeb界面:
    • 地址:https://<External IP>:8088
  • 关闭Hadoop YARN
1
/opt/hadoop/sbin/stop-yarn.sh
  • 启动所有服务:
1
/opt/hadoop/sbin/start-all.sh
  • 查询进程状态:
1
2
# NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager
jps
  • 停止所有的服务:
1
/opt/hadoop/sbin/stop-all.sh

请作者喝瓶肥宅快乐水