关于服务器:跟我学丨如何用鲲鹏服务器搭建Hadoop全分布式集群

4次阅读

共计 12503 个字符,预计需要花费 32 分钟才能阅读完成。

摘要: 明天教大家如何利用鲲鹏服务器搭建 Hadoop 全分布式集群,动起来···

本文分享自华为云社区《利用鲲鹏服务器疾速搭建一个 Hadoop 全分布式集群笔记分享》,原文作者:Jack20。

一、Hadoop 常见的三种运行模式

1、单机模式(独立模式)(Local 或 Standalone Mode)

默认状况下 Hadoop 就是处于该模式,用于开发和调式。不对配置文件进行批改。应用本地文件系统,而不是分布式文件系统。

Hadoop 不会启动 NameNode、DataNode、JobTracker、TaskTracker 等守护过程,Map() 和 Reduce() 工作作为同一个过程的不同局部来执行的。

用于对 MapReduce 程序的逻辑进行调试,确保程序的正确。

2、伪分布式模式(Pseudo-Distrubuted Mode)

Hadoop 的守护过程运行在本机机器,模仿一个小规模的集群,在一台主机模仿多主机。

Hadoop 启动 NameNode、DataNode、JobTracker、TaskTracker 这些守护过程都在同一台机器上运行,是互相独立的 Java 过程。

在这种模式下,Hadoop 应用的是分布式文件系统,各个作业也是由 JobTraker 服务,来治理的独立过程。在单机模式之上减少了代码调试性能,容许查看内存应用状况,HDFS 输入输出,以及其余的守护过程交互。相似于齐全分布式模式,因而,这种模式罕用来开发测试 Hadoop 程序的执行是否正确。

3、全分布式集群模式(Full-Distributed Mode)

Hadoop 的守护过程运行在一个集群上 Hadoop 的守护过程运行在由多台主机搭建的集群上,是真正的生产环境。

  1. 下载并解压 Hadoop、JDK 安装包并配置好环境变量、节点域名解析、防火墙、端口等组成互相连通的网络。
  2. 进入 Hadoop 的解压目录, 编辑 hadoop-env.sh 文件 (留神不同版本后配置文件的地位有所变动)
  3. 编辑 Hadoop 中配置文件 core-site.xml(Hadoop 集群的个性,作用于全副过程及客户端)、hdfs-site.xml(配置 HDFS 集群的工作属性)、mapred-site.xml(配置 MapReduce 集群的属性)、yarn-site.xml 四个外围配置文件
  4. 配置 ssh, 生成密钥, 使到 ssh 能够免明码连贯 localhost,把各从节点生成的公钥增加到主节点的信赖列表。
  5. 格式化 HDFS 后 应用./start-all.sh 启动 Hadoop 集群

二、Hadoop 常见组件

Hadoop 由 HDFS、Yarn、Mapreduce 三个外围模块组成,别离负责分布式存储、资源分配和治理、分布式计算。

1、Hadoop-HDFS 模块

  1. HDFS: 是一种分布式存储系统,采纳 Master 和 Slave 的主从构造,次要由 NameNode 和 DataNode 组成。HDFS 会将文件按固定大小切成若干块,分布式存储在所有 DataNode 中,每个文件块能够有多个正本,默认正本数为 3。
  2. NameNode: Master 节点,负责元数据的治理,解决客户端申请。
  3. DataNode: Slave 节点,负责数据的存储和读写操作。

2、Hadoop-Yarn 模块

  1. Yarn: 是一种分布式资源调度框架,采纳 Master 和 Slave 的主从构造,次要由 ResourceManager . ApplicationMaster 和 NodeManager 组成,负责整个集群的资源管理和调度。
  2. ResourceManager: 是一个全局的资源管理器,负责整个集群的资源管理和调配。
  3. ApplicationMaster: 当用户提交应用程序时启动,负责向 ResourceManager 申请资源和应用程序的治理。
  4. NodeManager: 运行在 Slave 节点,负责该节点的资源管理和应用。
  5. Container: Yarn 的资源形象,是执行具体利用的根本单位,任何一个 Job 或应用程序必须运行在一个或多个 Container 中。

3、Hadoop-Mapreduce 模块

  1. Mapreduce: 是一种分布式计算框架,次要由 Map 和 Reduce 两个阶段组成。反对将一个计算工作划分为多个子工作,扩散到各集群节点并行计算。
  2. Map 阶段: 将初始数据分成多份,由多个 map 工作并行处理。
  3. Reduce 阶段: 收集多个 Map 工作的输入后果并进行合并,最终造成一个文件作为 reduce 阶段的后果。

全分布式集群模式(Full-Distributed Mode)搭建

【根本环境】

三台鲲鹏 km1.2xlarge.8 内存优化型 8vCPUs | 64GB CentOS 7.6 64bit with ARM CPU:Huawei Kunpeng 920 2.6GHz

