CentOS8 安装 hadoop3.2.1 完全分布式集群

上一篇:CentOS8 安装 Hadoop3.2.1 独立模式、伪分布模式

本文以root用户安装,开发测试使用。生产环境可以考虑用其他用户安装,比如hadoop或hdfs,yarn

下载地址:

https://hadoop.apache.org/releases.html

    上传并解压hadoop-3.2.1.tar.gz

文档地址:

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html

一、准备工作

1.设置机器名及对应IP,CentOS8 修改主机名,配置对应IP

2.安装配置jdk8+,CentOS8 安装JDK8 jdk-8u192-linux-x64.tar.gz

3.ssh免密,CentOS8 设置无密码SSH,SSH免密

4.安装配置pdsh CentOS8 安装配置使用 pdsh 并行分布式shell (非必须)

扫描二维码关注公众号,回复: 12414923 查看本文章

5.关闭防火墙,CentOS8 关闭防火墙,禁用防火墙

6.时间同步(虚拟机就省了)

二、部署结构

部署结构
机器名 IP 部署内容
dev11 192.168.0.11 NameNode,DataNode,NodeManager
dev12 192.168.0.12 SecondaryNameNode,DataNode,NodeManager
dev13 192.168.0.13 DataNode,NodeManager,ResourceManager 和 MapReduce-JobHistoryServer

SecondaryNameNode和NameNode可以在一台,推荐在两台,防止意外。

    (有条件的NameNode应该单独一台,为了性能。那么SecondaryNameNode也应该单独一台)

ResourceManager可以在1号服务器,也可以在其他服务器,比如放在3号服务器,看起来平衡。

但是,从1号服务器启动yarn时,在3号服务器启动不了ResourceManager,会报错。可以在3号服务器启动hdfs和yarn。

JobHistoryServer需要单独启动,如果配置不指定主机或IP,在哪台服务器都可以启动。如果指定了服务器,就在指定服务器启动。在其他服务器启动会报错。

我把JobHistoryServer和ResourceManager部署在一个节点上。

NodeManager一般和DataNode在一起

三、配置

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

1./etc/profile

export JAVA_HOME=/opt/jdk1.8.0_192
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/opt/hadoop-3.2.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

2.etc/hadoop/hadoop-env.sh

#配置hdfs用户
HDFS_NAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

#配置yarn用户
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root

#至少必须指定JAVA_HOME,以便在每个远程节点上正确定义它。
export JAVA_HOME=/opt/jdk1.8.0_192
export HADOOP_HOME=/opt/hadoop-3.2.1

#在大多数情况下,您应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由将要运行hadoop守护程序的用户写入。否则可能会发生符号链接攻击。
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_PID_DIR=${HADOOP_HOME}/pid

yarn-env.sh和mapred-env.sh不用配置

3.etc/hadoop/core-site.xml 配置通用属性

<configuration>
    <!-- NameNode URI-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://dev11:9000</value>
    </property>
    
    <!-- 其他临时目录的基础-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-3.2.1/tmp</value>
    </property>
    
    <!-- 序列文件中使用的缓冲区大小。 该缓冲区的大小可能应该是硬件页面大小的倍数(在Intel x86上为4096),并且它确定在读写操作期间要缓冲多少数据。-->
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>

4.etc/hadoop/hdfs-site.xml 配置HDFS属性

<configuration>
    <!-- 默认块复制。 创建文件时可以指定实际的复制数量。 如果在创建时未指定复制,则使用默认值。-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    
    <!-- 确定DFS NameNode在本地文件系统上应该存储名称表(fsimage)的位置。 如果这是用逗号分隔的目录列表,则将名称表复制到所有目录中,以实现冗余。-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop-3.2.1/dfs/name</value>
    </property>
    
    <!-- 允许/排除的数据节点列表。 如有必要,请使用这些文件来控制允许的数据节点列表。
    命名一个文件,其中包含允许连接到名称节点的主机列表。 必须指定文件的完整路径名。 如果该值为空,则允许所有主机。
    <property>
        <name>dfs.hosts</name>
        <value>/opt/hadoop-3.2.1/hosts</value>
    </property>
    <property>
        <name>dfs.hosts.exclude</name>
        <value>/opt/hadoop-3.2.1/hosts.exclude</value>
    </property>
    -->
    
    <!-- HDFS块大小,例如128k,512m ,1g等,或提供完整的字节大小(例如134217728表示128 MB)-->
    <property>
        <name>dfs.blocksize</name>
        <value>128m</value>
    </property>
    <!-- 更多的NameNode服务器线程可处理来自大量DataNode的RPC。-->
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>10</value>
    </property>
    
    <!-- 逗号分隔的DataNode本地文件系统上应存储其块的路径列表。 如果这是逗号分隔的目录列表,则数据将存储在所有命名的目录中,通常在不同的设备上。-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop-3.2.1/dfs/data</value>
    </property>
    
    <!-- SecondaryNameNode http服务器地址和端口。-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>dev12:9868</value>
    </property>
    <!-- SecondaryNameNode HTTPS服务器地址和端口。-->
    <property>
        <name>dfs.namenode.secondary.https-address</name>
        <value>dev12:9869</value>
    </property>
