摘要:明天教大家如何利用鲲鹏服务器搭建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的守护过程运行在由多台主机搭建的集群上,是真正的生产环境。
- 下载并解压Hadoop、JDK安装包并配置好环境变量、节点域名解析、防火墙、端口等组成互相连通的网络。
- 进入Hadoop的解压目录,编辑hadoop-env.sh文件(留神不同版本后配置文件的地位有所变动)
- 编辑Hadoop中配置文件core-site.xml(Hadoop集群的个性,作用于全副过程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)、yarn-site.xml四个外围配置文件
- 配置ssh,生成密钥,使到ssh能够免明码连贯localhost,把各从节点生成的公钥增加到主节点的信赖列表。
- 格式化HDFS后 应用./start-all.sh启动Hadoop集群
二、Hadoop常见组件
Hadoop由HDFS、Yarn、Mapreduce三个外围模块组成,别离负责分布式存储、资源分配和治理、分布式计算。
1、Hadoop-HDFS模块
- HDFS:是一种分布式存储系统,采纳Master和Slave的主从构造,次要由NameNode和DataNode组成。HDFS会将文件按固定大小切成若干块,分布式存储在所有DataNode中,每个文件块能够有多个正本,默认正本数为3。
- NameNode: Master节点,负责元数据的治理,解决客户端申请。
- DataNode: Slave节点,负责数据的存储和读写操作。
2、Hadoop-Yarn模块
- Yarn:是一种分布式资源调度框架,采纳Master和Slave的主从构造,次要由ResourceManager . ApplicationMaster和NodeManager组成,负责整个集群的资源管理和调度。
- ResourceManager:是一个全局的资源管理器,负责整个集群的资源管理和调配。
- ApplicationMaster:当用户提交应用程序时启动,负责向ResourceManager申请资源和应用程序的治理。
- NodeManager:运行在Slave节点,负责该节点的资源管理和应用。
- Container: Yarn的资源形象,是执行具体利用的根本单位,任何一个Job或应用程序必须运行在一个或多个Container中。
3、Hadoop-Mapreduce模块
- Mapreduce:是一种分布式计算框架,次要由Map和Reduce两个阶段组成。反对将一个计算工作划分为多个子工作,扩散到各集群节点并行计算。
- Map阶段:将初始数据分成多份,由多个map工作并行处理。
- 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 )。
【根本流程】
- 下载并解压Hadoop、JDK安装包并配置好环境变量、节点域名解析、防火墙、端口
- 进入Hadoop的解压目录,编辑hadoop-env.sh文件(留神不同版本后配置文件的地位有所变动)
- 编辑Hadoop中配置文件core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四个外围配置文件
- 配置ssh,生成密钥,使到ssh能够免明码连贯localhost
- 格式化HDFS后 应用./start-all.sh启动Hadoop集群
敞开防火墙和selinux
(1)各个节点都执行命令敞开防火墙:
systemctl stop firewalldsystemctl disable firewalldsystemctl status firewalld
(2)敞开selinux
进入selinux的config文件,将selinux原来的强制模式(enforcing)批改为敞开模式(disabled)
setenforce 0getenforcesed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinuxgrep SELINUX=disabled /etc/sysconfig/selinuxcat /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-b09export PATH=$JAVA_HOME/bin:$PATHexport 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 /homewget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/hadoop-performance-tuning/hadoop-3.1.1.tar.gz#解压hadoop-3.1.1tar -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/hadoopexport 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 > workersecho node1 > workersecho node2 > workers
⑦批改dfs和yarn的启动脚本,增加root用户权限
(1)关上start-dfs.sh和stop-dfs.sh文件:
vim /home/hadoop/sbin/start-dfs.shvim /home/hadoop/sbin/stop-dfs.sh
单击键盘“i”键进入编辑模式,在两个配置文件的第一行增加并保留退出:
HDFS_DATANODE_USER=rootHDFS_DATANODE_SECURE_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root
(2)关上start-yarn.sh 和 stop-yarn.sh文件
vim /home/hadoop/sbin/start-yarn.shvim /home/hadoop/sbin/stop-yarn.sh
单击键盘“i”键进入编辑模式,在两个配置文件的第一行增加并保留退出:
YARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root
4.集群配置&节点间免密登录
(1)连通性测试
(2)从主节点同步各个节点域名解析文件
scp /etc/hosts node1:/etc/hostsscp /etc/hosts node2:/etc/hosts
(3) 配置各节点间SSH免密登录
别离在三台服务器中输出命令生成私钥和公钥(提醒输出时按回车即可):
ssh-keygen -t rsa
jack20:
node1:
node2:
而后别离在三台服务器上输出命令以复制公钥到服务器中:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@jack20ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1ssh-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:/homescp -r hadoop node2:/home#java目录scp -r jdk8u252-b09 node1:/homescp -r jdk8u252-b09 node2:/home
登录批改各服务器java和haoop环境变量
vim /etc/profile
点击键盘"Shift+g"挪动光标至文件开端,单击键盘“i”键进入编辑模式,在代码开端回车下一行,增加如下内容并保留退出:
export JAVA_HOME=/home/jdk8u252-b09export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport HADOOP_HOME=/home/hadoopexport 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/wordcounthdfs 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
静静期待后果就能够~
点击关注,第一工夫理解华为云陈腐技术~