其中 jack20 节点作为 NameNode, Node1、Node2 作为 DataNode, 而 Node1 也作为辅助 NameNode (Secondary NameNode)。

【根本流程】

  1. 下载并解压 Hadoop、JDK 安装包并配置好环境变量、节点域名解析、防火墙、端口
  2. 进入 Hadoop 的解压目录, 编辑 hadoop-env.sh 文件 (留神不同版本后配置文件的地位有所变动)
  3. 编辑 Hadoop 中配置文件 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 四个外围配置文件
  4. 配置 ssh, 生成密钥, 使到 ssh 能够免明码连贯 localhost
  5. 格式化 HDFS 后 应用./start-all.sh 启动 Hadoop 集群

敞开防火墙和 selinux

(1)各个节点都执行命令敞开防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

(2)敞开 selinux

进入 selinux 的 config 文件,将 selinux 原来的强制模式(enforcing)批改为敞开模式(disabled)

setenforce 0getenforce
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
grep SELINUX=disabled /etc/sysconfig/selinux
cat /etc/sysconfig/selinux

1. 装置 openJDK-1.8.0

1.1. 下载安装 openJDK-1.8.0

下载 openJDK-1.8.0 并装置到指定目录(如“/home”)。

进入目录:

cd /home

下载 openJDK-1.8.0 并装置:

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/hadoop-performance-tuning/OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz
#解压
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u252b09.tar.gz

1.2. 配置环境变量

执行如下命令,关上 /etc/profile 文件:

vim /etc/profile

点击键盘 ”Shift+g” 挪动光标至文件开端,单击键盘“i”键进入编辑模式,在代码开端回车下一行,增加如下内容:

下一行,增加如下内容:

export JAVA_HOME=/home/jdk8u252-b09
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

增加实现,单击键盘 ESC 退出编辑,键入“:wq”回车保留并退出。

1.3. 环境变量失效

使环境变量失效:

source /etc/profile

验证 openJDK-1.8.0 装置是否胜利:

java -version

1.4. 配置域名解析

vim /etc/hosts

2. 装置 dstat 资源监控工具

yum install dstat-0.7.2-12.el7 -y

验证 dstat 是否装置胜利:

dstat -V

3. 部署 hadoop-3.1.1


3. 1. 获取 hadoop-3.1.1 软件包

①下载 hadoop-3.1.1 安装包到 /home 目录下:

cd /home
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/hadoop-performance-tuning/hadoop-3.1.1.tar.gz
#解压 hadoop-3.1.1
tar -zxvf hadoop-3.1.1.tar.gz

②建设软链接

ln -s hadoop-3.1.1 hadoop

③配置 hadoop 环境变量,关上 /etc/profile 文件:

vim /etc/profile

点击键盘 ”Shift+g” 挪动光标至文件开端,单击键盘“i”键进入编辑模式,在代码开端回车下一行,增加如下内容:

export HADOOP_HOME=/home/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

增加实现,单击键盘 ESC 退出编辑,键入“:wq”回车保留并退出。

④使环境变量失效:

source /etc/profile

⑤验证 hadoop 装置是否胜利:

hadoop version

执行后果如下图所示,示意装置胜利:

3.2. 批改 hadoop 配置文件

hadoop 所有的配置文件都在 $HADOOP_HOME/etc/hadoop 目录下,批改以下配置文件前,须要切换到 ”$HADOOP_HOME/etc/hadoop” 目录。

cd $HADOOP_HOME/etc/hadoop/

①批改 hdfs-env.xml

关上 hadoop-env.sh 文件:

vim hadoop-env.sh

找到 hadoop-env.sh 的第 54 行中的 java 目录(在命令模式下输出“:set nu”,查看行数),输出 java 的装置目录(),而后删除行左端“#”勾销正文,并保留退出

② 批改 core-site.xml

关上 core-site.xml 文件

vim core-site.xml

在 <configuration></configuration> 标签之间增加如下代码并保留退出

 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://jack20:9000/</value>
        <description> 设定 NameNode 的主机名及端口 </description>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp/hadoop-${user.name}</value>
        <description> 指定 hadoop 存储临时文件的目录 </description>
    </property> 
 
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
        <description> 配置该 superUser 容许通过代理的用户 </description>
    </property>

    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
        <description> 配置该 superUser 容许通过代理用户所属组 </description>
    </property>

③ 批改 hdfs-site.xml,

关上 hdfs-site.xml 文件

vim hdfs-site.xml

