1.企业集群的规划方案:
a. 节点分开部署主从服务
b.集群部署的节点是奇数
c.针对提供线上服务的存储组件,一般采用主从备份原则
2.组件规划(考虑版本之间的兼容性和稳定性)
3.数据目录规划(软件安装目录、数据目录、日志目录等)
核心配置(安装软件必备的)、自定义配置(根据目前的场景进行设置)
4.常见场景:
a.高可用集群:针对我们目前的配置环境
b.HDFS数据迁移:hadoop1.x —> hadoop2.x 集群升级
使用命令:distcp
执行命令:hadoop distcp hdfs://master1:8080/source hdfs://master2:8080/target
c.HDFS小文件合并
命令:archive 归档
/bin/hadoop archive -archiveName a.har /source /target
vim批量注释:
CTRL+v 可视化块
上下键选中,shift+i 添加# 再按两次esc
5.mapreduce
map的输出就是reduce的输入
6.–通过文件名称模糊匹配到文件位置:
find 目录 -name “hadoop*”
–通过文件中字符串内容查找到对应的文件
find 目录 “*.sh” | xargs grep 文件中的字符串
– sh -x run.sh 调试脚本进行输出
浏览器 master:8088
需求二:只统计白名单中的数据
cat 文件.txt | python map.py mapper_func 白名单文件 | sort -k1 | python red.py reducer_func | head
需求三:统计用户的订单记录
需求四:实现join操作:
7.MapReduce 分而治之 (shuffle)
分解—map 数据切片操作 ->split ->map输出结果有一个环形内存缓冲区(该缓冲区默认为100M),当该缓存区达到80M,在本地创建一个溢写文件,将该缓存区的数据写入该文件->数据涉及(排序(快速排序)、合并)目的:1.尽量减少写入磁盘的数据量。2.减少传输到写一个阶段的数据量 ->reduce通过jobtracker维护的整个集群的宏观信息,找到对应的map输出位置即可。
合并–reduce reduce本身也有环形内存缓冲区,阈值是80% ,生成一个split文件 ->会有后台线程不断将小文件合并为一个有序的大文件(目的:节约后面执行的时间),合并和排序(归并排序)-> 将合并的数据交给reduce,作为reduce文件的输入,通过代码逻辑处理->最终结果生成hdfs。
shuffle阶段:map的输出到reduce的输入整个阶段。在shuffle阶段致命的问题:网络带宽!
8.block是hdfs的基本单位,block是无法被map直接读取,需要通过转换为record,通过record解决了“跨block问题”,record 可以理解为一个逻辑上的记录
一个文件
|block1|block2|
|record |