安装Hadoop环境之前需要做一些准备工作,比如:安装Linux、JDK、关闭防火墙、配置主机名、配置免密码登录、了解Hadoop目录结构等。搭建Hadoop环境有三种模式:本地模式、伪分布模式和全分布模式。
一、准备工作
1.安装Linux、JDK、关闭防火墙、配置主机名
安装Linux参考这篇文章:<a href="https://www.chenchuan.net/doc/1539.html" target="_blank" title="在VMware安装RedHat Linux 7">https://www.chenchuan.net/doc/1539.html</a>
安装JDK参考这篇文章:<a href="https://www.chenchuan.net/doc/1541.html" target="_blank" title="在RedHat Linux 7安装JDK">https://www.chenchuan.net/doc/1541.html</a>
关闭防火墙:
- systemctl status firewalld.service
- systemctl stop firewalld.service ---> 如果重启,会重启防火墙
- systemctl disable firewalld.service ---> 永久关闭防火墙
输入systemctl status firewalld.service查看防火墙状态
这里显示inactive说明防火墙关闭成功
配置主机名和IP的对应关系:
编辑配置文件vi /etc/hosts添加192.168.0.111 bigdata111
输入more /etc/hosts命令查看配置
2.Hadoop的目录结构
首先下载Hadoop安装包,Hadoop安装包可以从官网下载,官网下载地址:<a href="http://hadoop.apache.org/releases.html" title="Hadoop官网下载" target="_blank">http://hadoop.apache.org/releases.html</a>,本站提供一个hadoop-2.7.3.tar.gz下载,下载地址:更新中。。。
然后将下载下来的安装包上传到Linux的tools目录,使用tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/解压
Hadoop的目录结构如下:
3.设置Hadoop环境变量
解压好Hadoop后需设置环境变量才可以使用,使用命令vi ~/.bash_profile进入环境变量设置
HADOOP_HOME=/root/training/hadoop-2.7.3
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
使用source ~/.bash_profile命令让Hadoop环境变量生效,start后连续按两次tab键,出现如下界面表示Hadoop环境变量设置成功
二、本地模式
1.特点
没有HDFS、只能测试MapReduce程序,因为本地模式没有HDFS,所以MapReduce处理的是本地Linux的文件数据
2.本地模式配置参数
在hadoop-env.sh中配置JDK的根目录,输入vi hadoop-env.sh命令进入编辑export JAVA_HOME=/root/training/jdk1.8.0_144,如果是haddop-2.7.3默认在第25行。
3.测试MapReduce程序
创建目录:mkdir ~/input
在~/input目录中创建一个data.txt文件,输入文本
I love Beijing
I love China
Beijing is the capital of China
运行:
首先进入cd ~/training/hadoop-2.7.3/share/hadoop/mapreduce/目录
然后输入hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/input/data.txt /output运行,这个/output输出目录不能事先存在
进入cd ~/output/目录查看目录下的part-r-00000文件,如果出现如下结果表示MapReduce程序测试成功
三、伪分布模式
1.特点
是在单机上,模拟一个分布式的环境,具备Hadoop的主要功能,安装好伪分布模式后由HDFS和Yarn两部分组成,HDFS:namenode+datanode+secondarynamenode,Yarn: resourcemanager + nodemanager`
2.伪分布模式配置参数
3.配置
hdfs-site.xml
<!--
表示数据块的冗余度,默认:3
原则:一般数据块的冗余度跟数据节点(DataNode)的个数一致;最大不超过3
-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--是否开启HDFS的权限检查,默认true-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
core-site.xml
<!--配置NameNode地址,9000是RPC通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata111:9000</value>
</property>
<!--
HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录
/root/training/hadoop-2.7.3/tmp 这个目录要先建立好
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
mapred-site.xml:默认没有这个文件,可以复制同目录下的mapred-site.xml.template,命令:cp mapred-site.xml.template mapred-site.xml
<!--MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<!--Yarn的主节点RM的位置-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata111</value>
</property>
<!--MapReduce运行方式:shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
4.格式化HDFS(NameNode)
使用hdfs namenode -format命令格式化HDFS(NameNode)
输出如下日志说明格式化成功:Storage directory /root/training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.
5.启动与停止
启动:start-all.sh
停止:stop-all.sh
启动和停止的时候都会提示让输入四次密码
启动成功后通过jps查看到这五部分安装到一台主机上的
6.访问
通过Web界面访问
- HDFS: http://192.168.0.111:50070
- Yarn: http://192.168.0.111:8088
若访问出现如下界面表示Hadoop伪分布模式配置成功
四、配置免密码登录
1.原理
基本原理:采用不对称加密的算法,如果Server A要登录到Server B上,由Server A产生一个密钥对,其中包含公钥和私钥,把Server A产生的公钥给Server B。当Server A登录到Server B的时候由Server B随机产生一个字符串,使用Server A给的公钥进行加密生成一个加密字符串,然后把这个加密字符串发送给Server A,当Server A收到Server B发来的加密字符串的时候使用自己的私钥进行解密得到Server B加密之前的字符串发回给Server B。Server B收到Server A发来的解密字符串进行对比,如果一样就直接登录,否则让输入密码。
原理图:
2.配置
比如有一个主机(myhost01)要登录到bigdata111上要配置免密码登录,
- 在myhost01上使用ssh-keygen -t rsa生成密钥对,
- 使用命令ssh-copy-id -i .ssh/id_rsa.pub root@bigdata111把myhost01上产生的公钥拷贝到bigdata111
这样就配置完成了,在myhost01上使用命令ssh bigdata111连接
发现不用密码就可以连接,这样上面伪分布模式启动和停止都需要输入密码,现在配置了免密码登录就不需要输入密码了。
从上图可以看出不需要密码就可以启动Hadoop了。
五、全分布模式
1.特点
真正的分布式环境,用于生产,至少需要三台主机
2.规划及准备工作
搭建Hadoop全分布模式需要三台主机,这里用bigdata112/bigdata113/bigdata114这三台,bigdata112做主节点,bigdata113和bigdata114做从节点
规划示意图
搭建Hadoop全分布模式跟为分布模式一样需要关闭防火墙、安装JDK、配置主机名和配置免密码登录,三台主机时间同步。关闭防火墙和安装JDK跟第一点的准备工作一样,不同的是这里配置主机名和免密码登录需要写上每一台主机的IP和私钥
配置主机名
在每台主机输入vi /etx/hosts命令添加三台主机ip及名称
192.168.0.112 bigdata112
192.168.0.113 bigdata113
192.168.0.114 bigdata114
配置免密码登录
三台主机配置免密码登录需要两两之间的免密码登录,所以每台主机都要拷贝公钥,每台主机都要使用ssh-keygen -t rsa产生自己的公钥和私钥。每台机器都要把自己的公钥拷贝给这三台每一台主机
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata112
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata113
ssh-copy-id -i .ssh/id_rsa.pub root@bigdata114
三台主机时间同步
做全分布模式需要三台主机时间同步,不然执行MapReduce可能会出错。要保证三台主机时间同步方法有很多,比如:搭建一台时间服务器、跟互联网时间同步、用工具执行同时修改时间等。
3.安装
在主节点上(bigdata112)安装,然后复制到bigdata113和bigdata114
解压设置环境变量
使用命令tar -zxvf hadoop-2.7.3.tar.gz -C /training/解压Hadoop安装包,在/.bash_profile中设置192.168.0.112/113/114环境变量
HADOOP_HOME=/root/training/hadoop-2.7.3
export HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH
使用source ~/.bash_profile命令让Hadoop环境变量生效
修改配置文件
全分布模式需要修改如下配置
hadoop-env.sh
在hadoop-env.sh中配置JDK的根目录,输入vi hadoop-env.sh命令进入编辑export JAVA_HOME=/root/training/jdk1.8.0_144,如果是haddop-2.7.3默认在第25行。
hdfs-site.xml
<!--表示数据块的冗余度,默认:3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
core-site.xml
<!--配置NameNode地址,9000是RPC通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata112:9000</value>
</property>
<!--HDFS数据保存在Linux的哪个目录,默认值是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
mapred-site.xml
默认没有mapred-site.xml需要通过cp mapred-site.xml.template mapred-site.xml命令复制一个
<!--MR运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<!--Yarn的主节点RM的位置-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata112</value>
</property>
<!--MapReduce运行方式:shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
slaves
bigdata113
bigdata114
格式化NameNode
在使用之前需要先格式化NameNode,使用命令hdfs namenode -format格式化
复制到从节点上
把主节点上配置好的hadoop复制到从节点上
scp -r hadoop-2.7.3/ root@bigdata113:/root/training
scp -r hadoop-2.7.3/ root@bigdata114:/root/training
启动
在主节点上启动start-all.sh
验证
启动成功后在浏览器中输入
- http://192.168.0.112:50070
- http://192.168.0.112:8088
如果都能访问说明环境搭建成功。