Hadoop入门指南

  • 分布式文件系统——HDFS
    • 一、介绍
    • 二、HDFS设计原理
    • 三、HDFS 的特点
  • Hadoop单机版环境搭建
    • 一、配置免密登录
    • 二、Hadoop(HDFS)环境搭建
    • 三、Hadoop(YARN)环境搭建
  • Hadoop集群环境搭建
    • 一、集群规划
    • 二、配置免密登录
    • 三、集群搭建

分布式文件系统——HDFS

一、介绍

HDFS (Hadoop Distributed File System)是Hadoop下的分布式文件系统,具有高容错、高吞吐量等特性,可以部署在低成本的硬件上。

二、HDFS设计原理

2.1 HDFS 架构
HDFS 遵循主/从架构,由单个 NameNode(NN) 和多个 DateNode(DN) 组成:

  • NameNode:负责执行有关 文件系统命名空间的操作,例如打开、关闭、重命名文件和目录等。它同时还负责集群元数据的存储,记录着文件各个数据块的位置信息。
  • DateNode:负责提供来自文件系统客户端的读写请求,执行块的创建,删除等操作。

2.2 文件系统命名空间
HDFS文件系统命名空间的层次结构与大多数文件系统类似,支持目录和文件的创建、移动、删除和重命名等操作,支持配置用户和访问权限,但不支持硬链接和软连接。NameNode 负责维护文件系统名称空间,记录对名称空间或其属性的任何更改。

2.3 数据复制
由于 Hadoop 被设计运行在廉价的机器上,这意味着硬件是不可靠的。为了保证容错性,HDFS 提供了数据复制机制。HDFS 将每一个文件存储为一系列块,每个块由多个副本来保证容错,块的大小和复制因子可以自行配置(默认情况下,块大小是128M,默认复制因子是3)。

2.4 数据复制的实现原理
大型的HDFS 实例子在通常分布在多个机架的多台服务器上,不同机架的两台服务器之前通过交换机进行通信。在大多数情况下,同一机架中的服务器间的网络带宽大于不同机架中的服务器之间的带宽。因此HDFS采用机架感知副本放置策略,对于常见情况,当复制因子为3时,HDFS的放置策略是:
在写入程序为与 NameNode上时,就优先将写入文件的一个副本放置在该 DataNode上,否则放在随机DataNode上,之后在另一个远程机架上的任意一个节点上放置另一个副本,并在该机架上的另一个节点上放置最后一个副本。此策略可以减少机架间的写入流量,从而提高写入性能。

如果复制因子大于3,则随机确定第4个和之后副本的放置位置,同时保持每个机架的副本数量低于上限,上限值通常为(复制系数-1)/机架数量+2,需要注意的是不允许同一个DataNode上具有同一个块的多个副本。

2.5 副本的选择
为了最大限度地减少带宽消耗和读取延迟,HDFS 在执行读取请求时,优先读取距离读取器最近的副本。如果在与读取器节点相同的机架上存在副本,则优先选择该副本。如果HDFS 集群跨越多个数据中心,则优先选择本地数据中心上的副本。

2.6 架构的稳定性
1、心跳机制和重新复制
每个DataNode 定期向NameNode发送心跳消息,如果超过指定时间没有收到心跳消息,则将DataNode标记为死亡,NameNode不会将任何新的IO请求转发给标记为死亡的DataNode也不会再使用这些DataNode上的数据。由于数据不再可用,可能导致某些块的复制因子小于其指定值,NameNode会跟踪这些块,并在必要的时候进行重新复制。
2 、数据的完整性
由于存储设备故障等原因,存储在DataNode上的数据块也会发生损坏,为了避免读取到已经损坏的数据而导致错误,HDFS 提供了数据完整性校验机制来保证数据的完整性, 具体操作如下:
当客户端创建HDFS文件时,它会计算文件的每个块的校验和,并将校验和存储在同一HDFS命名空间下的单独的隐藏文件中。当客户端检索文件内容时,它会验证从每个DataNode接收的数据是否与存储在关联校验和文件中校验和匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其他DataNode获取该块的其他可用副本。
3、元数据的磁盘故障
FsImageEditLog 是HDFS的核心数据,这些数据的意外丢失可能会导致整个HDFS服务不可用。为了避免这个问题,可以配置NameNode使其支持FsImageEditLog多个副本同步,这样FsImageEditLog的任何改变都会引起每个副本FsImageEditLog的同步更新。
4、支持快照
快照支持子在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状态。

