Hadoop搭建部署
本文为Hadoop搭建部署的学习笔记
Hadoop的三种模式
Hadoop运行模式包括:单机模式、伪分布式模式以及完全分布式模式。
Hadoop官方网站:hadoop.apache.org/
单机模式
- 默认模式。
- 不对配置文件进行修改。
- 使用本地文件系统,而不是分布式文件系统。
- Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
- 用于对MapReduce程序的逻辑进行调试,确保程序的正确。
伪分布式模式
- 在一台物理主机上模拟多台主机。
- Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
- 在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。
- 修改3个配置文件:core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)
- 格式化文件系统
完全分布式模式
- Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
- 在所有的主机上安装JDK和Hadoop,组成相互连通的网络。
- 在主机间设置SSH免密码登录,把各从节点生成的公钥添加到主节点的信任列表。
- 修改3个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,设置文件的副本等参数
- 格式化文件系统
综上所述单机版适合开发调试;伪分布式版,适合模拟集群学习;完全分布式,生产使用的模式。
基础环境准备
环境准备
系统版本 | jdk版本 | Hadoop版本 | 服务器IP | 服务器台数 |
---|---|---|---|---|
centos 6.5 | jdk 1.8 | hadoop-2.10.0 | 192.168.1.0 | 4台 |
配置host和主机名
🖥查看默认主机名:使用hostname
命令来查看
🖥查看和修改主机名:使用hostname + *
命令来修改主机名,*代表主机名
不过上述修改主机名只是暂时的,重启后会失效。如果永久修改主机名,要修改配置文件执行命令: vim /etc/sysconfig/network
编辑文件中的HOSTNAME例如
1 | HOSTNAME=master |
绑定hostname与IP,修改四台服务器的hosts文件
1 | vim /etc/hosts |
分别修改服务器的主机名:HOSTNAME,master为例说明
1 | vim /etc/sysconfig/network |
执行reboot
重启后生效,完成之后依次修改其它salve服务器为: slave1~3。
配置防火墙
查看防火墙状态
1 | service iptables status |
关闭防火墙
1 | service iptables stop |
关闭SELINUX
1 | setenforce 0 |
配置免密登录
一、配置免密访问本机
1.生成密钥
1 | ssh-keygen -t rsa |
2.将公钥追加到”authorized_keys”文件
1 | cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
3.赋予权限
1 | chmod 600 ~/.ssh/authorized_keys |
4.验证本机能无密码访问
1 | ssh master |
通过测试发现是可以不用输入密码就能访问的,然后下面依次配置salve1~3无密访问。
二、配置master本机无密码登录slave1、slave2、slave3,以master无密码登录slave1为例进行讲解:
1.登录slave1,复制master服务器的公钥”id_rsa.pub”到slave1服务器的”root”目录下。
1 | scp root@master:/root/.ssh/id_rsa.pub /root/ |
2.将master的公钥(id_rsa.pub)追加到slave1的authorized_keys中
1 | cat id_rsa.pub >> .ssh/authorized_keys |
3.master上面测试
1 | ssh slave1 |
三、配置slave1~slave3本机无密码登录master
下面以slave1无密码登录master为例进行讲解,需参照下面步骤完成slave2~slave3无密码登录master。
1.登录master,复制slave1服务器的公钥”id_rsa.pub”到master服务器的”/root/”目录下。
1 | scp root@slave1:/root/.ssh/id_rsa.pub /root/ |
2.将slave1的公钥(id_rsa.pub)追加到master的authorized_keys中。
1 | cat id_rsa.pub >> .ssh/authorized_keys |
3.在 slave1上面测试
1 | ssh master |
并且依次配置 slave2、slave3
到此主从的无密登录已经完成了。各台服务器之间无需密码就可以远程登录了!
环境搭建
安装并配置Java
JAVA环境JDK推荐使用Oracle的JDK,自行到网站下载即可。这里我使用的版本是1.8.
解压文件
1 | tar -zxvf jdk-8u241-linux-x64.tar.gz -C /usr/local |
重命名文件夹
1 | mv jdk-8u241-linux-x64.tar.gz java |
配置环境变量vim /etc/profile
1 | export JAVA_HOME=/usr/local/java |
保存退出最后,需要让该环境变量生效,执行如下代码:
1 | source /etc/profile |
检验是否配置成功
1 | java |
如果三个命令执行均为报错,并且有结果输出,则说明配置正确。
Hadoop环境搭建
配置master的hadoop环境
1、master上 解压缩安装包及创建基本目录
1 | 下载hadoop |
2、 配置master的hadoop环境变量
配置环境变量,修改配置文件vim /etc/profile
1 | export HADOOP_HOME=/usr/local/hadoop |
使得hadoop命令在当前终端立即生效
1 | source /etc/profile |
单机模式
官方案grep例
1 | #hadoop目录下创建一个input文件夹 |
官方WordCount案例
1 | #创建wcinput文件夹 |
虽然输入一些自己想要的内容比如
1 | hello hello |
然后回到Hadoop目录
1 | #返回Hadoop目录 |
查看结果cat wcoutput/part-r-00000
输出结果如下
1 | BigData 1 |
单机伪分布式模式
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
配置hadoop-env.sh
修改其中的JAVA_HOME
1 | export JAVA_HOME=/usr/local/java/ |
配置core-site.xml
,将其中的改为如下所示
1 | <configuration> |
配置hdfs-site.xml
1 | <configuration> |
配置mapred-site.xml
1 | <configuration> |
配置yarn-site.xml
1 | <configuration> |
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),伪分布式只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过我还是配置了yarn跟marped。若没有配置 hadoop.tmp.dir 参数的话,则默认使用的临时目录为 /tmp/hadoo-hadoop,然而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:
1 | bin/hdfs namenode -format |
启动hadoop
1 | sbin/start-all.sh |
成功启动后,运行jps命令
1 | source /etc/profile |
如果安装成功,则会出现如下如下进程
1 | 14577 Jps |
此时可以通过http://master:50070 访问HDFS的web界面,通过http://master:8088/来访问YARN的web界面
完全分布式运行模式
配置master的hadoop环境
配置core-site.xml
修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml
,通过fs.default.name
指定NameNode的IP地址和端口号,通过hadoop.tmp.dir
指定hadoop数据存储的临时文件夹。
1 | <configuration> |
特别注意:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。
配置hdfs-site.xml
:
修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml
,通过dfs.replication
指定HDFS的备份因子为3,通过dfs.name.dir
指定namenode节点的文件存储目录,通过dfs.data.dir
指定datanode节点的文件存储目录。
1 | <configuration> |
配置mapred-site.xml
拷贝mapred-site.xml.template为mapred-site.xml,然后再进行修改
1 | <configuration> |
配置yarn-site.xml
1 | <configuration> |
6、配置masters
文件
修改/usr/local/hadoop/etc/hadoop/masters
文件,该文件指定namenode节点所在的服务器机器。删除localhost,添加namenode节点的主机名master;不建议使用IP地址,因为IP地址可能会变化,但是主机名一般不会变化。
1 | vi /usr/local/hadoop/etc/hadoop/masters |
配置slaves
文件(Master主机特有)
修改/usr/local/hadoop/etc/hadoop/slaves
文件,该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名,如下所示。
1 | vim /usr/local/hadoop/etc/hadoop/slaves |
配置slave的hadoop环境
下面以配置slave1的hadoop为例进行演示,用户需参照以下步骤完成其他slave2~3服务器的配置。
复制hadoop到slave1节点
1 | scp -r /usr/local/hadoop slave1:/usr/local/ |
登录slave1服务器,删除slaves内容
1 | rm -rf /usr/local/hadoop/etc/hadoop/slaves |
2)配置环境变量
1 | vim /etc/profile |
使得hadoop命令在当前终端立即生效;
1 | source /etc/profile |
并且依次配置其它slave服务
启动集群
格式化HDFS文件系统进入master的~/hadoop目录,执行以下操作
1 | bin/hadoop namenode -format |
格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
然后启动hadoop:
1 | sbin/start-all.sh |
命令查看Hadoop集群的状态
通过简单的jps命令虽然可以查看HDFS文件管理系统、MapReduce服务是否启动成功,但是无法查看到Hadoop整个集群的运行状态。我们可以通过hadoop dfsadmin -report
进行查看。用该命令可以快速定位出哪些节点挂掉了,HDFS的容量以及使用了多少,以及每个节点的硬盘使用情况。
1 | hadoop dfsadmin -report |
参考文章: