第二课 Hadoop原理与集群搭建笔记

一、理论部分知识

1、HDFS :Hadoop DIstributed File System简写。

易于扩展的分布式文件系统

运行在大量普通廉价机器上(成本低) ,提供容错的机制(可靠性高)

2、HDFS优点:

高容错性

适合大数据批处理(移动计算不移动数据、数据位置暴露给计算框架、存储量大、百万规模以上的文件数量、10k节点规模)

流式文件访问(一次写入,多次读取,保证数据一致性)

构建成本低、安全可靠(构建在廉价机器上、通过多副本提高可靠性、提供容错和恢复机制)

3、HDFS缺点:

不适合低延迟数据访问(毫秒级不支持)

不适合大量小文件存储(占用NameNode大量内存空间:会导致Namenode不可用、磁盘寻道时间超过读取时间)

不适合并发写入(一个文件只能一个写入者:多线程同时写一个不行,只有一个能成功,其他都会报异常)

不提供文件随机修改(只支持追加)

4、HDFS设计需求

1)超大文件2)流式数据访问3)低成本4)数据一致性5)高吞吐率6)易扩展7)高容错

5、HDFS 架构图

hdfs架构图

若想有更高的容错,可以复制多个副本数。

6、HDFS核心概念:

Active NameNode

1)主Master(只有一个)

2)管理HDFS文件系统命名空间

3)管理副本策略(默认3个副本)

4)处理客户端读写请求

Standby NameNode: Active NameNode的热备节点

1)NameNode 元数据文件

    edits:编辑日志

    fsimage: 文件系统元数据检查点镜像文件,保存文件系统中所有目录和文件信息

2)NameNode 内存中保存一份最新的镜像信息

3)NameNode定期将edits+fsimage合并保存到磁盘

DataNode

1)slave工作节点,可以启动多个

2)存储数据库和数据校验和

3)执行客户端读写请求操作

4)通过心跳机制定期向NameNode 汇报运行状态和块列表信息

5)集群启动时向NameNode 提供存储的块列表信息

Block数据块

1)文件写入到HDFS会被切分成若干个Block块

2)数据块大小固定,默认大小128MB,可自定义修改

3)HDFS最小存储单元

4)若一个块的大小小于设置的数据块大小,则不会占用整个块的空间

5)默认情况下每个Block有三个副本

Client

1)文件切分

2)与NameNode交互获取元数据信息

3)与DataNode,读取/写入数据

4)管理HDFS

7、HDFS为什么不适合存储小文件?

元数据信息存储在NameNode内存中,内存大小有限

NameNode存储BLock数据有限

一个Block元数据消耗大约150byte内存

如果存储一亿个block,大约需要20G内存

如果一个文件为10K,则1亿个文件大小只有1TB,却消耗了20G内存

8、HDFS高可用原理


高可用原理

JournalNode一般部署奇数个,3台最多允许1台挂掉,否则集群不可用

对于ActiveNode,写请求时阻塞,元数据同时写入edit ,还同时写入所有的JournalNode ,都写入完成后,会在内存中写一个文件,更新内存中的目录数。元数据信息会定期的更新到fsimage ,fsimage相当于一个镜像文件

对于Standby Node,定期从JournalNode中同步元数据信息到内存中,然后定期的更新到fsimage。

9、YARN核心组件

ResourceManage:整个集群只有一个Master

NodeManage :每个节点只有一个,集群上会有多个,一般与DataNode一一对应,在相同的集群上部署。

ApplicationManage:每个应用程序只有一个,负责应用程序的管理,资源申请和任务调度。

Container:任务运行环境的抽象,只有在分配任务的时候才会抽象出一个Container。

二、Hadoop分布式安装

1、使用hadoop用户解压并安装到apps路径下

1.1使用hadoop用户进入到在/home/hadoop/apps目录下

      cd /home/hadoop/apps

注意:如果没有/home/hadoop/apps路径,自行在/home/hadoop路径下创建apps文件夹:

      mkdir /home/Hadoop/apps

1.2使用rz将本机的hadoop安装包上传到/home/hadoop/apps目录下

1.3解压安装文件

tar -zxvf hadoop-2.7.4.tar.gz

1.4使用root用户创建软链接

ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop

1.5使用root用户修改软链接属主

chown -R hadoop:hadoop /usr/local/hadoop

1.6使用root用户将hadoop相关内容添加到环境变量中

注意:Hadoop配置文件路径是/usr/local/hadoop/etc/hadoop

vim /etc/profile

添加内容如下:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_HOME=$HADOOP_HOME

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

1.7使用root用户重新编译环境变量使配置生效

source /etc/profile

2. 配置HDFS

2.1使用hadoop用户进入到Hadoop配置文件路径

cd /usr/local/hadoop/etc/hadoop

2.2修改hadoo-env.sh

修改JDK路径export JAVA_HOME=/usr/local/jdk

2.3 配置core-site.xml

2.4 配置hdfs-site.xml

3. 配置YARN

3.1 修改yarn-site.xml

3.2 修改mapred-site.xml

3.3 在/usr/local/hadoop路径下创建hdpdata文件夹

