课堂学习笔记
- 第七天课程:Apache Hadoop介绍&环境搭建
- Apache Hadoop介绍
- Apache Hadoop集群介绍
- Apache Hadoop集群搭建&集群规划
- Apache Hadoop集群搭建--服务器环境准备&jdk安装
- Apache Hadoop集群搭建--源码编译意义&安装目录讲解
- Apache Hadoop集群搭建--配置文件详解
- Apache Hadoop集群搭建--NameNode格式化操作
- Apache Hadoop集群搭建--脚本启动&单节点逐个启动
- Apache Hadoop集群搭建--集群启动&初体验
- 第八天课程:Apache Hadoop介绍&环境搭建
- 13--Hadoop HDFS--如何模拟实现分布文件系统
- 14--Hadoop HDFS--如何模拟实现分布文件系统小结
- 15--Hadoop HDFS--设计模板
- 16--Hadoop HDFS--重要特性
- 17--Hadoop HDFS--shell客户端操作
- 总结
第七天课程:Apache Hadoop介绍&环境搭建
Apache Hadoop介绍
- 核心组件:
HDFS:分布式文件系统,解决海量数据存储
YARN:作业调度和集群资源管理的框架,解决资源任务调度
MAPREDUCE:分布式运算编程框架,解决海量数据运算
Apache Hadoop集群介绍
- hadoop集群包括HDFS集群和YARN集群
- HDFS:主从集群 主:NameNode 从:DataNode 主的助手:SecondaryNameNode
- YARN:主从集群 主:ResourceManager 从:NodeManager
- Hadoop 部署方式分三种,
- Standalone mode(独立模式)。独立模式又称为单机模式,仅 1 个机器运行 1 个 java 进程,主要用于调试。
- Pseudo-Distributedmode(伪分布式模式)。伪分布模式也是在 1 个机器上运行 HDFS 的 NameNode 和 DataNode、YARN 的
ResourceManger 和 NodeManager,但分别启动单独的 java 进程,主要用于调试。 - Cluster mode(集群模式)。集群模式主要用于生产环境部署。会使用 N 台主机组成一个 Hadoop 集群。
这种部署模式下,主节点和从节点会分开部署在不同的机器上。 我们以 3 节点为例进行搭建,角色分配如下:
node-01:NameNode DataNode ResourceManager
node-02:DataNode NodeManager SecondaryNameNode
node-03:DataNode NodeManager
Apache Hadoop集群搭建&集群规划
- 使用相同资源的不要在一台机器上
- 职责之间有关系、有依赖的在一台机器上
- 考虑以后工作的方便性(尽量减少ssh)
- 开始规划:
三台机器
node 1: NameNode DataNode | ResourceManager NodeManager
node 2: DataNode SecondaryNameNode | NodeManager
node 3: DataNode | NodeManager - 规划跟实际效果之间,要想保证一致,需要配置文件的约束。
因此hadoop集群的搭建重点在于,规划好之后,配置文件的编写,体现出规划思想。
Apache Hadoop集群搭建–服务器环境准备&jdk安装
- 三台虚拟机时间同步:ntpdate cn.pool.ntp.org
- 配置IP、主机名映射
- 配置ssh免密登陆
#生成 ssh 免登陆密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成 id_rsa(私钥)、id_rsa.pub(公钥) 将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-02 - 配置防火墙
#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态 chkconfig iptables --list
#关闭防火墙开机启动 chkconfig iptables off - jdk环境安装
Apache Hadoop集群搭建–源码编译意义&安装目录讲解
- hadoop目录:
bin:基本脚本命令
sbin:集群管理启停命令
etc:配置文件
share:官方自带实例
Apache Hadoop集群搭建–配置文件详解
- hadoop配置文件三大类
a. hadoop环境配置文件:hadoop-env.sh b. 四个文件:
core-site.xml:指定默认文件系统,指定hdfs运行时数据放在哪
hdfs-site.xml:指定副本个数,默认是3,指定SecondaryNameNode在哪台机器
mapred-site.xml:指定mr程序运行的模式,yarn模式
yarn-site.xml:指定yarn leader在哪台机器上,指定mr附属服务
c. salves:配置两个集群小弟所在的ip,配合一键启动脚本使用的 - 配置环境变量
Apache Hadoop集群搭建–NameNode格式化操作
- 首次启动 HDFS 时,必须对其进行格式化(初始化)操作。 清理并创建hdfs运行时所需要的文件、目录。
- 注意事项:
格式化只能进行一次,在集群搭建完毕之后,第一次启动之前。否则,数据全部丢失、datanode识别不了namenode
格式化是初始化的操作,hadoop.tmp.dir指定的目录也在这时创建,另外创建一些文件,这些文件和hdfs运行元数据相关。
格式化的操作一般在namenode所在的机器上执行,其他机器不需要执行。
Apache Hadoop集群搭建–脚本启动&单节点逐个启动
- hadoop集群启动方式:
一键式脚本启动:start-dfs.sh start-yarn.shstop-dfs.sh stop-yarn.sh 单节点逐个启动:hadoop-daemon.shhadoop-daemon.sh start namenode(关闭当前机器的namenode,不关闭所有机器的namenode)hadoop-daemon.sh start datanodehadoop-daemon.sh start secondarynamenodeyarn-daemon.sh
Apache Hadoop集群搭建–集群启动&初体验
- NameNode http://nn_host:port/ 默认 50070. ResourceManager http://rm_host:port/ 默认 8088
比如 http://nn_host:port/ - HDFS 使用
hadoop fs -mkdir /666 创建 666文件夹
hadoop fs -put a.txt /666 将a.txt 上传到分布式文件系统中的666文件夹
hadoop fs -get /666/a.txt ./ 将分布式文件系统中的文件下载 到当前文件目录 - 运行 mapreduce 程序
在 Hadoop 安装包的 hadoop-2.7.4/share/hadoop/mapreduce 下有官方自带 的 mapreduce 程序。我们可以使用如下的命令进行运行测试。
示例程序 jar:
hadoop-mapreduce-examples-2.7.4.jar 计算圆周率:
hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 20 50 - 单词统计小程序:
需求:有几个文件,每个文件都有英文,统计每个单词出现的次数
vi 1.txt
vi 2.txt
hadoop fs -mkdir /input
hadoop fs -put 1.txt 2.txt /input
hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount /input /output
说明:新建input文件夹,上传记录单词的文件1.txt 2.txt到input,使用自带jar包里面的wordcount计算两个文件里面的单词次数。 - 待探索问题:
好像每次程序第一步都是找yarn的leader—ResourceManager,是在找资源?
mapreduce,好像先map再reduce - 解答
每次在执行mr的时候,都会去yarn申请资源
yarn作为一个资源管理器,负责每个maptask的容器申请。
先map后reduce
是mapreduce的一种思想,分而治之
即先分数据,再合并数据
在map的时候,就将数据进行大致的分类,已确保数据会去哪个reduce中去处理
在reduce的时候,会将各个map端产生的结果进行复制合并,再统一操作,最后将数据写入到hdfs中
在执行流程中都是先map后reduce,但如果需求比较简单,就会只有map,而没有reduce。
第八天课程:Apache Hadoop介绍&环境搭建
13–Hadoop HDFS–如何模拟实现分布文件系统
- HDFS: hadoop distributed file system
- 解决的问题:大数据存储
- 海量数据存储时,传统的存储模式遇到的问题:
1、来数据就存数据–>遇到存储瓶颈 内存不足,磁盘不足 -
纵向扩展,加内存加磁盘,但是有上限。
横向扩展,分布式存储
2、当数据被分布式存储时,随意摆放查找时困难
建立数据的索引–>元数据:记录数据所在的位置。
3、数据文件很大时,读取或上传 IO耗时长,浪费资源–>将文件切为block。
4、当文件被分块存储在不同的机器上时,万一某一个机器挂了怎么办?
为了保证安全,备份比较安全。当数据备份时,元数据也要记录。
14–Hadoop HDFS–如何模拟实现分布文件系统小结
- 备份数越多,越安全,冗余度(重复性)越高。
15–Hadoop HDFS–设计模板
- 故障的检测和自动快速恢复是 HDFS 的核心架构目标
- 以流式读取数据,相较于数据访问的反应时间,更 注重数据访问的高吞吐量
- HDFS 被调整成支持大文件。 它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中 还应该支持千万级别的文件。
- 大部分 HDFS 应用对文件要求的是 write-one-read-many 访问模型。一个文 件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据一致性 问题,使高吞吐量的数据访问成为可能。
- 移动计算的代价比移动数据的代价低,将计算的应用移动到数据越近越高效。
- 在异构的硬件和软件平台上的可移植性
16–Hadoop HDFS–重要特性
- 是一个文件系统,分布式的。
- master/slave 架构
HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个Namenode和一定数目的Datanode 组成。Namenode是HDFS 集群主节点,Datanode 是 HDFS 集群从节点。 - 分块存储
HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在hadoop2.x 版本中是block size = 128M。 - 名字空间 :Namenode 负责维护文件系统的名字空间
- NameNode元数据管理:目录结构及文件分块位置信息叫做元数据
- DataNode数据存储:文件的各个 block 的具体存储管理由 datanode节点承担。每一个block 都 可以在多个 datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block 信息。
存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。 - 副本机制:为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系 数都是可配置的。
- 一次写入,多次读出
HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
17–Hadoop HDFS–shell客户端操作
- hadoop fs
- 对于 HDFS,命令示例如下:
hadoop fs -ls hdfs://namenode:host/parent/child
hadoop fs -ls /parent/child
比如 hadoop fs -ls hdfs://node-1:9000/ 相当于 hadoop fs -ls /
- 配置文件里面:
1. fs.defaultFS
hdfs://node-1:9000
- 查看本地文件:ls / 相当于 hadoop fs -ls file:///
- 操作是哪一个文件系统,取决于路径的url
1. hdfs://node-1:9000开头的,操作hdfs
file:/// linux系统
- ** Shell 常用命令介绍**
-ls
使用方法:hadoop fs -ls [-h] [-R] 功能:显示文件、目录信息。
示例:hadoop fs -ls /user/hadoop/file1
h可以看文件的大小
R可以查看路径下子节点
-mkdir
使用方法:hadoop fs -mkdir [-p]
功能:在 hdfs 上创建目录,-p 表示会创建路径中的各级父目录。 示例:hadoop fs -mkdir –p /user/hadoop/dir1
-put
从本地上传到hdfs
使用方法:hadoop fs -put [-f] [-p] [ -| … ]. 功能:将单个 src 或多个 srcs 从本地文件系统复制到目标文件系统。
-p:保留访问和修改时间,所有权和权限。
-f:覆盖目的地(如果已经存在)
示例:hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
-get
使用方法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] -ignorecrc:跳过对下载文件的 CRC 检查。
-crc:为下载的文件写 CRC 校验和。
功能:将文件复制到本地文件系统。
示例:hadoop fs -get hdfs://host:port/user/hadoop/file localfile
-appendToFile
使用方法:hadoop fs -appendToFile … 功能:追加一个文件到已经存在的文件末尾
示例:hadoop fs -appendToFile localfile /hadoop/hadoopfile
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
-cat
使用方法:hadoop fs -cat [-ignoreCrc] URI [URI …] 功能:显示文件内容到 stdout
示例:hadoop fs -cat /hadoop/hadoopfile
-tail
使用方法:hadoop fs -tail [-f] URI 功能:将文件的最后一千字节内容显示到 stdout。 -f 选项将在文件增长时输出附加数据。 示例:hadoop fs -tail /hadoop/hadoopfile
-chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI …] 功能:更改文件组的关联。用户必须是文件的所有者,否则是超级用户。
-R 将使改变在目录结构下递归进行。
示例:hadoop fs -chgrp othergroup /hadoop/hadoopfile
-chmod
功能:改变文件的权限。使用-R 将使改变在目录结构下递归进行。 示例:hadoop fs -chmod 666 /hadoop/hadoopfile
-chown
功能:改变文件的拥有者。使用-R 将使改变在目录结构下递归进行。 示例:hadoop fs -chown someuser:somegrp /hadoop/hadoopfile
-copyFromLocal
使用方法:hadoop fs -copyFromLocal URI 功能:从本地文件系统中拷贝文件到 hdfs 路径去 示例:hadoop fs -copyFromLocal /root/1.txt /
-copyToLocal
功能:从 hdfs 拷贝到本地
示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
-cp
功能:从 hdfs 的一个路径拷贝 hdfs 的另一个路径
示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
mv
功能:在 hdfs 目录中移动文件
示例: hadoop fs -mv /aaa/jdk.tar.gz /
-getmerge
功能:合并下载多个文件
示例:比如 hdfs 的目录 /aaa/下有多个文件:log.1, log.2,log.3,… hadoop fs -getmerge /aaa/log.* ./log.sum
-rm
功能:删除指定的文件。只删除非空目录和文件。-r 递归删除。 示例:hadoop fs -rm -r /aaa/bbb/
-df
功能:统计文件系统的可用空间信息 示例:hadoop fs -df -h /
-du
功能:显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小。 示例:hadoop fs -du /user/hadoop/dir1
-setrep
功能:改变一个文件的副本系数。-R 选项用于递归改变目录下所有文件的副本 系数。
示例:hadoop fs -setrep -w 3 -R /user/hadoop/dir1
总结
- hadoop是大数据处理平台