目录
一. 软硬件环境
1. 测试环境
信息 | 内容 |
主机版本 | centos7 |
机器数量 | 3台 |
Hadoop版本 | 3.3.4(已踩坑不支持snappy) 已修改3.1.3 |
安装包解压路径 | /home/tools/hadoop/ |
2. hosts配置
主机ip地址 | 对应主机host |
192.168.57.188 | node1 |
192.168.57.189 | node2 |
192.168.57.190 | node3 |
二. 前置环境准备
- 安装JDK1.8(Hadoop支持1.8)
- 自定义shell环境变量sh文件放在 /etc/profile.d/ 目录下
- 创建非root用户(这里用的myuser),配置三台服务器之间的免密登录
- 配置三台服务器使时间同步
1. 安装工具
yum -y install ntp ntpdate
2. 同步网络时间
ntpdate cn.pool.ntp.org
三. HDFS单主节点集群
1. 解压安装
解压安装包得到一个安装文件如下
2. 修改配置
修改配置文件路径为
cd /home/tools/hadoop/hadoop-3.1.3/etc/hadoop
需要修改的配置文件有8个
core-site.xml
hdfs-site.xmlyarn-site.xml
mapred-site.xml
hadoop-env.shworkers (这个文件可不用配置,配置后可以一键启动集群)
whitelist (白名单,默认不存在,主动创建,需要写入集群中的所有主机hosts)
blacklist (黑名单,默认不存在,主动创建,写入的host节点无法加入集群)
配置文件修改后的内容如下
2.1 core-site.xml
<configuration>
<property><!--指定NameNode的地址-->
<name>fs.defaultFS</name>
<value>hdfs://node1:9820</value>
</property>
<property><!--指定hadoop运行时产生文件的存储目录-->
<name>hadoop.tmp.dir</name>
<value>/home/tools/hadoop/hadoop-3.1.3/data/temp</value>
</property>
<!--用户权限配置-->
<property><!--设置该myuser用户允许通过代理访问的主机节点-->
<name>hadoop.proxyuser.myuser.hosts</name>
<value>*</value>
</property>
<property><!--设置该myuser用户允许通过代理用户所属组-->
<name>hadoop.proxyuser.myuser.groups</name>
<value>*</value>
</property>
<property><!--设置HDFS网页登录使用的静态用户为myuser-->
<name>hadoop.http.staticuser.user</name>
<value>myuser</value>
</property>
<!--配置回收站-->
<property><!--删除的文件会在回收站保留60分钟-->
<name>fs.trash.interval</name>
<value>60</value>
</property>
<property><!--回收站检查,每次间隔60分钟清空一次回收站-->
<name>fs.trash.checkpoint.interval</name>
<value>60</value>
</property>
</configuration>
2.2 hdfs-site.xml
<configuration>
<!--web管理访问配置-->
<property><!--NameNode的web访问地址-->
<name>dfs.namenode.http-address</name>
<value>node1:9870</value>
</property>
<property><!--备份NameNode的web访问地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>node3:9870</value>
</property>
<!--块大小与副本配置-->
<property><!--副本hdfs备份数-->
<name>dfs.replication</name>
<value>1</value>
</property>
<property><!--块大小-->
<name>dfs.blocksize</name>
<value>67108864</value>
</property>
<!--NameNode/DataNode数据存储配置-->
<property><!--NameNode文件保存路径-->
<name>dfs.namenode.name.dir</name>
<value>file:/home/tools/hadoop/hadoop-3.1.3/data/namenode</value>
</property>
<property><!--DataNode保存路径地址,可以配置多个路径,使用逗号隔开,用于后续扩展磁盘-->
<name>dfs.datanode.data.dir</name>
<value>file:/home/tools/hadoop/hadoop-3.1.3/data/datanode</value>
</property>
<!--镜像缓存刷新配置-->
<property><!--SecondaryNameNode两次刷镜像之间的最大间隔为1小时-->
<name>dfs.homenode.checkpoint.period</name>
<value>3600s</value>
</property>
<property><!--经过检查,操作次数达到100W次就刷镜像文件-->
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
</property>
<property><!--60秒进行一次检查,用于记录镜像文件-->
<name>dfs.namenode.checkpoint.check.period</name>
<value>60s</value>
</property>
<!--数据节点是否正常的心跳检测-->
<property><!--NameNode与DataNode心跳时间间隔-->
<name>dfs.heartbeat.interval</name>
<value>3s</value>
</property>
<property><!--检查过期 300000毫秒心跳 认为DataNode断开-->
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<!--黑白名单文件配置-->
<property><!-- 白名单文件,第一次添加白名单必须重启集群,不是第一次,只需要刷新NameNode节点即可 -->
<name>dfs.hosts</name>
<value>/home/tools/hadoop/hadoop-3.1.3/etc/hadoop/whitelist</value>
</property>
<property><!-- 黑名单文件 -->
<name>dfs.hosts.exclude</name>
<value>/home/tools/hadoop/hadoop-3.1.3/etc/hadoop/blacklist</value>
</property>
<!--速度限制-->
<property><!--集群平衡节点之间传输数据的带宽配置-->
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>10m</value>
</property>
</configuration>
2.3 yarn-site.xml
<configuration>
<!--环境配置-->
<property><!--指定MR走shuffle-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property><!--指定资源调度resourcemanager节点-->
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>控制台输入hadoop classpath,将返回的内容Hadoop classpath路径写在这里</value>
</property>
<!--历史日志配置-->
<property><!--日志聚集功能,默认关闭-->
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property><!--日志聚集地址-->
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
</property>
<property><!--日志保留时间 7日-->
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--Yarn调度配置-->
<property><!-- 选择调度器,默认容量调度 -->
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property><!-- ResourceManager处理调度器请求的线程数量,默认50个任务同时运行;如果提交的任务数大于50,可以增加该值,但是不能超过3台 * 4线程 = 12线程(去除其他应用程序实际不能超过8) -->
<name>yarn.resourcemanager.scheduler.client.thread-count</name>
<value>8</value>
</property>
<!--集群资源自动配置,手动配置与自动配置二选一-->
<property><!-- 是否让yarn自动检测硬件进行配置,默认是false,如果该节点有很多其他应用程序,建议手动配置。如果该节点没有其他应用程序,可以采用自动 -->
<name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
<value>false</value>
</property>
<property><!-- 是否将虚拟核数当作CPU核数,默认是false,采用物理CPU核数,如果设置为true需要配合下面的比例配置使用 -->
<name>yarn.nodemanager.resource.count-logical-processors-as-cores</name>
<value>false</value>
</property>
<property><!-- 虚拟核数和物理核数比例,默认是1.0 -->
<name>yarn.nodemanager.resource.pcores-vcores-multiplier</name>
<value>1.0</value>
</property>
<!--集群资源手动配置,手动配置与自动配置二选一-->
<property><!--NodeManager使用内存大小-->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property><!-- nodemanager的CPU核数,不按照硬件环境自动设定时默认是8个,修改为4个 -->
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!--Yarn容器资源配置-->
<property><!--一个容器最小内存-->
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>128</value>
</property>
<property><!--一个容器的最大内存-->
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>512</value>
</property>
<property><!-- 容器最小CPU核数,默认1个 -->
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
<property><!-- 容器最大CPU核数,默认4个,修改为2个 -->
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>2</value>
</property>
<!--容器内存检查,推荐虚拟内存和物理内存二选一选物理内存,默认都开-->
<property><!--是否限制容器使用的物理内存总数,超过申请限制会被杀掉-->
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property><!--是否限制容器使用的虚拟内存总数,超过申请限制的一定比例会被杀掉,需要配合比例,比例在下方配置-->
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property><!-- 虚拟内存和实际申请内存比例,默认2.1 -->
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
</configuration>
2.4 mapred-site.xml
<configuration>
<property><!--指定mapreduce使用yarn运行-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>