0
点赞
收藏
分享

微信扫一扫

Hadoop学习(一)入门与集群搭建

一、Hadoop是什么?

从狭义来说,Hadoop指的是Apache下的一款开源框架,目前常用的是Hadoop2版本。

Hadoop2主要包含以下3个组件:
与Hadoop1区别在于1版本把资源管理和海量数据计算的任务都丢给MapReduce,即Hadoop1只有一个HDFS和MapReduce组成。

  • HDFS:一个Hadoop的分布式文件系统,支持NameNode横向扩展,解决海量数据的存储。
  • YARN:一个负责作业调度和集群资源管理的框架,解决资源任务调度。
  • MapReduce:一个分布式运算编程框架,运行在YARN上,用来解决海量数据的计算。

从广义来说,Hadoop类似于Spring,已经形成了一个Hadoop生态圈,许多技术都和Hadoop进行集成使用起来。
总结:Hadoop的应用场景并不会跟某些行业或某些业务挂钩在一起,它只是一款海量数据分析处理的软件平台,提供HDFS、MapReduce、YARN这些模块来对外提供帮助。

二、Hadoop2集群理论

Hadoop集群一般指的是HDFS集群和YARN集群,两者在逻辑上分离,物理上在一起,如下图:

Hadoop部署主要有3种模式:前两种主要用于调试,属于单机部署,后面一种才是生产环境部署。

  • Standalone mode(独立模式):仅在一个机器运行一个java进程。
  • Pseudo-Distributed(伪分布式模式):仅在一个机器上HDFS的NameNode和DataNode、YARN的ResourceManager和NodeManager,但分别启动单独的java进程。
  • Cluster mode(群集模式):会使用N台主机组成一个Hadoop集群,这种部署方式下,主节点和从节点会公开部署在不同的机器上。

三、实际操作搭建hadoop集群

  • 1、在VMware14虚拟机中安装centos7操作系统,并命名为master,我全程按这个教程装的,很详细。
    附带安装教程:https://blog.csdn.net/babyxue/article/details/80970526
  • 2、安装好虚拟机系统之后,通过xshell这个软件来在windows系统上远程连接到虚拟机的linux系统进行操作更加方便,并且通过xftp这个软件来把jdk和hadoop上传到linux系统中,很实用这2款软件,服务器必备利器,学生可以通过邮箱注册进行免费下载。怎么上传jdk和hadoop到服务器上去我就不讲述了,自行百度,上传之后就是在服务器安装jdk和hadoop,这个也自行百度,网上一大把。
  • 3、注意:以下操作都是基于root用户来进行的,否则你可能会因为权限不够而无法修改配置文件。
    配置ip地址,敲命令vi /etc/sysconfig/network-scripts/ifcfg-ens33修改指定文件配置,复制下面的内容进去替换掉原来的内容,#后面是注释可以删掉
TYPE="Ethernet"   # 网络类型为以太网
BOOTPROTO="static"  # 手动分配ip
NAME="ens33"  # 网卡设备名,设备名一定要跟文件名一致
DEVICE="ens33"  # 网卡设备名,设备名一定要跟文件名一致
ONBOOT="yes"  # 该网卡是否随网络服务启动
IPADDR="10.14.28.100" # 该网卡ip地址就是你要配置的固定IP,如果你要用xshell等工具连接,220这个网段最好和你自己的电脑网段一致,否则有可能用xshell连接失败
GATEWAY="10.14.28.2"  # 网关
NETMASK="255.255.255.0"   # 子网掩码
DNS1="8.8.8.8"    # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址

接着配置网络工作,敲命令vi /etc/sysconfig/network进行配置

NETWORKING=yes # 网络是否工作,此处一定不能为no

配置公共DNS服务(可选),在/etc/resolv.conf文件里增加如下配置

nameserver 8.8.8.8

最后关闭防火墙和重启网络服务

systemctl stop firewalld         # 临时关闭防火墙
systemctl disable firewalld      # 禁止开机启动

service network restart      #重启网络服务

克隆步骤1新建的虚拟机master,以此克隆出3个新的虚拟机,并分别命名为slave1、slave2、slave3,克隆操作:在VMware中,把当前新建好的虚拟机关闭掉,因为在开启状态是不能克隆的,然后右键虚拟机-->选择管理-->克隆-->完成克隆副本-->选择保存的位置。
我们要完成的集群是这样的架构。

不过注意:克隆master的话,这个克隆出来的虚拟机和原虚拟机各个配置都是一样的,我们接下来要对网络、主机名等进行配置。
和上面一样的配置,只是修改了主机ip而已,不固定,在同一个网段就好(即网络号相同),然后重启网络服务,命令和上面一样就省略掉了。
然后,修改主机名,敲命令hostnamectl set-hostname slave1(你要的主机名字)
之后敲命令vi /etc/hosts修改hosts文件,将名字和IP建立联系,然后重启reboot命令。
最后这是关键,4台虚拟机都同样的操作都修改好后,互相ping一下看看通不通,比如在windows使用cmd命令行ping4台虚拟机试试,4台虚拟机互相ping下或者ping下windows。最后4台虚拟机就如下图配置好了。

  • 4、之后使用xshell这个软件远程连接4台虚拟机,步骤如下:

    最后模式如下图:

  • 5、上图的master相当于namenode,存储着文件名,记录文件存放的位置,其他3台slave相当于datanode,存储着真实的数据。外部访问都是通过namenode来间接访问datanode,namenode相当于管理者,datanode相当于数据提供者。
  • 6、cd进入到/usr/local/hadoop/etc/hadoop目录下,显示所有文件会看到有个core-site.xml文件,这个文件是告诉master在哪里,slave被谁管理。修改此文件,在里面的configuration标签里写下述内容,4台虚拟机都要写:
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
</property>
  • 7、经过上面的文件配置,就可以启动hadoop了,namenode与datanode默认是装在一起的,所以得分开输入命令分别启动。
    先格式化下namenode,敲命令hdfs namenode -format,然后4台虚拟机都配置下主机名与主机ip的关联,敲命令vi /etc/hosts编辑一个文件来配置主机。输入以下内容
