hadoop集群

版本

hadoop 3.2.0

集群规划

机器 ip 分配节点
cdh1 172.16.100.63 NameNode、DataNode、ResourceManager
cdh2 172.16.100.64 DataNode、NodeManager SecondaryNameNode
cdh3 172.16.100.71 DataNode NodeManager HistoryServer

配置服务器

  • 时间同步
  • 免密码登录
  • hosts
  • 关闭防火墙
  • 安装jdk

在所有服务器(cdh1,cdh2,cdh3)配置环境变量

vi /etc/profile.d/hadoop.sh

1
2
3
export HADOOP_HOME=/opt/hadoop/hadoop/hadoop-3.2.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

source /etc/profile.d/hadoop.sh

配置Hadoop JDK路径,定义集群操作用户,在hadoop-env.sh文件中添加如下内容

配置文件路径 hadoop-3.2.0/etc/hadoop

vi hadoop-env.sh

1
2
3
4
5
6
7
8
9
10
export JAVA_HOME=/usr/java/jdk1.8.0_301

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

export HADOOP_PID_DIR=/opt/hadoop/hadoop/hadoop-3.2.0/pids
export HADOOP_LOG_DIR=/opt/hadoop/hadoop/hadoop-3.2.0/logs

配置core-site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://cdh1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop/hadoop-3.2.0/tmp</value>
</property>
</configuration>

fs.defaultFSNameNode的地址

hadoop.tmp.dirhadoop临时目录的地址

配置hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cdh2:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop/data</value>
</property>
</configuration>

dfs.namenode.secondary.http-address是指定secondaryNameNode的http访问地址和端口号,因为在规划中,我们将cdh2规划为SecondaryNameNode服务器。

配置workers

vi workers

1
2
3
cdh1
cdh2
cdh3

workers文件是指定HDFS上有哪些DataNode节点。

配置yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>0.0.0.0:8140</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cdh1</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://cdh3:19888/jobhistory/logs</value>
</property>
</configuration>

根据规划yarn.resourcemanager.hostname这个指定resourcemanager服务器指向cdh1。
yarn.log-aggregation-enable是配置是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多长时间。

配置mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop/hadoop/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop/hadoop/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop/hadoop/hadoop-3.2.0</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>cdh3:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>cdh3:19888</value>
</property>

</configuration>

mapreduce.framework.name设置mapreduce任务运行在yarn上。
mapreduce.jobhistory.address是设置mapreduce的历史服务器安装在cdh3机器上。
mapreduce.jobhistory.webapp.address是设置历史服务器的web页面地址和端口号。

复制Hadoop配置好的包到其他Linux主机

1
2
scp -r hadoop/ cdh2:/opt/hadoop/
scp -r hadoop/ cdh3:/opt/hadoop/

格式化NameNode

在NameNode机器上执行格式化

1
hdfs namenode -format

如果需要重新格式化NameNode,需要先将原来NameNodeDataNode下的文件全部删除,不然会报错,NameNodeDataNode所在目录是在core-site.xmlhadoop.tmp.dirdfs.namenode.name.dirdfs.datanode.data.dir属性配置的。

因为每次格式化,默认是创建一个集群ID,并写入NameNodeDataNodeVERSION文件中(VERSION文件所在目录为hdfs/name/currenthdfs/data/current),重新格式化时,默认会生成一个新的集群ID,如果不删除原来的目录,会导致namenode中的VERSION文件中是新的集群ID,而DataNode中是旧的集群ID,不一致时会报错。

启动集群

启动HDFS

在cdh1上执行

1
sh start-dfs.sh

启动YARN

在cdh1上执行

1
sh start-yarn.sh

启动日志服务

因为我们规划的是在cdh3服务器上运行jobhistoryserver服务,所以要在cdh3上启动。

1
mapred --daemon start historyserver

查看HDFS Web页面

http://cdh1:9870/

3.0.0以上版本访问WebUI默认端口从50070改为9870

查看YARN Web页面

http://cdh1:8088/

强制namenode离开安全模式

1
hadoop dfsadmin -safemode leave

hadoop集群
https://zhaops-hub.github.io/2021/11/30/hadoop/hadoop集群/
作者
赵培胜
发布于
2021年11月30日
许可协议