作者:傻傻的不敢看结5_749 | 来源:互联网 | 2023-09-09 18:07
Apache Hadoop 是一个支持数据密集型分布式应用程序的开源软件框架,能在大型集群上运行应用程序。Hadoop 框架实现了 MapReduce 编程范式,把应用程序分成许多小部分,每个部分能在任意节点上运行。并且 Hadoop 提供了分布式文件系统存储所有计算节点的数据,为集群带来非常高的带宽。
1 Hadoop 是什么? Apache Hadoop 是一个支持数据密集型分布式应用程序的开源软件框架,能在大型集群上运行应用程序。Hadoop 框架实现了 MapReduce 编程范式,把应用程序分成许多小部分,每个部分能在任意节点上运行。并且 Hadoop 提供了分布式文件系统存储所有计算节点的数据,为集群带来非常高的带宽。
2 搭建说明 本文几乎所有操作都需要在三台服务器上进行同样的操作,所以为了便于表示,在需要三台服务器上进行同样操作的时候会使用 x3 进行标注。
命令当中的 # 代表 root 用户执行。
命令当中的 $ 代表 hadoop 用户执行。
### 为该命令的注释。
注:可在一台机子上配置好后利用 scp 命令进行复制,若在虚拟机则可直接复制虚拟机。
2.1 节点机器配置 NodeName OS CPU RAM Disk IP NameNode CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 100G 192.168.1.69 DataNode1 CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 500G 192.168.1.70 DataNode2 CentOS 7.2 E7-4830 v3 @ 2.10GHz x2 2G 500G 192.168.1.7
2.2 软件包版本 Software Version JDK Oracle JDK 1.8.0_131(非OpenJDK) Hadoop 2.8.0
3 安装JDK x3 # mkdir -p /usr/local/java # cd /usr/local/java # wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz # tar -xvzf jdk-8u131-linux-x64.tar.gz
### 设置新的 JDK 为默认 JDK,如果机器已经安装 OpenJDK,可能需要先卸载。 # echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_131/" >> /etc/profile # echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile # source /etc/profile
# $JAVA_HOME/bin/java -version ### 测试运行
java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8 .0 _131-b11 )Java HotSpot(TM) 64 -Bit Server VM (build 25.131 -b11 , mixed mode)
4 关闭防火墙 x3 直接关闭整个防火墙不是一个明智的选择,在具体环境中应该挑选出需要的端口,进行放行,本文由于篇幅原因,不再详细讨论,故采用直接关闭防火墙的方法。
# systemctl stop firewalld.service # systemctl disable firewalld.service
5 配置 hostname 及局域网映射 x3 # hostnamectl set -hostname namenode ### 为 namenode 节点设置 hostname# hostnamectl set -hostname datanode1 ### 为 datanode1 节点设置 hostname# hostnamectl set -hostname datanode2 ### 为 datanode2 节点设置 hostname# echo "192.168.1.69 namenode" >> /etc/hosts# echo "192.168.1.70 datanode1" >> /etc/hosts# echo "192.168.1.71 datanode2" >> /etc/hosts
6 创建 hadoop 用户以及 hadoop 用户组 x3 # groupadd hadoop # useradd -m -g hadoop hadoop # passwd hadoop
7 SSH 免密登录 Hadoop 在 namenode 节点中使用 ssh 来访问各节点服务器,例如开启或关闭 hadoop。显然在大型集群中,不可能手动逐个输入密码,在这种情况下,我们可以利用 ssh-agent 代理我们输入密码。 注:该设置只需要在 namenode 节点设置。
7.1 ssh-agent 配置 ssh-agent 开机自动运行
# echo 'eval $(ssh-agent)' >> /etc/profile # source /etc/profile
7.2 配置免密登录 在 namenode 节点上登录 hadoop 用户
$ ssh-keygen -t rsa -f ~/.ssh/id _rsa $ cat ~/.ssh/id _rsa.pub >> ~/.ssh/authorized _keys$ chmod 644 ~/.ssh/authorized _keys$ ssh-copy-id datanode1 $ ssh-copy-id datanode2 $ ssh-add ~/.ssh/id _rsa $ ssh datanode1
8 磁盘挂载(可选) x3 # mkdir /home/hadoop/hdfs # mount /dev/sdb1 /home/hadoop/hdfs/ # chown -R hadoop:hadoop /home/hadoop/hdfs/ # echo "/dev/sdb1 /home/hadoop/hdfs ext4 defaults 0 0" >> /etc/fstab
9 安装 Hadoop x3 # cd /usr/local # wget https://mirrors.scau.edu.cn/hadoop/hadoop-2.8.0.tar.gz ### 使用自己的镜像源 # wget https://mirrors.ustc.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz # tar -xvzf hadoop-2.8.0.tar.gz # chown -R hadoop:hadoop hadoop-2.8.0
10 配置 Hadoop x3 复制默认配置文件,在升级 hadoop 版本时可独立出来。
$ mkdir ~/config/ $ cp -r /usr/local/hadoop-2.8 .0 /etc/hadoop/ ~/config/
指定 hadoop 运行所使用的 JDK 与配置目录, vim ~/config/hadoop/hadoop-env.sh
$ export JAVA_HOME=/usr/local/java/jdk1.8.0_131/ $ export HADOOP_CONF_DIR=/home/hadoop/config/hadoop/
10.1 log 存储位置 修改 hadoop log 存储位置。
$ echo "export HADOOP_LOG_DIR=~/log/hadoop" >> ~/config/hadoop /hadoop-env.sh
修改 YARN log 存储位置,
$ vim config/hadoop/yarn-env.sh。 YARN_LOG_DIR ="/home/hadoop/log/yarn/"
10.2 配置 core-site.xml $ vim ~/config/hadoop/core-site.xml ###进行如下修改<configuration > <property > <description > 默认文件系统及端口description > <name > fs.defaultFSname ><value > hdfs://namenode/value ><final > truefinal >property >configuration >
10.3 配置 hdfs-site.xml $ vim ~/config/hadoop/hdfs-site.xml ###进行如下修改<configuration > <property > <description > namedoe 存储永久性的元数据目录列表description > <name > dfs.namenode.name.dirname ><value > /home/hadoop/hdfs/name/value ><final > truefinal >property ><property > <description > datanode 存放数据块的目录列表description > <name > dfs.datanode.data.dirname ><value > /home/hadoop/hdfs/data/value ><final > truefinal >property >configuration >
10.4 配置 mapred-site.xml $ vim ~/config/hadoop/mapred-site.xml ###进行如下修改<configuration > <property > <description > MapReduce 执行框架设为 Hadoop YARN. description > <name > mapreduce.framework.namename > <value > yarnvalue > property ><property > <description > Map 和 Reduce 执行的比例&#xff0c;Map 执行到百分之几后开始 Reduce 作业description > <name > mapreduce.job.reduce.slowstart.completedmapsname > <value > 1.0value > property >configuration >
10.5 配置 yarn-site.xml $ vim ~/config/hadoop/yarn-site.xml ###进行如下修改<configuration > <property > <description > The address of the applications manager interface in the RM.description > <name > yarn.resourcemanager.addressname > <value > namenode:8032value > property > <property > <name > yarn.nodemanager.aux-servicesname > <value > mapreduce_shufflevalue > property > <property > <description > 存储中间数据的本地目录description ><name > yarn.nodemanager.local-dirsname > <value > /home/hadoop/nm-local-dirvalue > <final > truefinal >property > <property > <description > 每个容器可在 RM 申请的最大内存description ><name > yarn.scheduler.maximum-allocation-mbname > <value > 2048value > <final > truefinal >property > <property > <description > 每个容器可在 RM 申请的最小内存description ><name > yarn.scheduler.minimum-allocation-mbname > <value > 300value > <final > truefinal >property > <property > <description > 自动检测节点 CPU 与 Memdescription > <name > yarn.nodemanager.resource.detect-hardware-capabilitiesname > <value > truevalue > property > <property > <description > The address of the scheduler interface.description > <name > yarn.resourcemanager.scheduler.addressname > <value > namenode:8030value > property > <property > <description > The address of the RM web application.description > <name > yarn.resourcemanager.webapp.addressname > <value > namenode:8088value > property > <property > <description > The address of the resource tracker interface.description > <name > yarn.resourcemanager.resource-tracker.addressname > <value > namenode:8031value > property ><property > <description > The hostname of the RM.description > <name > yarn.resourcemanager.hostnamename > <value > namenodevalue > property >configuration >
10.6 配置 slaves $ vim ~/config/ hadoop/slaves &#xff03;&#xff03;&#xff03;进行如下修改namenode datanode1 datanode2
11 优化 namenode 节点命令使用 $ echo "export PATH&#61;$PATH :/usr/local/hadoop-2.8.0/bin/:/usr/local/hadoop-2.8.0/sbin/" >> ~/.bash_profile $ source ~/.bash_profile
12 启动集群及测试 测试之前最好重启一遍三台机器&#xff0c;以确保配置都生效&#xff0c;并且没有其他问题。
登录 namenode 节点
$ ssh-add ~/.ssh/id _rsa $ hadoop namenode -format $ start-dfs.sh $ start-yarn.sh
12.1 集群总览 NodeName Web Address namenote HDFS http://192.168.1.69:50070 RM http://192.168.1.69:8088 NM http://192.168.1.69:8042 datanode1 HDFS http://192.168.1.70:50075 NM http://192.168.1.70:8042 datanode2 HDFS http://192.168.1.71:50075 NM http://192.168.1.71:8042
12.2 测试用例 hadoop 自带了许多测试用例&#xff0c;所以可以很方便的快速测试集群是否搭建成功。
$ yarn jar /usr/local /hadoop- 2.8 .0 /share/hadoop/mapreduce/hadoop-mapreduce -examples - 2.8 .0 . jar randomwriter random-data
执行上述命令后&#xff0c;打开 RM 以及 NM 的 URL &#xff0c;查看任务是否被执行&#xff0c;如执行&#xff0c;则搭建成功。
12.3 图片展示
13 总结 本文从零开始搭建了具有三个节点服务器的 Hadoop 集群&#xff0c;示范了 Hadoop 搭建集群的基本配置。并且从中我们可以知道 Hadoop 集群的每台机子的配置几乎是相同的&#xff0c;这是大量重复性的劳动&#xff0c;因此使用 docker 会大大加快集群的部署。文中的配置文件&#xff0c;是我根据我自己的三台服务器的机器硬件所决定的参数&#xff0c;读者应该根据自己的实际情况选择参数的设置&#xff0c;下文的参考资料给出了各种属性的说明以及默认值。