10.14.28.100 master
10.14.28.101 slave1
10.14.28.102 slave2
10.14.28.103 slave3

然后就可以敲命令hadoop-daemon.sh start namenode单独启动namenode,再输入jps命令查看java进程,可看看namenode和datanode进程是否启动。和敲命令hadoop-daemon.sh start datanode单独启动datanode。如下图:(PS:如果想要启动所有节点的话,就可以cd /usr/local/hadoop/sbin目录下,使用start-all.sh命令启动全部,相反关闭全部的话就是stop-all.sh命令。)

最后这样就完成了基本的hadoop环境搭建了,此时通过hdfs协议进行关联,namenode是管理着其余的3个datanode的。

四、在集群实现ssh免密登录

步骤:输入命令ls -la可查看当前目录下的所有文件和文件夹,包括隐藏文件夹,于是我发现我master机器上没有.ssh文件夹,而slave1、slave2、slave3机器上都有.ssh文件夹,所以我怀疑我的master是没有通过RSA加密算生成了密钥,包括私钥和公钥。
输入ssh-keygen -t rsa这条命令后,连续按3次回车即可通过RSA加密算生成了密钥,包括私钥和公钥。接着输入ssh-copy-id slave1命令然后根据提示输入密码后就把公钥传给了slave1机器。对应还有输入ssh-copy-id slave2、ssh-copy-id slave3命令。如下图结果:

退出远程登录的命令是exit

这里的slave文件存储着namenode管理着多少台datanode,每台datanode位于哪台机器上。可以进行修改进行统一集群节点管理,这样就可以只在master机器上去启动所有节点。输入vi slave命令修改文件,管理着多少台slave机器就输入多少台

slave1
slave2
slave3
......

之后输入start-dfs.sh命令即可启动namenode和datanode节点。如下操作:

五、期间排错

  • 1、输入命令hdfs dfsadmin -report | more来报告下集群机器的情况,如果出现下图错误1,则要检查下fs.default.name是否配置了。具体操作是先cd /usr/local/hadoop/etc/hadoop目录下,再vi core-site.xml修改配置,加上上面的第6点,之后:wq保存退出即可。

  • 2、再次输入命令hdfs dfsadmin -report | more报告下,出现下图错误2,则要第一时间反应过来是不是服务器主机名没有和ip地址映射上,于是输入命令vi /etc/hosts修改配置,加上上面的第7点,之后:wq保存退出即可。

  • 3、再次输入命令hdfs dfsadmin -report | more报告下,出现下图错误3,这个问题我找了好久,最后在一篇博客中发现有大神评论说是本地用户administrator(本机windows用户)没有权限引起去远程操作hadoop系统,所以得在hadoop的hdfs-site.xml配置文件配置取消hadoop hdfs用户权限检查。先cd /usr/local/hadoop/etc/hadoop目录下,再vi hdfs-site.xml修改配置文件,在<configuration>标签组内加入下面代码
<property>
        <name>dfs.permissions</name>
        <value>false</value>
</property>

  • 4、再次输入命令hdfs dfsadmin -report | more报告下,这次成功了,但是namenode没有管理到datanode节点,如下图:

    此时我们可以在网页端查看hadoop集群的情况,具体操作是输入netstat -ntlp命令,查看hadoop集群对外提供的端口号。一般是50070,之后就可以在浏览器地址栏中输入集群主机名+端口号进行访问了。比如http://10.14.28.100:50070,之后web界面是这样的。

    ,不过在web界面我才清楚地发觉,好像我还遇到另外一个错误,就是我的namenode没有管理到datanode啊!!!在Overview菜单项中显示Live Nodes存活节点数为0。于是我很纳闷,我的namenode和datanode各自都启动成功了,namenode机器和datanode机器对应也都能ping通,最后百度发现一篇跟我遭遇情况一模一样的文章提到了解决方案(先cd /usr/local/hadoop/etc/hadoop目录下,再vi hdfs-site.xml修改配置文件,在<configuration>标签组内加入以下代码即可。不过切记,修改完配置文件,要关闭namenode和datanode节点服务,再重新开启才可以生效,我修改完没重启在这里栽了跟头还好所耗时间不长就被我意识到了),感谢~
<property>
        <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
        <value>false</value>
</property>

  • 5、同一集群节点管理遇错,拒绝连接,解决方案下面这篇文章可能有效。
    https://www.imooc.com/article/12083
  • 6、遇到下图错误4,就首先考虑下Namenode和Datanode的clusterID相同,这个clusterID在hadoop启动目录下的current文件夹的VERSION文件中,查看下是否和datanode机器上匹配,因为格式化一次namenode的话这个clusterID可能会变化。
    我的做法是:在namenode机器上进入到/var/hadoop/dfs/name/current/查看VERSION文件的clusterID,然后把这个clusterID负责到所有datanode机器上的/var/hadoop/dfs/data/current的VERSION文件中替换掉里面的clusterID,确保namenode机器和datanode机器的clusterID是一致的。
    参考文章:https://www.jianshu.com/p/079c341e424a?utm_campaign
    https://blog.csdn.net/u013310025/article/details/52796233

举报

相关推荐

0 条评论