本文主要是从0开始搭建Hadoop伪分布,涉及到的知识点:
- VMware创建RetHat Linux虚拟机
- 防火墙
- 免密码登陆
- 本地模式
- 伪分布模式
- 全分布模式
准备工作
在正式搭建之前,有两件事要做:
- 下载一个VMware12并安装
- 先下一个RetHat Linux的iso文件,可以前往RetHat官网下载
开始虚拟机的创建和安装:
虚拟机的创建
首先在左侧我的计算机列表处右击选择创建虚拟机,然后就是按照下面我截图的步骤来做就可以了。
虚拟机的安装
在安装完成之后点击Reboot重启。
输入账号、密码即可使用。
虚拟机的Hadoop环境配置
在Linux的root目录下新建tools、training、temp目录,tools专门防止安装包、training专门放置安装的软件包、temp是一些临时文件
在正式的配置Hadoop的环境之前,我们需要先做一些其它的配置如下:
关闭防火墙
(1)查看防火墙的状态:systemctl status firewalld.service
(2)关闭防火墙: systemctl stop firewalld.service
(3)禁用防火墙(永久):systemctl disable firewalld.service
设置主机名(配置文件,目录为:/etc/hosts)
通过vi编辑器来修改配置文件,打开文件命令为:vi /etc/hosts,将ip地址和主机名写入文件并保存,格式如下:
192.168.171.113 bigdata113
安装常用软件(这些包都是事先下好的,使用WinScp上传到Linux上的)
安装Java的JDK
tar -zxvf jdk-8u144-linux-x64.tar.gz -C ~/training/ 设置环境变量:vi ~/.bash_profile JAVA_HOME=/root/training/jdk1.8.0_144 export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH 生效环境变量: source ~/.bash_profile
安装tree命令,安装包是以.rpm结尾
//i表示install vh表示安装时显示进度 rpm -ivh tree-1.6.0-10.el7.x86_64.rpm tree -d -L 2:-d表示只显示目录;-L表示目录的层数
Hadoop的安装和配置
首先安装Hadoop
tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/
设置环境变量:vi ~/.bash_progile
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的话一共有3种模式,分别是本地模式、伪分布模式、全分布模式,下面我们会一个个来进行配置。
本地模式
本地模式的特点:一台Linux,没有HDFS,只能测试MapReduce程序(本地数据:Linux的文件)
配置:hadoop-env.sh (在/root/training/hadoop-2.7.3/etc/hadoop目录下)
26行 export JAVA_HOME=/root/training/jdk1.8.0_144
现在Hadoop的本地模式我们就应经配置好了,我们在根目录下的temp中新建一个data.txt文件,内容为:
I love Beijing I love China Beijing is the capital of China
然后使用Hadoop提供的example jar来测试计数程序,具体如下:
example: /root/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount ~/temp/data.txt ~/temp/mr/wc1
以下就是进行wordcount的结果:
伪分布模式
伪分布模式的特点:一台Linux,在单机上,模拟一个分布式的环境,具备Hadoop的所有功能。一般来说,数据块冗余度和数据结点的数量是一样的。最大不要超过3。
配置:
hdfs-site.xml
<!--数据块的冗余度,默认是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://bigdata113:9000</value>
</property>
<!--HDFS数据保存的目录,默认是Linux的tmp目录。Linux的tmp目录重新之后会清空-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
mapred-site.xml(注意:本身是没有这个文件的,只有一个 mapred-site.xml.template,我们主要复制一份即可)
<!--MR程序运行的容器是Yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
<!--Yarn的主节点ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata113</value>
</property>
<!--NodeManager运行MR任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
配置完之后, 对NameNode进行格式化: hdfs namenode -format,输出的日志包含以下成功标记即可:
Storage directory /root/training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.
现在就可以启动hadoop了,命令是:
启动:start-all.sh (等价于start-dfs.sh + start-yarn.sh)
下图是启动hadoop之前运行的进程情况:
以下是启动之后运行的进程情况:
可以看到NameNode、DataNode、SecondaryNameNode等都启动成功了。
注意:一旦配置了伪分布模式,进行分析的数据必须都是hdfs目录,我们需要创建hdfs目录,并把linux下的目录文件拷贝进去。
我们还是以data.txt为例,首先创建hdfs的文件目录input,并将linux目录下的data.txt拷贝一份到input下,命令如下:
- hdfs dfs -mkdir /input
- hdfs dfs -mkdir /output
- hdfs dfs -put ~/temp/data.txt /input
拷贝完成之后运行如下命令(必须在MapReduce目录下执行,否则报错):
- hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt ~/output/mr/wc1
执行成功之后查看结果:
- hdfs dfs -cat /output/0502/wc1/part-t-00000
发现和本地模式下的一样,这就对了。不过小伙伴在启动伪分布的时候是不是遇到过这个问题:
我们启动一次hadoop竟然要输入如此多次密码,很明显这是不科学的,那么要如何处理呢?答案是免密码登陆,免密码登陆的原理是非对称加密算法,具体的流程请看下图:
下面是配置的命令:
使用非对称加密算法生成密钥对:ssh-keygen -t rsa
把自己的公钥给其他的服务器(因为当前是伪分布,所以给自己即可):ssh-copy-id -i .ssh/id_rsa.pub root@bigdata113
现在我们重新使用start-all.sh命令启动Hadoop组件,流程如下:
很明显,不用去重复的输入密码了,省去了我们很多的时间。
全分布模式
全分布模式特点:正式的分布环境,用于生产。
其实全分布模式和伪分布模式的配置大部分都是相同的,只有少许差别,下面我们列出流程:
关闭防火墙
安装JDK
配置主机名 vi /etc/hosts(需要把三台主机都配置进去)
192.168.171.112 bigdata112
192.168.171.113 bigdata113
192.168.171.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程序时可能存在问题。
解决方法:使用putty中help选项下面的那个类似键盘s的图标,输入命令date -s 2018-04-15 +回车,然后下面选择要同步的服务器,最后点击send就可以了
在主节点bigdata112上配置(NameNode结点):
解压设置环境变量
解压:tar -zxvf hadoop-2.7.3.tar.gz -C ~/training/
设置环境变量:vi ~/.bash_progile
HADOOP_HOME=/root/training/hadoop-2.7.3 export HADOOP_HOME PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH export PATH
配置完成后,通过source ~/.bash_profile使其生效
修改配置文件
(1)配置:hadoop-env.sh
25行 export JAVA_HOME=/root/training/jdk1.8.0_144
(2) hdfs-site.xml(有几个从节点,冗余度配置为几)
<!--数据块的冗余度,默认是3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
(3) core-site.xml(注意/root/training/hadoop-2.7.3/tmp需要先创建再配置)
<!--NameNode的地址,9000是RPC的通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata112:9000</value>
</property>
<!--HDFS数据保存的目录,默认是Linux的tmp目录。Linux的tmp目录重新之后会清空-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>
(4)mapred-site.xml
<!--MR程序运行的容器是Yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(5)yarn-site.xml
<!--Yarn的主节点ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata112</value>
</property>
<!--NodeManager运行MR任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
(6)slaves配置从节点
vi slaves
bigdata113
bigdata114
(7)格式化NameNode
hdfs namenode -format
把主节点上配置好的Hadoop复制到从节点
scp -r hadoop-2.7.3/ root@bigdata113:/root/training(scp 是指网络拷贝;-r表示把指定目录下的文件及子目录都拷贝)
scp -r hadoop-2.7.3/ root@bigdata114:/root/training
在主节点上启动 start-all.sh
以上就是Hadoop环境搭建的全部内容,后面我们会从详细知识点去介绍,比如使用HDFS实现上传、下载,MapReduce的使用,HBase的使用等等,敬请期待!!