在 <configuration></configuration> 标签之间增加如下代码并保留退出

 <property>  
        <name>dfs.namenode.http-address</name>  
        <value>jack20:50070</value>  
        <description> NameNode 地址和端口 </description>  
    </property>
 
    <property>  
        <name>dfs.namenode.secondary.http-address</name>  
        <value>node1:50090</value>  
        <description> Secondary NameNode 地址和端口 </description>  
    </property> 
 
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description> 设定 HDFS 存储文件的正本个数,默认为 3 </description>
    </property>
 
    <property>  
        <name>dfs.namenode.name.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/name</value>  
               <description> NameNode 用来继续存储命名空间和替换日志的本地文件系统门路 </description>  
    </property>  

    <property>  
        <name>dfs.datanode.data.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/data</value>  
               <description> DataNode 在本地存储块文件的目录列表 </description>  
    </property> 

    <property>  
        <name>dfs.namenode.checkpoint.dir</name>  
        <value>file:///home/hadoop/hadoop3.1/hdfs/namesecondary</value>  
        <description> 设置 Secondary NameNode 存储长期镜像的本地文件系统门路。如果这是一个用逗号分隔的文件列表,则镜像将会冗余复制到所有目录
        </description>  
    </property> 
 
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
        <description> 是否容许网页浏览 HDFS 文件 </description>
    </property>

    <property>
        <name>dfs.stream-buffer-size</name>
        <value>1048576</value>
        <description> 默认是 4 KB,作为 Hadoop 缓冲区,用于 Hadoop 读 HDFS 的文件和写 HDFS 的文件,还有 map 的输入都用到了这个缓冲区容量(如果太大了 map 和 reduce 工作可能会内存溢出)</description>
    </property> 

④批改 mapred-site.xml

关上 mapred-site.xml 文件:

vim mapred-site.xml