</configuration>

5.etc/hadoop/yarn-site.xml 配置yarn属性

日志聚合,把job的执行日志聚合到一起,供obHistorySever查看

<configuration>
    <!-- 以逗号分隔的服务列表,其中服务名称应仅包含a-zA-Z0-9_并且不能以数字开头-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 容器可以覆盖而不是使用NodeManager的默认环境变量。-->
    <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>
    
    <!-- ResourceManager主机。主机可以设置单个主机名,以代替设置所有yarn.resourcemanager * address资源。生成ResourceManager组件的默认端口。-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>dev13</value>
    </property>

    <!-- 是否启用日志聚合。日志聚合收集每个容器的日志,并在应用程序完成后将这些日志移动到文件系统(例如HDFS)中。-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 删除聚合日志前要保留多长时间。 -1禁用。 小心将其设置得太小,您将向名称节点发送垃圾邮件。-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
    <!-- 应用程序完成时将应用程序日志移动到的HDFS目录。 需要设置适当的权限。 仅在启用日志聚合的情况下适用。-->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/user/container/logs</value>
    </property>  
</configuration>

6.etc/hadoop/mapred-site.xml 配置MapReduce属性

加入配置JobHistoryServer,如果配置不指定主机或IP,在哪台服务器都可以启动。

但是指定localhost或127.0.0.1,JobHistoryServer无法启动,会报错。

<configuration>
    <!-- 用于执行MapReduce作业的运行时框架。 可以是local, classic 或者 yarn。-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- MapReduce应用程序的CLASSPATH。-->
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
    
    <!-- MapReduce JobHistoryServer IPC 主机:端口-->
    <property>
        <name>mapreduce.jobhistory.addres</name>
        <value>dev13:10020</value>
    </property>
    <!-- MapReduce JobHistoryServer Web UI 主机:端口-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>dev13:19888</value>
    </property>
    <!-- 提交作业时使用的暂存目录。(hdfs目录)-->
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/tmp/hadoop-yarn/staging</value>
    </property>
    <!-- MapReduce作业写入历史文件的目录。(hdfs目录)-->
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/tmp/hadoop-yarn/staging/history/done_intermediate</value>
    </property>
    <!-- MR JobHistoryServer管理历史文件的目录。(hdfs目录)-->
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/tmp/hadoop-yarn/staging/history/done</value>
    </property>
</configuration>

7.etc/hadoop/workers

在hadoop 2.x中这个文件叫slaves,配置所有datanode的主机地址,只需要把所有的datanode主机名填进去就好了

dev11
dev12
dev13

把所有这些配置复制到另外两台服务器

四、格式化hdfs

在namenode所在服务器执行

[root@dev11 opt]# hdfs namenode -format

2020-05-20 07:00:02,336 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1609697951-192.168.0.11-1589929202324
2020-05-20 07:00:02,351 INFO common.Storage: Storage directory /opt/hadoop-3.2.1/dfs/name has been successfully formatted.
2020-05-20 07:00:02,384 INFO namenode.FSImageFormatProtobuf: Saving image file /opt/hadoop-3.2.1/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
2020-05-20 07:00:02,499 INFO namenode.FSImageFormatProtobuf: Image file /opt/hadoop-3.2.1/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 399 bytes saved in 0 seconds .
2020-05-20 07:00:02,516 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2020-05-20 07:00:02,524 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid=0 when meet shutdown.
2020-05-20 07:00:02,524 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at dev11/192.168.0.11
************************************************************/

五、启动

1.启动dfs,

可以在1号服务器启动,也可以在3号服务器启动

[root@dev13 opt]# start-dfs.sh
Starting namenodes on [dev11]
Starting datanodes
Starting secondary namenodes [dev12]

[root@dev11 opt]# jps
4897 NameNode
5108 Jps
4997 DataNode

[root@dev12 opt]# jps
4947 Jps
4774 DataNode
4902 SecondaryNameNode

[root@dev13 opt]# jps
8160 DataNode
8433 Jps

2.启动yarn

在指定yarn服务器启动yarn

[root@dev13 opt]# start-yarn.sh
Starting resourcemanager
Starting nodemanagers

[root@dev11 opt]# jps
4897 NameNode
5907 NodeManager
4997 DataNode
6031 Jps

[root@dev12 opt]# jps
4774 DataNode
4902 SecondaryNameNode
6294 NodeManager
6429 Jps

[root@dev13 opt]# jps
8160 DataNode
9956 NodeManager
10327 Jps
9803 ResourceManager

3.启动MapReduce JobHistoryServer

在指定的服务器启动

[root@dev13 opt]# mapred --daemon start historyserver

[root@dev13 opt]# jps
8160 DataNode
10496 Jps
9956 NodeManager
10406 JobHistoryServer
9803 ResourceManager

六、web控制台

本地配置hosts

1.hdfs控制台