三、HDFS 的特点

3.1 高容错
由于HDFS采用数据的多副本方案,所以部分硬件的损坏不会导致全部数据的丢失。
3.2 高吞吐量
HDFS 设计的重点是支持高吞吐量的数据访问,而不是低延迟的数据访问。
3.3大文件支持
HDFS 适合于大文件的存储,文档的大小应该是以GB到TB级别的
3.4 简单一致性模型
HDFS 更适合于一次写入多次读取(write-once-read-many)的访问模型。支持将内容追加到文件末尾,但不支持数据的随机访问,不能充文件任意位置新增数据。
3.5 跨平台移植性
HDFS 具有良好的跨平台移植性,这使得其他大数据计算框架都将其作为数据持久化存储的首选方案。
附:图解HDFS存储原理

说明:以下图片引用自博客:翻译经典 HDFS 原理讲解漫画

1. HDFS写数据原理

2. HDFS读数据原理

3. HDFS故障类型和其检测方法

第二部分:读写故障的处理

第三部分:DataNode 故障处理

副本布局策略:

Hadoop单机版环境搭建

一、配置免密登录

Hadoop 组件之间需要基于SSH进行通讯。

1.1 配置映射
配置IP地址和主机映射:

vim /etc/hosts
# 文件末尾增加
192.168.20.227  hadoop001

1.2 生成公私钥

执行下面命令生成公钥和私钥:

ssh-keygen -t rsa

1.3 授权

进入 ~/.ssh 目录下,查看生成的公钥和私钥,并将公钥写入到授权文件:

[root@@hadoop001 sbin]#  cd ~/.ssh
[root@@hadoop001 .ssh]# ll
-rw-------. 1 root root 1675 3 月  15 09:48 id_rsa
-rw-r--r--. 1 root root  388 3 月  15 09:48 id_rsa.pub
# 写入公匙到授权文件
[root@hadoop001 .ssh]# cat id_rsa.pub >> authorized_keys
[root@hadoop001 .ssh]# chmod 600 authorized_keys

二、Hadoop(HDFS)环境搭建

2.1 下载并解压
下载 Hadoop 安装包,这里我下载的是 CDH 版本的,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/

# 解压
tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz

2.2 配置环境变量

# vi /etc/profile

配置环境变量:

export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export  PATH=${HADOOP_HOME}/bin:$PATH

执行 source 命令,使得配置的环境变量立即生效:

# source /etc/profile

2.3 修改Hadoop配置
进入 ${HADOOP_HOME}/etc/hadoop/ 目录下,修改以下配置:

  1. hadoop-env.sh
# JDK安装路径
export  JAVA_HOME=/usr/java/jdk1.8.0_201/
  1. core-site.xml
<configuration><property><!--指定 namenode 的 hdfs 协议文件系统的通信地址--><name>fs.defaultFS</name><value>hdfs://hadoop001:8020</value></property><property><!--指定 hadoop 存储临时文件的目录--><name>hadoop.tmp.dir</name><value>/home/hadoop/tmp</value></property>
</configuration>
  1. hdfs-site.xml
    指定副本系数和临时文件存储位置:
<configuration><property><!--由于我们这里搭建是单机版本,所以指定 dfs 的副本系数为 1--><name>dfs.replication</name><value>1</value></property>
</configuration>
  1. slaves
    配置所有从属节点的主机名或 IP 地址,由于是单机版本,所以指定本机即可:hadoop001

2.4 关闭防火墙

不关闭防火墙可能导致无法访问 Hadoop 的 Web UI 界面:

# 查看防火墙状态
sudo firewall-cmd --state
# 关闭防火墙:
sudo systemctl stop firewalld.service

2.5 初始化
第一次启动 Hadoop 时需要进行初始化,进入${HADOOP_HOME}/bin/ 目录下,执行以下命令:

[root@hadoop001 bin]# ./hdfs namenode -format

2.6 启动HDFS
进入 ${HADOOP_HOME}/sbin/ 目录下,启动 HDFS:

[root@hadoop001 sbin]# ./start-dfs.sh

2.7 验证是否启动成功
方式一:执行 jps 查看 NameNodeDataNode 服务是否已经启动:

