大数据-hadoop
Hadoop
- hadoop
- HDFS
- YARN
- MapReduce
- HDFS
- NameNode
- DataNode
- SecondaryNameNode
- MapReduce
- 工作流程
- shell
- python API
- 环境搭建
- API
- 连接HDFS
- status
- list
- makedirs
- rename
- delete
- upload
- download
- read
- write
- 常见错误
- MapReduce
- 计算流程(以wordcount为例)
- YARN
- YARN与MR调度流程
hadoop
HDFS
- 分布式文件存储系统
- 延迟大,适合一次写入,多次读出的场景,不支持文件的修改
- block大小可以配置(dfs.blocksize),2.x版本默认128M,老版本默认64M
- 路径hdfs://namenode:port/a/b/c.txt
- NameNode是集群主节点,负责存储元数据,维护整个hdfs的目录树,以及block信息
- DataNode用于存储文件,可有多块备份
YARN
- Yet Another Resource Negotiator
- 集群资源的管理和调度
- 多框架资源统一调度
MapReduce
- 分布式计算框架
HDFS
NameNode
- 客户端请求的响应
- 元数据的管理(查询,修改)
DataNode
- 存储用户的文件对应的数据块(Block)
- 要定期向NameNode发送心跳信息,汇报本身及其所有的block信息,健康状况
- 每台DataNode上有一个socketServer
SecondaryNameNode
- 负责checkpoint(合并元数据镜像文件和日志文件)
MapReduce
工作流程
- 在指定DataNode节点上运行mapTask
- 之间的输入数据按条以k-v形式传入mapTask,调用mapper后输出k-v
- 输出的k-v加载到内存的环形缓冲区
- 环形缓冲区满后,溢出写到磁盘中的溢出文件,溢出文件数量不限
- 所有mapTask结束后,将结果全部存储为溢出文件
- 在指定的N个节点上运行reduceTask
- 指定reduce机器以key.hashcode%2为依据,从DataNode上拉取响应key的数据
- 拉取到的数据首先放到本地磁盘,并对数据按照key进行分组排序
- 按组传入reduceTask,调用reducer,输出k-v,写到文本文件,且一对k-v写成一行k-v之间用\t分割。
- 不同机器的reduceTask分别将结果存储为part-00000 part-00001…
shell
命令 | 格式 |
---|---|
ls | hadoop fs -ls 路径 |
mkdir | hadoop fs -mkdir /temp_dir & hadoop fs -mkdir -P /temp_a/temp_b |
put | hadoop fs -put /home/1.txt /temp |
get | hadoop fs -get /temp/1.txt /home |
getmerge | hadoop fs -getmerge /temp/log.* /home/data/log.all |
cp | hadoop fs -cp /temp_a/1.txt /temp_b |
mv | hadoop fs -mv /temp_a/1.txt /temp_b |
rm | hadoop fs -rm -r /temp_a |
rmdir | hadoop fs -rmdir /temp_b |
cat | hadoop fs -cat /temp/1.txt |
tail | hadoop fs -tail /temp/1.txt |
chmod | hadoop fs -chmod 777 /temp/1.txt |
chown | hadoop fs -chown user:group /temp/1.txt |
df | hadoop fs -df -h / |
du | hadoop fs -du /temp/1.txt |
setrep | hadoop fs -setrep 3 /temp/1.txt |
hdfs status | hdfs dfsadmin -report |
format | hadoop namenode -format |
python API
环境搭建
# 安装依赖库
yum install openssl
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel# 1. 安装python3
# 解压
tar -zxvf Python-3.6.0.tgz
# 进入目录
cd Python-3.6.0
# 编译安装
./configure --prefix=/usr/local/python3
make && make install
# 添加环境变量
# 检查安装是否成功# 2. 安装hdfs
pip3 install hdfs
API
连接HDFS
from hdfs.client import Client
client = Client("http://localhost:50070") # 50070: NameNode web管理端口# classhdfs.client.Client(url, root=None, proxy=None, timeout=None, session=None)
# url:ip:端口
# proxy:制定登陆的用户身份
# timeout:设置的超时时间
# seesion:请求的session实例,用于处理所有的请求
status
- 获取路径的具体信息
- status(hdfs_path, strict=True)
- hdfs_path:就是hdfs路径
- strict:设置为True时,如果hdfs_path路径不存在就会抛出异常,如果设置为False,如果路径为不存在,则返回None
list
- 获取指定路径的子目录信息
- list(hdfs_path, status=False)
- status:为True时,也返回子目录的状态信息,默认为Flase
makedirs
- client.makedirs("/test")
- makedirs(hdfs_path, permission=None)
- permission:设置权限
- client.makedirs("/test",permission=777)
rename
- 重命名
- rename(hdfs_path, local_path)
delete
- 删除
- delete(hdfs_path, recursive=False)
- recursive:删除文件和其子目录,设置为False如果不存在,则会抛出异常,默认为False
upload
- 上传数据
- client.upload("/test","/opt/bigdata/hadoop/NOTICE.txt")
- upload(hdfs_path, local_path, overwrite=False, n_threads=1, temp_dir=None, chunk_size=65536,progress=None, cleanup=True, **kwargs)
- overwrite:是否是覆盖性上传文件
- n_threads:启动的线程数目
- temp_dir:当overwrite=true时,远程文件一旦存在,则会在上传完之后进行交换
- chunk_size:文件上传的大小区间
- progress:回调函数来跟踪进度,为每一chunk_size字节。它将传递两个参数,文件上传的路径和传输的字节数。一旦完成,-1将作为第二个参数
- cleanup:如果在上传任何文件时发生错误,则删除该文件
download
- 下载
- download(hdfs_path, local_path, overwrite=False, n_threads=1, temp_dir=None, **kwargs)
read
- 读取文件
- with client.read("/test/a.txt") as reader:print reader.read()
- read(args, *kwds)
- hdfs_path:hdfs路径
- offset:设置开始的字节位置
- length:读取的长度(字节为单位)
- buffer_size:用于传输数据的字节的缓冲区的大小。默认值设置在HDFS配置。
- encoding:制定编码
- chunk_size:如果设置为正数,上下文管理器将返回一个发生器产生的每一chunk_size字节而不是一个类似文件的对象
- delimiter:如果设置,上下文管理器将返回一个发生器产生每次遇到分隔符。此参数要求指定的编码。
- progress:回调函数来跟踪进度,为每一chunk_size字节(不可用,如果块大小不是指定)。它将传递两个参数,文件上传的路径和传输的字节数。称为一次与- 1作为第二个参数。
write
- client.write(filepath, data=data_str, encoding=‘utf-8’)
常见错误
问题:操作文件错误
hdfs.util.HdfsError: Permission denied: user=dr.who, access=WRITE, inode="/test":root:supergroup:drwxr-xr-x解决:在配置文件hdfs-site.xml中加入
<property> <name>dfs.permissions</name> <value>false</value>
</property>
问题:hdfs.util.HdfsError: Cannot create directory xxx. Name node is in safe mode解决:关闭安全模式
hadoop dfsadmin -safemode leave
问题:服务自死解决:可能是主机名不正确
/etc/sysconfig/network
MapReduce
- 将MR程序发送到每台DataNode,进行局部并行计算
计算流程(以wordcount为例)
- 各DataNode分开map
- 各结点各自统计map结果,以(K,V)形式
- 以K.hashcode % reduce机器数,将map结果按key分发给不同reduce机器
- reduce机器汇总
YARN
YARN与MR调度流程
- 用户提交MR任务(hadoop jar WordCount.jar),调用main中的job.job.waitForCompletion(),从而调用底层job.submit(),这个过程中会完成切片规划,配置信息加载等,还会形成名叫YARNClientIMPL的RPC客户端,和YARN通信,其中ResourceManager的地址在配置文件中,mapreduce.framework.name,如果是local模式,则启动LocalJobRunner(本地mr程序模拟器),如果是提交到集群,则是yarn模型,则获取yarn.resourcemanager.hostname,如果没有配置,则有一个默认值,端口为8032
- RPC到ResourceManager请求运行程序
- RM返回job id(本地会有local前缀)和一个用于提交资源的路径RM返回jobid(本地会有local前缀)和一个用于提交资源的路径
- 将资源提交到指定路径(…/.staging/jobid/job.xml job.split job.jar)
- 资源提交完毕
- 初始化任务信息,加入调度队列
- NodeManager领取到任务
- NodeManager根据任务信息,根据提交的任务,创建容器container,包含程序运行的资源+RAM+Vcores
- 客户端发送一个shell命令到NM来在容器container中启动我们的MrAppMaster
- MrAppMaster向RM请求运算节点,在运算节点启动container
- MrAppMaster在运算节点中启动MapTask(进程名叫YarnChild)
- MrAppMaster在运算节点中启动ReduceTask
- 完成后MrAppMaster向RM请求注销自己
大数据-hadoop相关推荐
- 2021年大数据Hadoop(三十):Hadoop3.x的介绍
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop3.x的介绍 介绍 Hadoop 3.0新特性 ...
- 2021年大数据Hadoop(二十九):关于YARN常用参数设置
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...
- 2021年大数据Hadoop(二十七):YARN运行流程
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...
- 2021年大数据Hadoop(二十六):YARN三大组件介绍
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...
- 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...
- 2021年大数据Hadoop(二十二):MapReduce的自定义分组
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...
- 2021年大数据Hadoop(十五):Hadoop的联邦机制 Federation
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop的联邦机制 Federation 背景概述 F ...
- 2021年大数据Hadoop(十四):HDFS的高可用机制
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 HDFS的高可用机制 HDFS高可用介绍 组件介绍 Nam ...
- 2021年大数据Hadoop(一):Hadoop介绍
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 Hadoop介绍 Hadoo ...
- 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...
这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...
最新文章
- Python中的对象,类,super()函数
- 几款黄色LED的反相电流测量以及检测PCB制作要求
- 使用MQTT.fx(mqttfx软件)接入阿里云
- linux 脚本自动编制工具,全自动工具链编译脚本
- 四层负载均衡——LVS
- POJ-4004:数字组合(用位移方法解组合数问题,Java版)
- Freemarker基于模板字符串生成静态化html文件
- android随机崩溃莫名其妙,Android CrashHandler编写自己的异常捕获的方法
- js 中的属性以数字开头的属性和取值
- iphone7p配置参数详情_iPhone12系列最全的详细参数,参数党可以看看
- 产品设计:Material Design 学习笔记一
- ”latest”(已经确认了的), “earliest”(创世区块的) , “pending”(包含未确认的交易的余额)
- 斑马标签打印机蛋疼的打印错误处理方法
- 【徕卡全站仪Geocom开发】开发日志#01
- 管理 - STAR法则
- dede数据库的四张核心表
- Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
- python模块相互引用_python导入模块交叉引用的方法
- c#连接西门子plc
- 16MnDR是什么材料
热门文章
- libjpeg的编译和使用进行图片压缩
- 清单革命这本书说了什么?
- Android音频数据抓取(杂音pop音定位必备)
- 1月2日科技资讯|微信「扫码支付」被诉侵犯专利权;苹果回应“iOS 13 频繁提醒 App 定位”;Python 2 退休
- 深入dos编程_计算机编程能给孩子带来什么?
- Linux查看设备信息—lsscsi命令
- Delphi FMX下移动界面布局问题
- Python+Vue计算机毕业设计星空摄影网站4853e(源码+程序+LW+部署)
- linux打压缩包去掉某个文件夹,linux tar压缩排除某个文件夹的方法
- Java第五课:动物声音模拟器