http://dev11:9870/

浏览hdfs文件系统

2.yarn控制台

http://dev13:8088/

3. JobHistoryServer控制台

http://dev13:19888/

、停止

1.停止JobHistoryServer

[root@dev13 opt]# mapred --daemon stop historyserver

2.停止yarn

[root@dev13 opt]# stop-yarn.sh
Stopping nodemanagers
Stopping resourcemanager

3.停止hdfs

[root@dev13 opt]# stop-dfs.sh
Stopping namenodes on [dev11]
Stopping datanodes
Stopping secondary namenodes [dev12]

八、日志文件

有错误看日志

九、运行个例子

[root@dev11 hadoop-3.2.1]# hdfs dfs -mkdir -p /user/root
[root@dev11 hadoop-3.2.1]# hdfs dfs -mkdir input
[root@dev11 hadoop-3.2.1]# hdfs dfs -put etc/hadoop/*.xml input
[root@dev11 hadoop-3.2.1]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'

1.hdfs控制台

2.yarn控制台

job运行中,可以点击ApplicationMaster,查看运行情况

运行完成,可以点击History,查看之前运行的job的情况

有的点不开,跳到dev12服务器了,可以手动吧dev12换成dev13,

没必要在每个节点都启动JobHistoryServer吧,可以直接在dev13的JobHistoryServer中查看History。

3.JobHistoryServer

十、报错处理

1.有字符不能识别,是因为在windows下编辑的,文件另存为UNIX格式UTF-8无BOM编码。

2020-05-18 12:05:02,238 ERROR conf.Configuration: error parsing conf mapred-site.xml
com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xc3 (at char #726, byte #20)

2020-05-18 12:13:45,129 ERROR conf.Configuration: error parsing conf yarn-site.xml
com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0xd4 (at char #604, byte #20)

2.启动hdfs,但是没先格式化hdfs会报错。

2020-05-20 06:54:40,328 WARN org.apache.hadoop.hdfs.server.common.Storage: Storage directory /opt/hadoop-3.2.1/dfs/name does not exist
2020-05-20 06:54:40,330 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /opt/hadoop-3.2.1/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:391)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:242)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1105)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:720)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:648)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:710)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:953)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:926)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1692)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1759)

3.在非ResourceManager节点启动yarn,ResourceManager启动报错

如果在dev11启动yarn,查看dev11下的日志,logs/hadoop-root-resourcemanager-dev11.log

2020-05-18 13:16:31,320 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: dev13:8088
    at org.apache.hadoop.http.HttpServer2.constructBindException(HttpServer2.java:1218)
    at org.apache.hadoop.http.HttpServer2.bindForSinglePort(HttpServer2.java:1240)
    at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:1299)
    at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:1154)
    at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:439)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:1231)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1340)
    at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1535)
Caused by: java.net.BindException: 无法指定被请求的地址
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:351)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:319)
    at org.apache.hadoop.http.HttpServer2.bindListener(HttpServer2.java:1205)
    at org.apache.hadoop.http.HttpServer2.bindForSinglePort(HttpServer2.java:1236)
    ... 7 more

排除了防火墙的问题,端口占用的问题

解决办法,在ResourceManager所在服务器启动yarn,也可以启动hdfs。或者把ResourceManager和NameNode部署在一台服务器。

4.如果指定了JobHistoryServer的主机或IP,没在指定主机启动,会报错

(还有JobHistoryServer如果指定localhost和127.0.0.1也启动不了,你可以选择不指定。)

2020-05-19 10:13:05,382 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: dev11:19888
    at org.apache.hadoop.http.HttpServer2.constructBindException(HttpServer2.java:1218)
    at org.apache.hadoop.http.HttpServer2.bindForSinglePort(HttpServer2.java:1240)
    at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:1299)
    at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:1154)
    at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:439)
    at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:428)
    at org.apache.hadoop.mapreduce.v2.hs.HistoryClientService.initializeWebApp(HistoryClientService.java:166)
    at org.apache.hadoop.mapreduce.v2.hs.HistoryClientService.serviceStart(HistoryClientService.java:122)
    at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)
    at org.apache.hadoop.service.CompositeService.serviceStart(CompositeService.java:121)
    at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.serviceStart(JobHistoryServer.java:200)
    at org.apache.hadoop.service.AbstractService.start(AbstractService.java:194)
    at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.launchJobHistoryServer(JobHistoryServer.java:227)
    at org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer.main(JobHistoryServer.java:236)
Caused by: java.net.BindException: 无法指定被请求的地址
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:433)
    at sun.nio.ch.Net.bind(Net.java:425)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:351)
    at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:319)
    at org.apache.hadoop.http.HttpServer2.bindListener(HttpServer2.java:1205)
    at org.apache.hadoop.http.HttpServer2.bindForSinglePort(HttpServer2.java:1236)
    ... 12 more

十一、HDFS High Availability Using the Quorum Journal Manager

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

十二、ResourceManager High Availability

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

猜你喜欢

转载自blog.csdn.net/haveqing/article/details/106153379