Hadoop完全分布式搭建学习指南
Hadoop版本:Hadoop2.X
JDK版本:JDK1.8
一、准备工作
-
设置主机名和IP
在三台CentOS 7.4机器上分别设置主机名和IP:
- node1: 192.168.14.10
- node2: 192.168.14.20
- node3: 192.168.14.30
修改主机名(以node1为例):
bashhostnamectl set-hostname node1
配置网络(依据具体网络环境和系统不同,配置方法可能有所不同)。
-
配置hosts文件
在三台机器上的
/etc/hosts
文件中都添加以下内容,以便机器之间能通过主机名互相访问:bash192.168.14.10 node1 192.168.14.20 node2 192.168.14.30 node3
-
关闭防火墙和SELinux
bashsystemctl stop firewalld systemctl disable firewalld setenforce 0
-
配置SSH免密登录
在node1上生成SSH密钥对,并将公钥分发到其他两个节点,实现免密登录(node2和node3上也需进行类似操作,以便日后维护)。
bashssh-keygen ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3
二、安装Java环境
-
下载并解压JDK
下载JDK压缩包到
/opt
,然后解压。bashcd /opt tar -zxvf jdk-xxx-linux-x64.tar.gz
-
配置环境变量
编辑
/etc/profile
,添加以下内容:bashexport JAVA_HOME=/opt/jdk1.8.0_xxx export PATH=$PATH:$JAVA_HOME/bin
使环境变量生效:
bashsource /etc/profile
三、安装Hadoop
-
下载并解压Hadoop
从Apache官网下载Hadoop压缩包到
/opt
,然后解压。bashcd /opt tar -zxvf hadoop-x.x.x.tar.gz
-
配置Hadoop环境变量
编辑
/etc/profile
,添加:bashexport HADOOP_HOME=/opt/hadoop-x.x.x export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使环境变量生效:
bashsource /etc/profile
-
配置Hadoop
需要配置的文件主要有
hadoop-env.sh
、core-site.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
和slaves
。-
hadoop-env.sh
:设置Java环境。bashexport JAVA_HOME=/opt/jdk1.8.0_xxx
-
core-site.xml
:配置HDFS的地址。xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-x.x.x/tmp</value> </property> </configuration>
-
hdfs-site.xml
:配置HDFS的副本数等参数。xml<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop-x.x.x/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop-x.x.x/hdfs/datanode</value> </property> </configuration>
-
yarn-site.xml
:配置YARN的资源管理器等参数。xml<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
-
mapred-site.xml
(如果不存在,可复制mapred-site.xml.template
并重命名为mapred-site.xml
):配置MapReduce的运行框架为YARN。xml<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
slaves
:配置DataNode所在的节点。node1 node2 node3
-
-
-
分发Hadoop到其他节点
使用
scp
命令将配置好的Hadoop目录分发到其他两个节点。bashscp -r /opt/hadoop-x.x.x node2:/opt/ scp -r /opt/hadoop-x.x.x node3:/opt/
-
格式化HDFS
在node1上执行以下命令来格式化HDFS。
bashhdfs namenode -format
-
启动Hadoop
在node1上启动Hadoop集群。
bashstart-dfs.sh start-yarn.sh
-
验证Hadoop是否启动成功
通过Web界面访问
http://node1:50070/
来查看HDFS的状态,访问http://node1:8088/
来查看YARN的状态。同时,也可以通过jps
命令在各个节点上查看运行的Hadoop进程。
以下是将Hadoop完全分布式配置下各节点的进程以表格形式展现的示例:
节点 | 进程 |
---|---|
node1 | NameNode |
SecondaryNameNode | |
ResourceManager | |
DataNode | |
NodeManager | |
node2 | DataNode |
NodeManager | |
node3 | DataNode |
NodeManager |
各文件详细配置内容
core-site.xml
xml
<configuration>
<!-- 指定Hadoop集群中的默认文件系统为HDFS -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 配置Hadoop临时目录,用于存放MapReduce作业执行过程中的中间数据 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-x.x.x/tmp</value>
</property>
</configuration>
hdfs-site.xml
xml
<configuration>
<!-- 指定NameNode的存储路径,即NameNode元数据的存放位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop-x.x.x/hdfs/namenode</value>
</property>
<!-- 指定DataNode的存储路径,即实际数据存储的位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop-x.x.x/hdfs/datanode</value>
</property>
<!-- 配置HDFS的副本数,即每个数据块会被复制多少份,通常设置为3 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
yarn-site.xml
xml
<configuration>
<!-- 指定ResourceManager的地址,YARN作业提交到这里进行资源分配和调度 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<!-- 配置NodeManager提供的辅助服务,mapreduce_shuffle是MapReduce作业必须的服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- (可选)配置ResourceManager的Web界面地址和端口 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:8088</value>
</property>
</configuration>
mapred-site.xml
xml
<configuration>
<!-- 指定MapReduce作业的运行框架为YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
slaves
# 指定DataNode所在的节点,每行一个节点名
node1 //结点1
node2 //结点2
node3 //结点3