本博客只是记录apache hadoop完全分布式配置的大概过程,若在配置中遇到各种错误,本博客不负责提供解决方案,请自行解决问题。本博客中所提到的内容仅供参考使用。转载请说明来源。
apache Hadoop是目前市面上比较主流的开源分布式存储及分布式大数据计算框架,其具有高可靠,高可用,可扩展性强等特点,其设计允许简单的编程模型跨计算机集群处理大规模数据集,框架本身不依赖于硬件的可用性,而是利用设计在应用程序层检测和处理故障。Hadoop项目包含的组件模块有Common,HDFS,MapReduce,YARN等。
- Hadoop Common:一些列的核心通用接口,用于支持其他组件模块,可用于分布式系统的序列化、RPC、持久化数据结构等等。
- Hadoop HDFS:一个分布式文件存储系统,可运行于大型计算机集群中,具有高吞吐的数据读写特性。
- Hadoop MapReduce:分布式大数据计算编程模型,可运行于yarn集群之上。
- Hadoop YARN:分布式作业调度和计算机集群资源管理框架。
apache hadoop环境搭建有三种模式,单机模式、伪分布模式、完全分布模式。其中伪分布模式和完全分布模式仅仅是在配置文件中有一点不一致。本文用最小的完全分布模式为例说明apahce hadoop集群的搭建过程。
一、搭建环境准备
- VM10
- CentOS7操作系统
- JDK1.8
- Hadoop 2.7.X(建议使用稳定版本)
二、准备工作
1.每台机器安装JDK环境,检验jdk环境是否安装成功的命令:java -version,如果显示了jdk版本说明环境OK。【必需】
2.每台机器创建hadoop服务所属的用户及组,以便于与系统的其他服务做区分和管理。【推荐】
注意:本文统一使用CentOS7中的root用户进行配置
3.每台机器的固定IP配置,计算机名称修改,以及ip绑定计算名称(名称不要带中横线,避免服务无法识别)的映射。【必须】
4.三台机器之间的SSH无密码登录配置。【必须】
5.三台机器的规划配置,当然也可自行搭建HA架构的,【推荐】如图示例:
名称 | master | slave0 | slave1 |
---|---|---|---|
IP地址 | 190.168.153.128 | 192.168.153.129 | 192.168.153.130 |
主机名 | master | slave0 | slave1 |
角色 | ResourceManager | NodeManager | NodeManager |
角色 | NameNode | DataNode | DataNode |
三、安装步骤
1.安装好VM10,并在VM10中安装好一个CentOS7,并且在VM中命名为master,IP选择桥接模式.设置用户root用户的密码,并启动安装好的CentOS7系统。
2.修改CentOS7的域名解析文件
vi /etc/hostname
3.设置hosts文件, 指令: vi /etc/hosts
4.关闭防火墙
相关指令:
firewall-cmd --state # 查看防火墙的运行状态
systemctl stop firewalld.service
但是关闭防火墙只能是临时的, 重启之后, 防火墙依然启动, 所以需要把关闭指令写到 /etc/profile 里。
相关指令:
sudo vi /etc/profile
在最后一行添加:
systemctl stop firewalld.service
5.SSH免密登陆
免密登陆说明
- 在master中执行 ssh-keygen命令,会在~/.ssh 目录中生成*.pub结尾的文件;
- 创建authorized_kesy文件,命令为: touch authorized_keys
- 将*.pub文件追加到authorized_keys文件中,指令为:cat *.pub >> authorized_keys
- 将authorized_keys文件分别发送到slave0、slave1的机器中。
- 使用SSH命令测试免密登陆是否成功,此时免密登陆情况为:master机器能够免密访问slave0、slave1,但是slave0、slave1不能免密访问master。
6.Java环境配置
vi /etc/profile
在文件末尾添加
export JAVA_HOME=/opt/bigData/Java/jdk1.8.0_60
export PATH=PATH:$JAVA_HOME/lib
用source /etc/profile使得配置文件生效。注意上述内容中路径的修改,检测java环境是否配置成功。
7.Hadoop环境配置
vi /etc/profile
在文件末尾添加
export HADOOP_HOME=/opt/bigData/hadoop/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
用source /etc/profile使得配置文件生效。注意上述内容中路径的修改,检测hadoop环境是否配置成功。
hadoop -version
8.在hadoop2.7.2/etc/hadoop文件夹下配置
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.153.128:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/bigData/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/bigData/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/bigData/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value><!--1,表示伪分布式2表示最小完全分布式-->
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.153.128:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
这个目录下面没有这个文件, 但是有这个文件的模板, 可以先从这个模板拷贝一个方案
指令: cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.153.128:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.153.128:19888</value>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>192.168.153.128:50030</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>192.168.153.128:9001</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.153.128:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.153.128:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.153.128:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.153.128:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.153.128:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</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>
</configuration>
配置hadoop_env.sh 环境
编辑文件 hadoop-env.sh
添加一行:
export JAVA_HOME=/opt/bigData/Java/jdk1.8.0_60
mapred-env.sh
编辑文件 mapred-env.sh
添加一行:
export JAVA_HOME=/opt/bigData/Java/jdk1.8.0_60
添加masters
添加一个masters文件, 将master添加进去
指令: vi masters
添加:
master
注意:添加masters不一定是必须的。不用该文件也可以运行。
修改slaves
添加:
slave0 或者slave0机器的IP地址
slave1 或者slave1机器的IP地址
到此hadoop配置完成,将整个hadoop发送至slave0、slave1即可。
9.测试
- 格式化硬盘
指令: hadoop namenode -format
看到如下日志即为成功~~
- 启动服务
指令: start-all.sh - 在master终端输入jps查看, 发现namenode已启动
在slave终端输入jps, 发现datanode已启动, 说明已完成
如果datanode无法启动, 在从机的/opt/bigData/Hadoop/hadoop-2.7.2/logs/hadoop-luds-datanode-slave0.out这种格式的错误日志
可以查看错误日志
至此, 集群式环境以部署完毕!