在 <configuration></configuration> 标签之间增加如下代码并保留退出

 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description> 指定 MapReduce 程序运行在 Yarn 上 </description>  
    </property>

    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>jack20:10020</value>
        <description> 指定历史服务器端地址和端口 </description>
    </property>
 
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>jack20:19888</value>
        <description> 历史服务器 web 端地址和端口 </description>
    </property>

    <property>
          <name>mapreduce.application.classpath</name>
          <value>
           /home/hadoop/etc/hadoop,
           /home/hadoop/share/hadoop/common/*,
           /home/hadoop/share/hadoop/common/lib/*,
           /home/hadoop/share/hadoop/hdfs/*,
           /home/hadoop/share/hadoop/hdfs/lib/*,
           /home/hadoop/share/hadoop/mapreduce/*,
           /home/hadoop/share/hadoop/mapreduce/lib/*,
           /home/hadoop/share/hadoop/yarn/*,
           /home/hadoop/share/hadoop/yarn/lib/*
          </value>
     </property>

    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>6144</value>
        <description> map container 配置的内存的大小(调整到适合大小避免物理内存溢出)</description>
    </property>

    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>6144</value>
        <description> reduce container 配置的内存的大小(调整到适合大小避免物理内存溢出)</description>
    </property>

    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>

⑤批改 yarn-site.xml

关上 yarn-site.xml 文件:

vim yarn-site.xml

在 <configuration></configuration> 标签之间增加如下代码并保留退出

 <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>jack20</value>
        <description> 指定 ResourceManager 的主机名 </description>
    </property>

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>53248</value>
        <description> NodeManager 总的可用物理内存。留神:该参数是不可批改的,一旦设置,整个运行过程中不可动静批改。该参数的默认值是 8192MB,即便你的机器内存不够 8192MB,YARN 也会依照这些内存来应用,因而,这个值通过肯定要配置。</description>
     </property>
 
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description> 指定 MapReduce 走 shuffle</description>
    </property>
 
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>jack20:8032</value>
        <description> 指定 ResourceManager 对客户端裸露的地址和端口,客户端通过该地址向 RM 提交应用程序,杀死应用程序等 </description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>jack20:8030</value>
        <description> 指定 ResourceManager 对 ApplicationMaster 裸露的拜访地址。ApplicationMaster 通过该地址向 RM 申请资源、开释资源等 </description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>jack20:8031</value>
        <description> 指定 ResourceManager 对 NodeManager 裸露的地址。NodeManager 通过该地址向 RM 汇报心跳,支付工作等 </description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>jack20:8033</value>
        <description> 指定 ResourceManager 对管理员裸露的拜访地址。管理员通过该地址向 RM 发送治理命令等 </description>
    </property>
 
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>jack20:8088</value>
        <description> 指定 ResourceManager 对外 web UI 地址。用户可通过该地址在浏览器中查看集群各类信息 </description>
    </property>

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description> 开启日志汇集性能 </description>
    </property>

    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://jack20:19888/jobhistory/logs</value>
        <description> 设置日志汇集服务器地址 </description>
    </property>

    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
        <description> 设置日志保留工夫为 7 天 </description>
    </property>

⑥将各个节点退出到 workers

echo jack20 > workers
echo node1 > workers
echo node2 > workers

⑦批改 dfs 和 yarn 的启动脚本,增加 root 用户权限

(1)关上 start-dfs.sh 和 stop-dfs.sh 文件:

vim /home/hadoop/sbin/start-dfs.sh
vim /home/hadoop/sbin/stop-dfs.sh

单击键盘“i”键进入编辑模式,在两个配置文件的第一行增加并保留退出:

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

(2)关上 start-yarn.sh 和 stop-yarn.sh 文件

vim /home/hadoop/sbin/start-yarn.sh
vim /home/hadoop/sbin/stop-yarn.sh

单击键盘“i”键进入编辑模式,在两个配置文件的第一行增加并保留退出:

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

4. 集群配置 & 节点间免密登录

(1)连通性测试

(2)从主节点同步各个节点域名解析文件

scp /etc/hosts node1:/etc/hosts
scp /etc/hosts node2:/etc/hosts

(3)配置各节点间 SSH 免密登录

别离在三台服务器中输出命令生成私钥和公钥(提醒输出时按回车即可):

ssh-keygen -t rsa

jack20:

node1:

node2:

而后别离在三台服务器上输出命令以复制公钥到服务器中:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@jack20
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2

①持续连贯:输出“yes”回车;
②输出明码(输出明码时,命令行窗口不会显示明码,输完之后间接回车)

查看所有协商的秘钥

SSH 免密登录测试:

Jack20->node1->node2->jack20->node2->node1->jack20

(4)复制 hadoop 到各 datanode 并批改

把 jack20 的 hadoop 目录、jdk 目录、/etc/hosts、/etc/profile 复制到 node1,node2 节点

cd $HADOOP_HOME/..
#hadoop 目录
scp -r hadoop node1:/home
scp -r hadoop node2:/home
#java 目录
scp -r jdk8u252-b09 node1:/home
scp -r jdk8u252-b09 node2:/home

登录批改各服务器 java 和 haoop 环境变量

vim /etc/profile

点击键盘 ”Shift+g” 挪动光标至文件开端,单击键盘“i”键进入编辑模式,在代码开端回车下一行,增加如下内容并保留退出:

export JAVA_HOME=/home/jdk8u252-b09
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

使环境变量失效:

source /etc/profile

5. 启动 hadoop

留神: 如果启动报错,请查看 hadoop 配置文件是否配置有误。

第一次启动前肯定要格式化 HDFS:

hdfs namenode -format

留神: 提示信息的倒数第 2 行呈现“>= 0”示意格式化胜利,如图。在 Linux 中,0 示意胜利,1 示意失败。因而,如果返回“1”,就应该好好剖析后面的谬误提示信息,一 般来说是后面配置文件和 hosts 文件的问题,批改后同步到其余节点上以放弃雷同环境,再接着执行格式化操作

执行脚本命令群起节点

cd /home/hadoop/sbin
#群起节点
./start-all.sh

启动 HDFS 后,能够发现 jack20 节点作为 NameNode, Node1、Node2 作为 DataNode, 而 Node1 也作为辅助 NameNode (Secondary NameNode)。能够通过 jps 命令在各节点上验证 HDFS 是否启动。jps 也是 Windows 中的命令,示意开启的 Java 过程如果呈现下图所示的后果,就示意验证胜利。

客户端 Web 拜访测试:

(1)RMwebUI 界面

(2)NameNode 的 webUI 界面

6. 集群基准测试

(1)应用 Hadoop 自带的 WordCount 例子 /share/Hadoop/mapredu icehadoop-mapreduce-examples-3.1.1.jar 验证集群

# 创立目录,目录 /data/wordcount 用来存储 Hadoop 自带的 WordCount 例子的数据文件,运行这个 MapReduce 工作的后果输入到目录中的 /output/wordcount 文件中
hdfs dfs -mkdir -p /data/wordcount
hdfs dfs -mkdir -p /output/
 
#将本地文件上传到 HDFS 中 (这里上传一个配置文件), 执行如下命令
hdfs dfs -put /home/hadoop/etc/hadoop/core-site.xml /data/wordcount

能够查看,上传后的文件状况,执行如下命令

hdfs dfs -ls /data/wordcount

上面运行 WordCount 案例,执行如下命令

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /data/wordcount /output/wordcount

(2)DFSIO 测试

应用 hadoop 的 DFSIO 写入 50 个文件,每个文件 1000M

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.1-tests.jar TestDFSIO -write -nrFiles 50 -filesize 1000

能够在 RMwebUI 界面查看当前任务的根本状况,包含内存使用量,CPU 使用量等

在 NameNode 的 webUI 界面查看刚刚 DFSIO 测试的各个节点 HDFS 占用状况

(3)计算圆周率的大小

hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.1-tests.jar pi 20 20

静静期待后果就能够~

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0