cd /usr/local/hadoop

mkdir hdpdata

4. 修改slaves文件,设置datanode和nodemanager启动节点主机名称

在slaves文件中添加节点的主机名称

node03

node04

node05

注意:node03,node04,node05是我的虚拟机主机名称,在这三台机器上启动datanode和nodemanager,同学根据自己集群主机名称情况自行修改。

5. 配置hadoop用户免密码登陆

配置node01到node01、node02、node03、node04、node05的免密码登陆

在node01上生产一对钥匙

ssh-keygen -t rsa

将公钥拷贝到其他节点,包括自己本机

ssh-copy-id -i node01

ssh-copy-id -i node02

ssh-copy-id -i node03

ssh-copy-id -i node04

ssh-copy-id -i node05

注意:两个namenode之间要配置ssh免密码登陆

6. 将配置好的hadoop拷贝到其他节点

scp -r hadoop-2.7.4 hadoop@node02:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node03:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node04:/home/hadoop/apps

scp -r hadoop-2.7.4 hadoop@node05:/home/hadoop/apps

在每个节点分别执行如下四步操作

第一步:使用root用户创建软链接

ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop

第二步:使用root用户修改软链接属主

chown -R hadoop:hadoop /usr/local/hadoop

第三步:使用root用户添加环境变量

vim /etc/profile

添加内容:

export HADOOP_HOME=/usr/local/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_HOME=$HADOOP_HOME

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

第四步:使用root用户重新编译环境变量使配置生效

source /etc/profile


集群启动步骤(注意使用hadoop用户启动,严格按照顺序启动)

su hadoop

1. 启动journalnode(分别在node03、node04、node05上执行启动)

/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

运行jps命令检验,node03、node04、node05上多了JournalNode进程

2. 格式化HDFS

在node01上执行命令:

hdfs namenode -format

格式化成功之后会在core-site.xml中的hadoop.tmp.dir指定的路径下生成dfs文件夹,将该文件夹拷贝到node02的相同路径下

scp -r hdpdata hadoop@node02:/usr/local/hadoop

3. 在node01上执行格式化ZKFC操作

hdfs zkfc -formatZK

执行成功,日志输出如下信息

INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK

4. 在node01上启动HDFS

sbin/start-dfs.sh

5. 在node02上启动YARN

sbin/start-yarn.sh

在node01单独启动一个ResourceManger作为备份节点

sbin/yarn-daemon.sh start resourcemanager

6. 在node02上启动JobHistoryServer

sbin/mr-jobhistory-daemon.sh start historyserver

启动完成node02会增加一个JobHistoryServer进程

7. hadoop安装启动完成

HDFS HTTP访问地址

NameNode (active):http://192.168.183.100:50070

NameNode (standby):http://192.168.183.101:50070

ResourceManager HTTP访问地址

ResourceManager :http://192.168.183.101:8088

历史日志HTTP访问地址

JobHistoryServer:http://192.168.183.101:19888

三、hadoop集群验证

1. 验证HDFS 是否正常工作及HA高可用

首先向hdfs上传一个文件

hadoop fs -put /usr/local/hadoop/README.txt /

在active节点手动关闭active的namenode

sbin/hadoop-daemon.sh stop namenode

通过HTTP 50070端口查看standby namenode的状态是否转换为active

手动启动上一步关闭的namenode

sbin/hadoop-daemon.sh start namenode

2.验证YARN是否正常工作及ResourceManager HA高可用

运行测试hadoop提供的demo中的WordCount程序:

hadoop fs -mkdir /wordcount

hadoop fs -mkdir /wordcount/input

hadoop fs -mv /README.txt /wordcount/input

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input  /wordcount/output

验证ResourceManager HA

手动关闭node02的ResourceManager

sbin/yarn-daemon.sh stop resourcemanager

通过HTTP 8088端口访问node01的ResourceManager查看状态

手动启动node02 的ResourceManager

sbin/yarn-daemon.sh start resourcemanager

四、Hadoop集群搭建常见问题记录

问题1 : 启动hadoop集群后访问node02的resouremanage 无激活的Nodes 如下图所示?



解决方法,是虚拟机内存不够,需要修改yarn-site.xml配置文件

修改yarn-site.xml配置文件添加如下内容:


把这两项配置添加到yarn-site.xml里,所有机器都要改,保持配置文件一直然后关闭yarn  :sbin/stop-yarn.sh

关闭之后启动:  sbin/start-yarn.sh

课上老师答疑记录

问题1:假如说datanode挂了 硬件没有问题的情况下能恢复么?

答:可以恢复,DataNode挂了,会通过NameNode副本恢复,然后DataNode重启后,数据块就删除了。

问题2:JN里面写的是操作日志还是数据文件?

答:JN里面写的是操作日志

问题3:zookeeper、yarn、hdfs、hadoop 关系?

答:hadoop包括hdfs、yarn; zookeeper是充当nadenode ,resoursemanage选主过程,老师绘制草图如下:


当nn1挂掉,临时节点就会被删除,nn2变为active、

同理rm1挂掉,临时节点被删除,rm2再去请求,变为active

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容