[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
9137 DataNode
9026 NameNode
9390 SecondaryNameNode

方式二:查看 Web UI 界面,端口为 50070:

三、Hadoop(YARN)环境搭建

3.1 修改配置
进入 ${HADOOP_HOME}/etc/hadoop/ 目录下,修改以下配置:

  1. mapred-site.xml
# 如果没有mapred-site.xml,则拷贝一份样例文件后再修改
cp mapred-site.xml.template mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
  1. yarn-site.xml
<configuration><property><!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。--><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

3.2 启动服务
进入 ${HADOOP_HOME}/sbin/ 目录下,启动 YARN:

./start-yarn.sh

3.3 验证是否启动成功

方式一:执行 jps 命令查看 NodeManagerResourceManager 服务是否已经启动:

[root@hadoop001 hadoop-2.6.0-cdh5.15.2]# jps
9137 DataNode
9026 NameNode
12294 NodeManager
12185 ResourceManager
9390 SecondaryNameNode

方式二:查看 Web UI 界面,端口号为 8088:

Hadoop集群环境搭建

一、集群规划

这里搭建一个3节点的Hadoop 集群,其中三台主机均部署DataNodeNodeManger服务,但只有hadoop001上部署NameNodeResourceManager服务。

二、配置免密登录

2.1 生成秘钥
在每台主机上使用 ssh-keygen 命令生成公钥私钥对:

ssh-keygen -t rsa

2.2 免密登录
hadoop001 的公钥写到本机和远程机器的 ~/ .ssh/authorized_key 文件中:

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop001
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003

2.3 验证免密登录

ssh hadoop002
ssh hadoop003

三、集群搭建

3.1 下载并解压
下载 Hadoop。这里我下载的是 CDH 版本 Hadoop,下载地址为:http://archive.cloudera.com/cdh5/cdh/5/

# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz

3.2 配置环境变量
编辑 profile 文件:

# vim /etc/profile

增加如下配置:

export HADOOP_HOME=/usr/app/hadoop-2.6.0-cdh5.15.2
export  PATH=${HADOOP_HOME}/bin:$PATH

执行 source 命令,使得配置立即生效:

# source /etc/profile

3.3 修改配置
进入 ${HADOOP_HOME}/etc/hadoop 目录下,修改配置文件。各个配置文件内容如下:

  1. hadoop-env.sh
# 指定JDK的安装位置
export JAVA_HOME=/usr/java/jdk1.8.0_201/
  1. core-site.xml
<configuration><property><!--指定 namenode 的 hdfs 协议文件系统的通信地址--><name>fs.defaultFS</name><value>hdfs://hadoop001:8020</value></property><property><!--指定 hadoop 集群存储临时文件的目录--><name>hadoop.tmp.dir</name><value>/home/hadoop/tmp</value></property>
</configuration>
  1. hdfs-site.xml
<property><!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔--><name>dfs.namenode.name.dir</name><value>/home/hadoop/namenode/data</value>
</property>
<property><!--datanode 节点数据(即数据块)的存放位置--><name>dfs.datanode.data.dir</name><value>/home/hadoop/datanode/data</value>
</property>
  1. yarn-site.xml
<configuration><property><!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。--><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><!--resourcemanager 的主机名--><name>yarn.resourcemanager.hostname</name><value>hadoop001</value></property>
</configuration>
  1. mapred-site.xml
<configuration><property><!--指定 mapreduce 作业运行在 yarn 上--><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
  1. slaves
    配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 DataNode 服务和 NodeManager 服务都会被启动。
hadoop001
hadoop002
hadoop003

3.4 分发程序
将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。

# 将安装包分发到hadoop002
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop002:/usr/app/
# 将安装包分发到hadoop003
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop003:/usr/app/

3.5 初始化
在 Hadoop001 上执行 namenode 初始化命令:

hdfs namenode -format

3.6 启动集群
进入到 Hadoop001 的 ${HADOOP_HOME}/sbin 目录下,启动 Hadoop。此时 hadoop002hadoop003 上的相关服务也会被启动:

# 启动dfs服务
start-dfs.sh
# 启动yarn服务
start-yarn.sh

3.7 查看集群
在每台服务器上使用 jps 命令查看服务进程,或直接进入 Web-UI 界面进行查看,端口为 50070。可以看到此时有三个可用的 DataNode

点击 Live Nodes 进入,可以看到每个 DataNode 的详细情况:

接着可以查看 Yarn 的情况,端口号为 8088

转载摘自:大数据入门指南>Hadoop

Hadoop 入门指南相关推荐

  1. 《Hadoop权威指南》读书笔记——MapeReduce入门

    1 MR的原理 MapeReduce(简称MR)的是大数据计算引擎,相对于Linux awk等工具而已,最大的优势是可以分布式执行,充分利用计算机的多核性能. 一个MR作业(job)是客户端需要执行的 ...

  2. 150页书籍《PyTorch 深度学习快速入门指南》附PDF电子版

    为什么说是极简教程,首先本书只涵盖了150页.内容比较精简,特别适合作为 PyTorch 深度学习的入门书籍.为什么这么说呢?因为很多时候,一份厚重的书籍往往会削弱我们学习的积极性,在学习一门新的语言 ...

  3. Spark快速入门指南 – Spark安装与基础使用

    本文转载自Spark快速入门指南 – Spark安装与基础使用 Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象.Spark 正如其名,最大的特点就是快(Lightni ...

  4. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  5. Apache Kafka开发入门指南

    Apache Kafka开发入门指南 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Apache Kafka可以帮助你解决在发布/订阅架构中遇到消费数 ...

  6. 机器学习原来如此有趣!全世界最简单的机器学习入门指南

    机器学习原来如此有趣!全世界最简单的机器学习入门指南更多关于机器学习的实战案例 你是否曾经听到过人们谈论机器学习,而你却对其含义只有一个模糊的概念呢?你是否已经厌倦了在和同事对话时只能点头呢?现在,让 ...

  7. Apache+Hudi入门指南: Spark+Hudi+Hive+Presto

    一.整合 hive集成hudi方法:将hudi jar复制到hive lib下 cp ./packaging/hudi-hadoop-mr-bundle/target/hudi-hadoop-mr-b ...

  8. Apache Kylin新手入门指南

    Apache Kylin新手入门指南 文章目录 Apache Kylin新手入门指南 1 Apache Kylin是什么 2 为什么使用Apache Kylin 3 Apache Kylin的易用性如 ...

  9. Java知识图谱入门指南

    想写这篇文章很久了,主要原因有以下几方面,首先在工作中,经常接触到刚入职场的新人,刚毕业的大学生或者刚工作一两年的职场新人,容易出现难以胜任日常的开发任务情况,常常会走很多弯路,碰壁多次:其次,日常工 ...

最新文章

  1. CentOS 6.0配置pptp ××× Client和Squid透明网关
  2. 国内AI研究「顶不了天、落不了地」,到底什么是基础研究?
  3. 命令行启动tomcat
  4. LA3942字典树+递推
  5. 多元函数严格凹 海塞矩阵正定_海森矩阵的应用:多元函数极值的判定
  6. SetBkMode函数用法详解
  7. 一文详解数据分析的 TGI 指数 | 技术头条
  8. C#4.0新特性:可选参数,命名参数,Dynamic
  9. springcloud注册中心Eureka英 [juəˈri:kə]的基本搭建
  10. C# string 特殊的引用类型
  11. Python高性能计算库—Numba
  12. 《Sanmill 直棋游戏》创作之旅
  13. c语言编写转动惯量的数据处理函数,【物理实验】C语言处理刚体惯量数据,上物理实验的戳进.省90......
  14. printf输出格式总结
  15. ROS 教程1 机器人操作系统 基础知识 节点 话题 消息 服务 行动 参数 日志 TF变换 目标结构 启动文件
  16. 免费内网穿透软件一步设置实现外网访问
  17. 从毛衣到西装 - 硅谷CEO穿衣进化史
  18. arch安装包请求404错误的问题
  19. win10一直正在检查更新_win10补丁KB4587587推送 win10预览版20236.1005更新内容汇总_windows10_Windows系列_操作系统...
  20. 浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析

热门文章

  1. 定时器计数器中央双向对齐模式1/2/3
  2. 怎么在网页上嵌入新浪微博页面
  3. html开发核心display、overflow、position
  4. html网页之静态主页
  5. 2019 校招多益网络软件开发java 笔试题
  6. Android重复点击同一个导航栏失效的解决方案
  7. 网站是怎么了,一直http/1.1 302 found 浏览器假死了一样
  8. 怎么解决微信屏蔽内置浏览器下载功能
  9. 李岳恒:高可用的以太坊智能合约下的Token经济即将来临
  10. 动态内存申请(Linux)