当前位置:   article > 正文

大数据入门级学习——Hadoop集群搭建总结(VM+centOS7)_hadoop集群搭建实验报告总结

hadoop集群搭建实验报告总结

步入大数据的第一步:

必须学会搭建大数据集群的框架

那么第一步必须要在linux系统上搭建Hadoop集群


目录

一、安装并配置虚拟机(centOS7)

二、克隆出三台虚拟机

三、安装及配置JDK

四、安装Hadoop

五、Hadoop的三种运行模式学习过程

1.本地运行模式

官方Grep案例过程记录

官方WordCount案例过程记录

2.伪分布式运行模式

启动HDFS并运行MapReduce程序

启动YARN并运行MapReduce程序

配置历史服务器 

配置日志的聚集 

3.完全分布式运行模式

SSH无密登录模式

群起集群


一、安装并配置虚拟机(centOS7)

先在VM中创建一台虚拟机(VM傻瓜式安装即可):

下面简单介绍一下安装centOS7的过程:

 安装centOS7的过程(安装桌面版):

 安装完成,下面开始配置:

注意:centOS6与centOS7的配置选项不同!(如果安装的是centOS6,最后的文件夹为.../ifcfg-ens0

 这是原文件的内容(暂不做修改,下文做修改):

修改过程如下:

查看VM的虚拟网络编辑器:

选择VMnet8查看其中的DHCP设置和NAT设置:

注意:这是起始和结束的IP地址,每台机器的IP地址不同,不能直接照搬!

网关查看方法如下:

现在可以按照上述查看出的配置信息修改文件中内容:

 配置结束,重启网络:

service network restart

尝试ping百度和本机电脑的IP地址,查看网络的连通性:

在本机查看IP地址并连接虚拟机:

均成功,说明文件修改成功,如果没有成功,请按照上述步骤重新配置。


二、克隆出三台虚拟机

关闭虚拟机,并克隆:

 省略剩余两台虚拟机的克隆过程...(取名Hadoop002和Hadoop003)

在虚拟机中更改名字:

vi /etc/hostname

然后重启生效:

reboot

更改所有虚拟机中的名字:

vim /etc/hosts

 注意:填写正确的IP地址和主机名(并且不能有空格)

在本机也相应修改IP地址和主机名:

同样配置如上图的IP地址和主机名。


三、安装及配置JDK

Linux下(centOS7中)安装以及配置JDK


四、安装Hadoop

本文先安装Hadoop2.7.2,下载链接:

https://archive.apache.org/dist/hadoop/common/hadoop-2.7.2/

将安装包hadoop-2.7.2.tar.gz导入至opt目录下的software中(可用XShell中的sftp或者FileZilla传输)

在software中解压文件到module文件夹中:

tar -zxvf hadoop-2.7.2.tar.gz -C /opt/module/

将Hadoop添加到环境变量中:

sudo vi /etc/profile

添加如下内容:

  1. ##HADOOP_HOME
  2. export HADOOP_HOME=/opt/module/hadoop-2.7.2
  3. export PATH=$PATH:$HADOOP_HOME/bin
  4. export PATH=$PATH:$HADOOP_HOME/sbin

让文件立即生效:

source /etc/profile

测试安装是否成功:

安装成功,如果没有跳转出来,可以尝试重启机器!


五、Hadoop的三种运行模式学习过程

  • 本地运行模式

  • 伪分布式运行模式

  • 完全分布式运行模式


1.本地运行模式

(总结)本地运行模式不需要启用单独进程,直接可以运行,适合测试和开发时使用。

有以下特征:

  1. Hadoop默认处于该模式下,并且使用于开发和测试;
  2. 不对配置文件进行修改;
  3. 使用本地文件系统而并非分布式文件系统;
  4. 不会启动NameNode、DataNode等进程,用于对MapReduce程序的逻辑进行测试。

官方Grep案例过程记录

进行字符匹配的练习:

  1. // 1.创建input文件夹
  2. mkdir input
  3. // 2.将etc/hadoop下的xml文件全部copyinput目录下
  4. cp etc/hadoop/*.xml input
  5. // 3.执行mapreduce程序
  6. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
  7. // 4.查看output文件夹下的所有内容
  8. cat output/*

执行完毕出现以下结果:

 说明执行成功!

可以查看结果:

cat part-r-00000

官方WordCount案例过程记录

进行文件中的重复字符的个数:

  1. // 1.创建一个文件夹
  2. mkdir wcinput
  3. // 2.创建一个文件
  4. cd wcinput
  5. touch wc.input
  6. // 3.编辑文件,在文件中添加重复的字符
  7. vim wc.input
  8. (内容如下)
  9. aaa aaa
  10. b b b
  11. cccc
  12. d d
  13. // 4.返回hadoop-2.7.2目录下,执行程序
  14. hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
  15. // 5.查看结果
  16. cat wcoutput/part-r-00000

查看结果如下:

两个案例均在本地执行完毕,本地模式所展示的内容到此结束,由于使用该模式较少,了解即可!


2.伪分布式运行模式

(总结)伪分布式模式在单节点上同时启动Namenode、Datanode、Jobtracker、Tasktracker、Secondarynamenode等5个进程,模拟分布式运行的各个节点。

有以下特征:

  1. 在一台服务器上模拟多台主机工作;
  2. Hadoop启动NameNode、DataNode、JobTracker、TaskTracker、Secondarynamenode的守护进程,并且独立;
  3. Hadoop使用分布式文件系统,每个作业也是由JobTraker服务,并且管理这些独立的进程;
  4. 在本地模式上增加了代码调试的功能,允许检查内存的使用情况,HDFS的输入输出,以及其他守护进程的交互,类似于完全分布式系统;
  5. 这种模式常用来开发测试Hadoop程序的执行是否正确;
  6. 需要格式文件系统。

搭建伪分布式运行模式,其实就是配置完全分布式模式的前奏,需要配置文件信息保证程序的正常运行。

启动HDFS并运行MapReduce程序

首先,配置hadoop-env.sh文件信息:

  1. // 1.获得JAVA_HOME的路径
  2. echo $JAVA_HOME
  3. // 2.在hadoop-env.sh文件中修改
  4. export JAVA_HOME=/opt/module/jdk1.8.0_144

 如图所示:

 接着,配置core-site.xml文件信息:

  1. <!-- 指定HDFS中NameNode的地址 -->
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://master:9000</value>
  5. </property>
  6. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  10. </property>

 接着,配置hdfs-site.xml文件信息:

  1. <!-- 指定HDFS副本的数量 -->
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>

 启动集群:

  1. // 1.格式化NameNode
  2. bin/hdfs namenode -format
  3. (注意!只需要第一次启动时格式化,频繁格式化会导致错误,博主有一篇博客的错误发生在这里)
  4. // 2.启动NameNode
  5. sbin/hadoop-daemon.sh start namenode
  6. // 3.启动DataNode
  7. sbin/hadoop-daemon.sh start datanode

 查看集群:

jps

 会出现Jps,NameNode,DataNode三个节点的信息。

web端查看HDFS文件系统:

http://master:50070/dfshealth.html#tab-overview

 查看产生的log日志文件信息:

  1. // 在hadoop-2.7.2的logs目录下
  2. ls

 操作集群:

  1. // 1.在HDFS文件系统上创建一个input文件夹
  2. bin/hdfs dfs -mkdir -p /user/master/input
  3. // 2.将测试文件内容上传到文件系统上
  4. bin/hdfs dfs -put wcinput/wc.input /user/master/input/
  5. // 3.查看上传的文件是否正确
  6. bin/hdfs dfs -ls /user/master/input/
  7. bin/hdfs dfs -cat /user/master/ input/wc.input
  8. // 4.运行MapReduce程序
  9. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/master/input/ /user/master/output
  10. // 5.查看输出结果
  11. bin/hdfs dfs -cat /user/master/output/*
  12. // 6.将测试文件内容下载到本地
  13. hdfs dfs -get /user/master/output/part-r-00000 ./wcoutput/
  14. // 7.删除输出结果
  15. hdfs dfs -rm -r /user/master/output

 浏览器中查看内容如下:

 

启动YARN并运行MapReduce程序

同理,首先要配置相关文件的信息:

首先,配置yarn-env.sh文件信息:

  1. // 将JAVA_HOME插入到文件中去
  2. export JAVA_HOME=/opt/module/jdk1.8.0_144

 接着,配置yarn-site.xml文件信息:

  1. <!-- Reducer获取数据的方式 -->
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <!-- 指定YARN的ResourceManager的地址 -->
  7. <property>
  8. <name>yarn.resourcemanager.hostname</name>
  9. <value>master</value>
  10. </property>

 接着,配置mapred-env.sh文件信息:

  1. // 将JAVA_HOME导入到文件中
  2. export JAVA_HOME=/opt/module/jdk1.8.0_144

 接着配置mapred-site.xml.template文件信息:

  1. // 1.将其重命名为mapred-site.xml
  2. mv mapred-site.xml.template mapred-site.xml
  3. // 2.修改文件信息
  4. <!-- 指定MR运行在YARN上 -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>

启动集群:

  1. // 1.刚刚已经启动了NameNode和DataNode,如果关闭则需要重新启动
  2. // 2.启动ResourceManager
  3. sbin/yarn-daemon.sh start resourcemanager
  4. // 3.启动NodeManager
  5. sbin/yarn-daemon.sh start nodemanager

YARN的浏览器页面查看地址:

http://master:8088/cluster

 

  1. // 1.删除文件系统上的output文件
  2. bin/hdfs dfs -rm -R /user/master/output
  3. // 2.执行MapReduce程序
  4. bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/master/input /user/master/output
  5. // 3.查看运行结果
  6. bin/hdfs dfs -cat /user/master/output/*

 页面显示结果如下:

 

配置历史服务器 

首先,配置mapred-site.xml文件信息:

  1. <!-- 历史服务器端地址 -->
  2. <property>
  3. <name>mapreduce.jobhistory.address</name>
  4. <value>master:10020</value>
  5. </property>
  6. <!-- 历史服务器web端地址 -->
  7. <property>
  8. <name>mapreduce.jobhistory.webapp.address</name>
  9. <value>master:19888</value>
  10. </property>

 启动历史服务器:

sbin/mr-jobhistory-daemon.sh start historyserver

 网页中查看JobHistoryServer:

http://master:19888/jobhistory

网页查看结果如下:

 

配置日志的聚集 

配置日志文件信息的聚集,首先必须需要重新启动NodeManager 、ResourceManager和HistoryManager节点,否则可能会报错。

配置日志文件信息聚集的好处:可以方便的查看到程序运行详情,方便开发调试。

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

开启日志聚集的步骤如下:

首先,配置yarn-site.xml文件信息:

  1. <!-- 日志聚集功能使能 -->
  2. <property>
  3. <name>yarn.log-aggregation-enable</name>
  4. <value>true</value>
  5. </property>
  6. <!-- 日志保留时间设置7天 -->
  7. <property>
  8. <name>yarn.log-aggregation.retain-seconds</name>
  9. <value>604800</value>
  10. </property>

 重新启动NodeManager 、ResourceManager和HistoryManager节点:

  1. sbin/yarn-daemon.sh stop resourcemanager
  2. sbin/yarn-daemon.sh stop nodemanager
  3. sbin/mr-jobhistory-daemon.sh stop historyserver
  4. sbin/yarn-daemon.sh start resourcemanager
  5. sbin/yarn-daemon.sh start nodemanager
  6. sbin/mr-jobhistory-daemon.sh start historyserver
  1. // 1.删除HDFS上已经存在的输出文件
  2. bin/hdfs dfs -rm -R /user/master/output
  3. // 2.执行WordCount程序
  4. hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/master/input /user/master/output

现在可以在刚刚的网址上,点击查看具体日志文件信息。

如下图所示:

整体伪分布式运行模式已经介绍完毕,详细的过程可以参考下面的完全分布式运行模式,毕竟完全分布式模式运用更多!


3.完全分布式运行模式

(总结)完全分布式运行模式真正用于实际生活应用中,用户进程运行在多主机搭建的集群上。

有以下特征:

  1. 在所有主机上安装JDK和Hadoop,并且互联互通;
  2. 能够免密SSH进行登录;
  3. 需要修改每台主机的文件系统,配置相关文件,每台主机各司其职,做好集群中的工作;
  4. 需要格式化文件系统。

完全分布式运行模式我们需要准备三台同样的虚拟机,在不同的虚拟机上进行不同的配置操作。

首先,进行同步操作,有几种不同的方法:

方法一:

使用scp安全拷贝,该方法能实现服务器与服务器之间的数据拷贝,例如:

  1. // 将hadoop001上的opt/module以及etc/profile上的文件进行拷贝到hadoop002
  2. scp -r /opt/module root@hadoop002:/opt/module
  3. sudo scp /etc/profile root@hadoop002:/etc/profile
  4. (同理,可以将hadoop001上的文件拷贝到hadoop002以及hadoop003上,不再赘述)

方法二:

使用rsync 远程同步工具,该方法不同于scp的地方在于速度快,以及高效,它仅复制文件中有差异的地方,相同的地方不再复制,会省去不少的时间。

选项参数说明:

选项功能
-r递归
-v显示复制过程
-l拷贝符号连接
  1. // 将hadoop001的opt/module复制到hadoop002的目录下
  2. rsync -rvl /opt/software/ root@hadoop002:/opt/software

方法三:

使用xsync集群分发脚本,使文件能够循坏地分发到所有主机的相同目录下。

首先,在根目录下创建文件夹并创建xsync文件,命令如下:

  1. mkdir bin
  2. cd bin/
  3. touch xsync
  4. vim xsync
  5. (编写代码如下:)
  6. #!/bin/bash
  7. #1 获取输入参数个数,如果没有参数,直接退出
  8. pcount=$#
  9. if((pcount==0)); then
  10. echo no args;
  11. exit;
  12. fi
  13. #2 获取文件名称
  14. p1=$1
  15. fname=`basename $p1`
  16. echo fname=$fname
  17. #3 获取上级目录到绝对路径
  18. pdir=`cd -P $(dirname $p1); pwd`
  19. echo pdir=$pdir
  20. #4 获取当前用户名称
  21. user=`whoami`
  22. #5 循环
  23. for((host=1; host<4; host++)); do
  24. echo ------------------- hadoop$host --------------
  25. rsync -rvl $pdir/$fname $user@hadoop00$host:$pdir
  26. done

  1. // 修改xysnc具有执行权限
  2. chmod 777 xsync
  3. // 脚本调用形式
  4. xsync 文件名称

集群部署规划:

 hadoop001hadoop002hadoop003
HDFS

NameNode

DataNode

 

DataNode

SecondaryNameNode

DataNode
YARN

 

NodeManager

ResourceManager

NodeManager

 

NodeManager

根据上述表格信息配置集群核心文件:

配置core-site.xml文件信息:

  1. <!-- 指定HDFS中NameNode的地址 -->
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://hadoop001:9000</value>
  5. </property>
  6. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>/opt/module/hadoop-2.7.2/data/tmp</value>
  10. </property>

HDFS配置文件:

  1. // 1.配置hadoop-env.sh文件(添加JAVA_HOME的依赖环境)
  2. export JAVA_HOME=/opt/module/jdk1.8.0_144
  3. // 2.配置配置hdfs-site.xml文件
  4. <property>
  5. <name>dfs.replication</name>
  6. <value>3</value>
  7. </property>
  8. <!-- 指定Hadoop辅助名称节点主机配置 -->
  9. <property>
  10. <name>dfs.namenode.secondary.http-address</name>
  11. <value>hadoop003:50090</value>
  12. </property>

YARN配置文件:

  1. // 1.配置yarn-env.sh文件(添加JAVA_HOME的依赖环境)
  2. export JAVA_HOME=/opt/module/jdk1.8.0_144
  3. // 2.配置yarn-site.xml文件
  4. <!-- Reducer获取数据的方式 -->
  5. <property>
  6. <name>yarn.nodemanager.aux-services</name>
  7. <value>mapreduce_shuffle</value>
  8. </property>
  9. <!-- 指定YARN的ResourceManager的地址 -->
  10. <property>
  11. <name>yarn.resourcemanager.hostname</name>
  12. <value>hadoop002</value>
  13. </property>

MapReduce配置文件:

  1. // 1.配置mapred-env.sh(添加JAVA_HOME依赖环境信息)
  2. export JAVA_HOME=/opt/module/jdk1.8.0_144
  3. // 2.配置mapred-site.xml(修改名称)
  4. cp mapred-site.xml.template mapred-site.xml
  5. 编辑内容:
  6. <!-- 指定MR运行在Yarn上 -->
  7. <property>
  8. <name>mapreduce.framework.name</name>
  9. <value>yarn</value>
  10. </property>

在集群上发布配置好的文件:

xsync /opt/module/hadoop-2.7.2/

集群的单点启动:

同伪分布式运行模式,区别就是在不同的主机上启动相应的节点信息,并查看是否启动成功。

 

SSH无密登录模式

利用SSH免密登录可以节约远程登录访问时要输入密码的麻烦,减少访问的时间,更加快捷高效地使集群工作。

基本思想为非对称加密,防止秘钥泄露,公钥加密,私钥解密,公钥公开而私钥不公开,但是一旦私钥泄露那么安全性就无从考证。

免密登录配置过程:

  1. // 在~/.ssh目录下生成公钥和私钥
  2. ssh-keygen -t rsa
  3. // 将公钥拷贝到需要登录的目标机器上(hadoop001上)
  4. ssh-copy-id hadoop001
  5. ssh-copy-id hadoop002
  6. ssh-copy-id hadoop003
  7. (同理在hadoop002以及hadoop003上配置)

.ssh文件夹下的文件功能解释

known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥

 

群起集群

配置slaves文件:

  1. // 路径:/opt/module/hadoop-2.7.2/etc/hadoop/slaves
  2. 文件中增加:
  3. hadoop001
  4. hadoop002
  5. hadoop003
  6. // 同步所有节点的文件信息
  7. xsync slaves

如果集群是第一次启动,需要格式化NameNode,同上不能多次格式化,容易出现不可解决的错误。

  1. // 启动HDFS/YARN
  2. sbin/start-dfs.sh
  3. sbin/start-yarn.sh

通过jps进行查询每个主机的节点时,发现每个主机都各司其职,启动节点各不相同。

web端查看SecondaryNameNode:

http://hadoop003:50090/status.html

上传、下载、删除等操作和伪分布式运行模式相近,这里不再举例。

集群整体的启动、停止:

  1. // 1.分别启动/停止HDFS组件
  2. hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
  3. // 2.启动/停止YARN
  4. yarn-daemon.sh start / stop resourcemanager / nodemanager
  5. // 3.整体启动/停止HDFS
  6. start-dfs.sh / stop-dfs.sh
  7. // 4.整体启动/停止YARN
  8. start-yarn.sh / stop-yarn.sh

集群时间同步:找一台服务器作为时间服务器,进行校准,所有的机器与这台集群时间进行定时的同步。

 

至此,所有三大模式一一介绍总结完毕!


 

       欢迎关注博主,欢迎互粉,一起学习!

       感谢您的阅读,不足之处欢迎指正!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/776670
推荐阅读
相关标签
  

闽ICP备14008679号