Hadoop学习

Hadoop是什么?
Hadoop是分布式系统基础架构
主要解决海量数据的存储与计算
单纯来讲Hadoop没多大作用,一般指的都是Hadoop生态圈

Hadoop组成
hdfs 存储
mapreduce 计算
yarn 资源调度
common 公共模块

hdfs架构概述
1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
2)DataNode(dn):在本地文件系统存储块数据
3)SecondaryNameNode(2nn):用来监控Hdfs状态的辅助后台程序,每隔一段时间获取hdfs元数据的快照

yarn架构概述
1)ResourceManager(rm):处理客户端请求,启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
2)NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
3)ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错;
4)Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。

MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总

大数据生态体系
1)Sqoop:是Hadoop与mysql之间传送数据的工具。也就是可以将mysql中的数据导入到hdfs中,也可以将hdfs中的数据导入到mysql中。
2)Flume:
3)Kafka:
4)Storm:
5)Spark:
6)Oozie:
7)Hbase:
8)Hive:
9)R语言:
10)Mahout:
11)Zookeeper:

Hadoop运行模式
本地模式(默认模式):不需要启用单独进程、直接可以运行,测试和开发时使用。
伪分布式模式:等同于完全分布式,只有一个节点。
完全分布式模式:多个节点一起运行。

熟悉四大配置文件:
core
hdfs
map
yarn

ssh无密码登录
ssh 另一台电脑的ip地址
不需要输入密码

集群时间同步
找一台机器,作为时间服务器,其他机器定时和时间服务器同步

配置集群常见错误
1)防火墙没关
2)主机名称配置错误
3)ip地址配置错误
4)ssh没配置好
5)root用户和atguigu用户启动集群不统一
6)配置文件修改不细心
7)没有编译源码
8)jps没生效
9)datanode连接不上namenode

HDFS架构
Hadoop学习
架构主要由四部分组成、分别为HDFS Client、NameNode、DataNode和SecondaryNameNode。
1)Client:客户端
(1)文件切分:文件上传hdfs的时候,Client将文件切分成一个一个的Block,然后进行存储。
(2)与NameNode交互,获取文件的位置信息
(3)与DataNode交互,读取或写入数据
(4)Client提供一些命令来管理HDFS,比如启动或者关闭HDFS
(5)Client可以通过一些命令来访问HDFS

2)NameNode:就是一个Master,它是一个主管、管理者
(1)管理hdfs的名称空间
(2)管理数据块的映射信息
(3)配置副本策略
(4)处理客户端读写请求
3)DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。
(1)存储实际的数据块
(2)执行数据块的读/写操作
4)SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换掉NameNode并提供服务。
(1)辅助NameNode,分担其工作量。
(2)定期合并fsimage和edits,并推送给NameNode。
(3)在紧急情况下,可辅助恢复NameNode

hdfs文件块大小
hdfs中文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本是64M

hdfs基本命令行操作
查看某一路径下的所有文件:hdfs dfs -ls [filePath]
上传文件:hdfs dfs -put [local filePath] [hdfs filePath]
下载文件:hdfs dfs -get [hdfs filePath] [local filePath]
删除文件:hdfs dfs -rm -r [hdfs filePath]
查看某一文件内容:hdfs dfs -cat [filePath]

hdfs命令行操作
hdfs客户端操作
通过api操作hdfs
通过io流操作hdfs

hdfs的数据流
hdfs写数据流程
1)客户端通过Distributed FileSystem模块向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
2)namenode返回是否可以上传

hdfs读数据流程