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

工作流程

  1. 在指定DataNode节点上运行mapTask
  2. 之间的输入数据按条以k-v形式传入mapTask,调用mapper后输出k-v
  3. 输出的k-v加载到内存的环形缓冲区
  4. 环形缓冲区满后,溢出写到磁盘中的溢出文件,溢出文件数量不限
  5. 所有mapTask结束后,将结果全部存储为溢出文件
  6. 在指定的N个节点上运行reduceTask
  7. 指定reduce机器以key.hashcode%2为依据,从DataNode上拉取响应key的数据
  8. 拉取到的数据首先放到本地磁盘,并对数据按照key进行分组排序
  9. 按组传入reduceTask,调用reducer,输出k-v,写到文本文件,且一对k-v写成一行k-v之间用\t分割。
  10. 不同机器的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为例)

  1. 各DataNode分开map
  2. 各结点各自统计map结果,以(K,V)形式
  3. 以K.hashcode % reduce机器数,将map结果按key分发给不同reduce机器
  4. reduce机器汇总

YARN

YARN与MR调度流程

  1. 用户提交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
  2. RPC到ResourceManager请求运行程序
  3. RM返回job id(本地会有local前缀)和一个用于提交资源的路径RM返回jobid(本地会有local前缀)和一个用于提交资源的路径
  4. 将资源提交到指定路径(…/.staging/jobid/job.xml job.split job.jar)
  5. 资源提交完毕
  6. 初始化任务信息,加入调度队列
  7. NodeManager领取到任务
  8. NodeManager根据任务信息,根据提交的任务,创建容器container,包含程序运行的资源+RAM+Vcores
  9. 客户端发送一个shell命令到NM来在容器container中启动我们的MrAppMaster
  10. MrAppMaster向RM请求运算节点,在运算节点启动container
  11. MrAppMaster在运算节点中启动MapTask(进程名叫YarnChild)
  12. MrAppMaster在运算节点中启动ReduceTask
  13. 完成后MrAppMaster向RM请求注销自己

大数据-hadoop相关推荐

  1. 2021年大数据Hadoop(三十):Hadoop3.x的介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop3.x的介绍 介绍 Hadoop 3.0新特性 ...

  2. 2021年大数据Hadoop(二十九):​​​​​​​关于YARN常用参数设置

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 关于yarn常用参数设置 设置container分配最小内 ...

  3. 2021年大数据Hadoop(二十七):YARN运行流程

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn运行流程 本系列历史文章 2021年大数据Hado ...

  4. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  5. 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...

  6. 2021年大数据Hadoop(二十二):MapReduce的自定义分组

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 MapReduce的自定义分组 需求 分析 实现 第一步: ...

  7. 2021年大数据Hadoop(十五):Hadoop的联邦机制 Federation

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Hadoop的联邦机制 Federation 背景概述 F ...

  8. 2021年大数据Hadoop(十四):HDFS的高可用机制

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 HDFS的高可用机制 HDFS高可用介绍 组件介绍 Nam ...

  9. 2021年大数据Hadoop(一):​​​​​​​Hadoop介绍

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 Hadoop介绍 Hadoo ...

  10. 王家林 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程...

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

最新文章

  1. Python中的对象,类,super()函数
  2. 几款黄色LED的反相电流测量以及检测PCB制作要求
  3. 使用MQTT.fx(mqttfx软件)接入阿里云
  4. linux 脚本自动编制工具,全自动工具链编译脚本
  5. 四层负载均衡——LVS
  6. POJ-4004:数字组合(用位移方法解组合数问题,Java版)
  7. Freemarker基于模板字符串生成静态化html文件
  8. android随机崩溃莫名其妙,Android CrashHandler编写自己的异常捕获的方法
  9. js 中的属性以数字开头的属性和取值
  10. iphone7p配置参数详情_iPhone12系列最全的详细参数,参数党可以看看
  11. 产品设计:Material Design 学习笔记一
  12. ”latest”(已经确认了的), “earliest”(创世区块的) , “pending”(包含未确认的交易的余额)
  13. 斑马标签打印机蛋疼的打印错误处理方法
  14. 【徕卡全站仪Geocom开发】开发日志#01
  15. 管理 - STAR法则
  16. dede数据库的四张核心表
  17. Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
  18. python模块相互引用_python导入模块交叉引用的方法
  19. c#连接西门子plc
  20. 16MnDR是什么材料

热门文章

  1. libjpeg的编译和使用进行图片压缩
  2. 清单革命这本书说了什么?
  3. Android音频数据抓取(杂音pop音定位必备)
  4. 1月2日科技资讯|微信「扫码支付」被诉侵犯专利权;苹果回应“iOS 13 频繁提醒 App 定位”;Python 2 退休
  5. 深入dos编程_计算机编程能给孩子带来什么?
  6. Linux查看设备信息—lsscsi命令
  7. Delphi FMX下移动界面布局问题
  8. Python+Vue计算机毕业设计星空摄影网站4853e(源码+程序+LW+部署)
  9. linux打压缩包去掉某个文件夹,linux tar压缩排除某个文件夹的方法
  10. Java第五课:动物声音模拟器