阅读本章需把笔者的如下两章做好才可进行
虚拟机VMware中安装linux系统CentOS
CentOS7设置静态IP以及windows下ping不通虚拟机、虚拟机ping不通外网解决方案
本教程适用于在 CentOS7 系统中安装 Hadoop2,详细介绍了从系统环境配置、Java环境配置到 Hadoop 安装及 Hadoop 集群配置,包括:单机、伪分布式以及分布式,步骤详细,辅以适当说明。相信按照步骤来,都能顺利搭建一个属于自己的 Hadoop 集群。
一:设置主机名及IP映射
在我们的实际工作中,Hadoop集群服务器不可能只有一台,两台,上百台也有可能,那么每台机器都有自己的IP的话容易太混淆,可以通过设置主机名对对服务器进行标识。
删除原有的内容,添加Master,并将此服务器作为集群中的主服务器,保存并退出(wq)
# vi /etc/hostname
使用vi编辑器编辑host文件,设置IP映射和主机名,在文件内容的尾部添加即可
至此我们主机的网络环境就已经配置好了,为了以后做Hadoop集群分布式我们需要再装一个CentOS7,我们直接从主机克隆内容过来在进行修改为从机就好。
出现以上内容,就是被克隆的机器没用关机,需要关机后克隆。
一直下一步直到出现选择怎样克隆,选择完整克隆。
填写虚拟机名称和路径
填写后点击完成稍等即可
克隆完成后,你的从机会出现在左栏中,启动即可
那么克隆下来后再次需要更改配置,你会发现克隆后是把你克隆的那个机器的内容全部克隆,只需修改此机的静态IP、主机名、和IP映射即可
输入:vi /etc/hosts 主机名和IP映射
输入:vi /etc/hostname 配置主机名
目前两个系统Master和Slave1的网络配置就完成了,Master和Slave1互相ping通自己的主机名和IP也能Ping通对方,也能ping通外网,那么再windos中呢个ping通Master和Slave1的主机名和IP吗,那么来试一下咯
还真能ping通IP 那么ping一下主机名试一下
可以ping通ip,但是windows下不能直接使用ping Master或ping Slave1来ping,因为windows下并没有对它们做主机名及IP的映射。那么我们就来做一下吧!
找到这个路径下的hosts文件,如果你是windows10的话 需要剪贴到桌面进行修改,修改后再粘贴回这个文件
在文件内容尾部添加即可
那么配置完后我们再去试一下ping主机名
如图已经配置成功了,是不是感觉很简单!好那么我们继续往下走
以上都是在虚拟机里的CentOS系统中操作,由于我们的网络配置都已配置完成,接下来笔者将使用xshell远程连接工具来操作(如果没有去百度要一个),在主机Master和从机Slave1中分别创建一个hadoop用户并授予管理员权限
1.创建用户并设置密码
执行如下命令即可:
# useradd -m hadoop -G root -s /bin/bash
# passwd
2.为hadoop授予管理员权限
# visudo
按ESC键盘,输入英文冒号,并输入98,找到 root ALL=(ALL) ALL
为了保险起见建议大家把 root这一行复制粘贴到下一行,把root改为hadoop即可,然后再次按ESC键,输入英文冒号wq保存并退出
1:查看是否安装了SSH
不论是集群、还是单节点都需要SSH登陆(类似与一种远程链接,你可以任意登陆某台linux主机,并在上面执行命令),但是CentOS都默认安装了SSH client、SSH server,那么使用Hadoop用户登陆并执行下列命令检测一下吧
$ rpm -qa | grep ssh
如图所说,检测到已经安装了 SSH server和 SSH clients,那么就不需要我们再去安装了,但如果未安装的话需要执行以下命令安装即可,其他依赖包yum会自动检测安装
$ sudo yum install openssh-clients
$ sudo yum install openssh-server
2:配置SSH无密登陆
目的:可以再Master中登陆到任意一台从机进行操作,无需输入密码
操作步骤:
1:在主机Master中生成密钥
$ cd ~/.ssh/ #切换到hadoop中的ssh目录下,如果没用这个目录,执行命令 hadoop localhost
$ ssh-keygen -t rsa # 会有提示,都按回车就可以
2:将Master中生成的密钥授权(authorized_keys)
$ cat id_rsa.pub # 查看生成的公钥
$ cat id_rsa.pub >> authorized_keys # 加入授权
$ chmod 600 authorized_keys # 修改文件权限,如果不修改文件权限,那么其它用户就能查看该授权文件,然后使用该密钥也能进行登录,不安全
3:将刚刚在Master中生成的密钥文件 authorized_keys拷贝到Slave1从机下.ssh文件中
当然你要先用hadoop用户登陆你的从机,看看从机是否有.ssh这个文件,如果没有,也要在主目录下输入ssh localhost(别忘了一定要在hadoop用户下操作,不然你就装在root或者别的用户下咯!)
4:在Master主机中进行拷贝,命令如下:
$ scp authorized_keys hadoop@Slave1:~/.ssh/
看到如上图就应该成功了,但为了保险起见我们要去从机(Slave1)进这个目录看一下这个授权文件在不在
那么从机已经有这个文件了,我们就要去主机去无密登陆以下从机,测一下我们的无密登陆,看到下图不需要输入密码就进入从机就成功了
在Master和Slave1中分别安装JDK,教程按照Master为例,Slave1仿照即可。
使用Hadoop登陆
1.下载安装包
从官网下载JDK的rpm包,笔者下载的是jdk1.8的rpm包
官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2.安装JDK
我们在安装CentOS7时使用的是最小安装,所以系统就不会安装默认JDK了,但出于保险,我们还是使用命令检查是否安装了默认JDK
我们在安装CentOS的时候都是默认最小安装,应该不会有JDK,但是为了保险起见,我们还是要用命令查看一下
1:rpm -qa | grep java
2:rpm -qa | grep jdk
以上两种命令选择其一执行就可以,执行后如果有jdk的安装的话,使用以下命令依次写在即可
$ rpm -e --nodeps java包名
在Hadoop主题目录下新建文件夹installPkgs,用于我们存储安装包,使用rz命令将安装包上传到这个文件夹中
mkdir installpkgs #在home/hadoop/目录下新建
rz #将本地的文件上传到服务器中
上传完后的文件如下,文件只有读写权限,没有执行权限。
给安装包赋予运行权限
chmod 755 jdk-8u171-linux-x64.rpm
执行如下命令进行安装即可
rpm -ivh jdk-8u171-linux-x64.rpm
使用Vim编辑器打开.bashrc文件,配置变量
$ vim ~/.bashrc # linux中所有的隐藏文件前面都会有一个点.,bashrc就是一个隐藏文件
# ~的含义:表示用户的主题目录,Linux中每创建一个用户都会在home文件下创建一个与用户名相同名字的文件,由于我们刚才
创建一个Hadoop用户,那么主题目录就在/home/hadoop
配置环境变量
java安装成功后会默认放在/usr/java目录下,要想查看目录的地址而不想关闭正在编辑的bashrc文件如图下:
在新复制的渠道内如图查询地址 右键复制
$ cd /usr/java/jdk(按Tab键自动补齐)
$ pwd # 查看当前目录
将路径复制好后在bashrc文件尾部添加环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64(路径选择你自己安装的jdk路径)
export PATH=$PATH:$JAVA_HOME/bin(追加到Path中)
环境变量配置好后,重新加载bashrc文件,让环境变量生效
source ~/.bashrc
输入如下命令查看环境变量是否成功,如图就表示已经成功了
$ echo $JAVA_HOME
$ java -version
1:hadoop简介: hadoop是一个开源可用于大规模集群上的分布式并行框架,核心:MapReduce和HDFS。基于Hadoop你可以轻松的编写处理海量数据的可处理海量数据和分布式并行程序,并将运行于成百上千个节点组成的大规模计算机集群中
HDFS:Hadoop Distributed File System 的缩写,Hadoop中的分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,适合那些有着超大数据集(large data set)的应用程序。
MapResuce:MapReduce是一套从海量·源数据提取分析元素最后返回结果集的编程模型,将文件分布式存储到硬盘是第一步,从海量数据中提取分析我们需要的内容就是MapReduce做的事.
官网:http://hadoop.apache.org/
下载Hadoop
笔者下载的是2.8.3
2.安装Hadoop
将下载的Hadoop压缩文件tar.gz使用命令rz上传到installPkgs目录下
将hadoop解压文件解压到/usr/local/路径下,执行如下命令即可
sudo tar -zxf hadoop-2.8.3.tar.gz -C /usr/local/
修改文件名,将hadoop-2.8.3修改为hadoop,执行如下命令即可
sudo mv ./hadoop-2.8.3/ ./hadoop
更改hadoop用户的所属者及所属组。只让hadoop用户可以操作hadoop目录及子目录下的所有文件,执行如下命令即可
# chown -hR hadoop /usr/local/hadoop/ # 修改所有者为hadoop
# chgrp -hR hadoop /usr/local/hadoop/ # 修改所属组为hadoop
hadoop解压后即可使用,现在可以用命令来检测下是否可用
#cd/usr/local/hadoop/ #进入hadoop安装目录
#./bin/hadoop version #查看hadoop的版本号
如上图所致即为成功
配置环境变量
$ vim ~/.bashrc # 打开 bashrc 文件
添加如下内容,保存退出。
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop # hadoop的安装目录,替换为你的hadoop的安装目录
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
在PATH追加Hadoop的环境变量
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin # JDK 是之前我们安装时配置的
重新加载bashrc文件,使配置的Hadoop环境生效
$ source ~/.bashrc
输入如下命令查看环境变量是否生效
$ echo $PATH
$ hadoop version # 成功会显示hadoop的版本信息
到此Hadoop已经安装完成,环境变量已经完成配置
现在我们要操作Hadoop了,但是之前我们需要关闭防火墙和selinxu守护进程,如果不关闭,hadoop在启动的时候可能报错既启动失败,主机从机都需要关闭。
$ systemctl status firewalld # 查看防火墙状态
$ systemctl stop firewalld # 关闭防火墙
关闭selinux守护线程:使用root用户
$ su root # 切换到rot用户
$ getenforce # 查看selinux守护线程的状态
$ setenforce 0 # 关闭selinux守护线程
$ exit # 回到原来的终端
Hadoop可以在单节点上以伪分布式的方式运行,Hadoop进程以分离的Java进程来运行,节点即为NameNode也作为DataNode,同时,读取的是HDFS文件中的文件
Hadoop的伪分布式的配置需要设置环境变量,伪分布式我们仍然使用主机Master即可,因为Master即为NameNode,同时也是DataNode
NameNode:主节点。存储文件的元数据如文件名,文件目录结构,文件属性,以及每个文件块列表以及块所在的DataNode等,因此这是一个核心节点。
DataNode:数据节点,每台从服务器节点都运行一个,负责把HDFS数据块读写到本地文件系统
Hadoop伪分布式配置
Hadoop的配置文件位于/usr/local/hadoop/etc/hadoop,hadoop的配置文件都是XML格式的,每个声明property的name和value的方式来实现
Hadoop的伪分布式需要修改两个XML文件: core-site.xml和 hdfs-site.xml
core-site.xml:此文件是hadoop的核心文件
hdfs-site.xml:用于配置NameNode的URL以及NameNode和DataNode的存放位置
先使用远程工具,将这两个XML文件拿到本地中修改,在本地修改完后再上传到服务器覆盖即可
笔者这里使用的远程工具是SSH,直接拖拉到桌面,修改保存后再拖进去即可(路径:/usr/local/hadoop/etc/hadoop)
修改core-site.xml文件,添加如下内容
configuration>
修改hdfs-site.xml文件,添加内容如下:
确认修改无误后,将文件保存拖进服务器刚才拿出的地址覆盖即可
注意:这里要注意的一点是yarn-site.xml文件不需要更改,默认为localhost,表示服务器即为NameNode也为DataNode,也就是我们现在做的伪分布式
启动 Hadoop
配置完成后我们需要输入如下命令将NameNode格式化
$ hdfs namenode -format
成功的话会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错
启动Hadoop的命令:
$ start-dfs.sh #开启 NameNode 和 DataNode 守护进程
启动成功后,通过输入命令jps来判断是否启动成功,如启动成功后会出现如下进程:NameNode、DataNode、SecondaryNameNode
启动成功后我们在浏览器输入http://Master:50070来查看NameNode和DateNode的相关信息,还可以在线查看HDFS的文件
停止Hadoop的命令:
$ stop-dfs.sh
到这里我们的伪分布式就已经搭建成功了,是不是觉得很简单呢,但是有些朋友会有疑问了,为什么不启动yarn呢,因为到此我们做的是伪分布式,
不需要启动yarn,不会影响程序执行的。
Master和Slave1都需要做如下配置,我们以Master为例子,Slave1将Master配置好的文件拿过来覆盖即可。
集群/分布式都需要改cd /usr/local/hadoop/etc/hadoop/路径下的五个xml文件,分别为:
core-site.xml、hdfs-site.xml、mapred-site.xml.template、yarn-site.xml、slaves.
yarn-site.xml 、slaves,更多设置项可点击查看官方说明,Hadoop 集群搭建官方文档,这里仅设置了正常启动所必须的设置项。
core-site.xml:Hadoop的核心配置文件
hdfs-site.xml:用于配置NameNode的URL和NameNode、DataNode的存放位置
mapred-site.xml.template:MapReduce相关配置
yarn-site.xml:配置资源管理系统yarn
slaves:配置DataNode主机名
1).修改 core-site.xml 文件
参考伪分布式中的配置
2).修改 hdfs-site.xml 文件
参考伪分布式中的配置
3).修改 mapred-site.xml 文件
4).修改 yarn-site.xml 文件
5).修改 slaves文件
Slave文件存放的是DataNode的主机名,一行一个,默认是localhost,伪分布式没有删掉的原因是让Master节点即作为NameNode,也作为DataNode
本教程只让Master节点仅作为NameNode,所以把localhost删掉换成Slave1
启动 Hadoop 集群
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
启动后,查看进程是否都启动成功,并SSH登陆到从机查看DataNode有没有启动成功
成功后在浏览器中输入http://Master:50070查看 DataNode 和 NameNode 的状态
停止Hadoop集群:
$ stop-dfs.sh
$ stop-yarn.sh
$ mr-jobhistory-daemon.sh stop historyserver
OK,至此我们Hadoop的伪分布式、集群分布式已全部完成,其实还是很简单的嘛,加油!