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集群理论

搭建我使用的版本是:Hadoop2.6.4

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

图片.png
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中,把当前新建好的虚拟机关闭掉,因为在开启状态是不能克隆的,然后右键虚拟机-->选择管理-->克隆-->完成克隆副本-->选择保存的位置。
我们要完成的集群是这样的架构。

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

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

    最后模式如下图:
    图片.png
  • 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命令。)

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

上图解释:hadoop在接受一个文件的时候,当文件超过128M的时候,会自动进行分块,正如上面的b1、b2这种,然后还会对文件进行备份处理,默认分成3份,正如上面的slave1、slave2、slave3机器都存放在b1这样的数据。上面的图其实画得不标准,应该是有master机器启动这namenode进程,还有slave1、slave2、slave3三台机器各启动这datanode进程,master机器管理着3台slave机器。体现出了hadoop是可以横向水平扩展的(比如不断得增加datanode存储数据),还有安全稳定性,这依靠着冗余存储,某台机器宕机了不影响对外提供服务(比如slave1宕机了,数据在slave2照样可以找到,另外namenode宕机了还有the second namenode这个节点来替代namenode)

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

背景:完成了上述的集群搭建,想要在master机器上想远程登录到slave1机器上,则输入命令ssh slave1,之后就需要输入密码,如下图。但这比较繁琐,所以我们可以配置下完成集群机器间的免密登录。

图片.png
关于免密登录的原理:就是生成私钥和公钥,这2个是成对存在的,当我们把登录的信息用私钥加密,然后把公钥传递给其他机器,这样远程登录到其他机器时会对登录信息用公钥进行解密,只有对应的公钥和私钥才能完成加解密,所以这样就不需要每次都密码验证了。

步骤:输入命令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命令。如下图结果:

图片.png
退出远程登录的命令是exit

背景:一个个地登录比较麻烦,我们可不可以直接在master机器上对集群的所有datanode节点进行统一的启动关闭管理?于是就有了下面的操作。配置统一集群节点管理

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

slave1
slave2
slave3
......

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

图片.png

五、期间排错

  • 1、输入命令hdfs dfsadmin -report | more来报告下集群机器的情况,如果出现下图错误1,则要检查下fs.default.name是否配置了。具体操作是先cd /usr/local/hadoop/etc/hadoop目录下,再vi core-site.xml修改配置,加上上面的第6点,之后:wq保存退出即可。
    错误1
  • 2、再次输入命令hdfs dfsadmin -report | more报告下,出现下图错误2,则要第一时间反应过来是不是服务器主机名没有和ip地址映射上,于是输入命令vi /etc/hosts修改配置,加上上面的第7点,之后:wq保存退出即可。
    错误2.png
  • 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>
错误3.png
  • 4、再次输入命令hdfs dfsadmin -report | more报告下,这次成功了,但是namenode没有管理到datanode节点,如下图:
    图片.png
    此时我们可以在网页端查看hadoop集群的情况,具体操作是输入netstat -ntlp命令,查看hadoop集群对外提供的端口号。一般是50070,之后就可以在浏览器地址栏中输入集群主机名+端口号进行访问了。比如http://10.14.28.100:50070,之后web界面是这样的。
    图片.png
    ,不过在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>
图片.png
  • 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
    错误4.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的...
    piziyang12138阅读 1,965评论 0 3
  • 学习hadoop平台搭建也有一段时间了,期间也遇到很多问题,为了解决这些问题查了很多资料,浪费不少时间,今天写下这...
    zxcasongs阅读 1,207评论 0 4
  • 一、系统参数配置优化 1、系统内核参数优化配置 修改文件/etc/sysctl.conf,添加如下配置,然后执行s...
    张伟科阅读 3,721评论 0 14
  • 一、什么是Hadoop?它包含哪些模块?① Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架...
    堂哥000阅读 1,009评论 0 7
  • 愿明天的自己不唾弃今天的你 5.13的阿仪
    顾苒七阅读 179评论 0 0