参数设置的优先级:
1.默认配置文件
core-default.xml
hdfs-default.xml
mapred-default.xml
yarn-default.xml
2.生产配置文件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
3.代码里面设置的参数
Configuration
优先级排序:代码里面设置的参数 > 生产配置文件 > 默认配置文件
使用java api 操作 hdfs在 创建文件夹
/data/dt=20221114
/data/dt=20221115
/data/dt=20221116
2.使用java api 上传本地 wc.data 到上面三个目录下
3.使用java api 将
/data/dt=20221114/wc.data
/data/dt=20221115/wc.data
/data/dt=20221116/wc.data
目录下的文件移动到 指定目录 并进行改名字
/data/hive/20221114-01.data
/data/hive/20221115-01.data
/data/hive/20221116-01.data
path:
hdfspath 上传的path
localpath 本地path
filename 文件名字
renamepath 修改文件的路径的path
renamesufname 修改后文件的结尾
hadoop jar /home/hadoop/project/DL2262-hdfsapi-1.0.jar \
com.bigdata.HomeWork01 \
"/data/dt=" "file:home/hadoop" "1.log" "/data/flink" "-01.data" "20221117"
start.sh
if [ $# -lt 6 ];then
echo "Usage:put file to hdfs"
echo "Usage:$0 <hdfspath> <localpath> <filename> <renamepath> <suffname> <dt>"
echo "Usage:<hdfspath> is hdfs path"
echo "eg:$0 '/data/dt=' 'file:home/hadoop' '1.log' '/data/flink' '-01.data' '20221117'"
exit;
fi
hadoop jar /home/hadoop/project/DL2262-hdfsapi-1.0.jar \
com.bigdata.HomeWork01 \
"${1}" "${2}" "${3}" "${4}" "${5}" "${6}"
HDFS:负责存储数据
1.文件进行拆分 文件块
2.存储 拆分 文件块
补充:
hdfs主要存储文件 大文件 不是说 不能存储小文件
存储小文件 影响hdfs 性能
【block 块】(重要)
1.怎么来的
文件拆分来的 【按照 块大小 进行拆分】
2.属性:
1.块大小 128M blocksize
2.块的副本数:
本地文件大小:260M
块大小 :128m
块实际存储 规格(块大小) 128M
[hadoop@bigdata32 subdir0]$ pwd
/home/hadoop/data/hadoop/dfs/data/current/BP-155707757-192.168.41.32-1668441906801/current/finalized/subdir0/subdir0
hdfs 存储一堆文件 让你统计每个单词出现的次数?
1.input
hdfs 一些文件
fs.open
2.处理
词频统计
1.读取进来的内容 一行一行的 ,按照某个规则指定分隔符 进行拆分 =》一个一个单词
2.给每个单词 赋值为1
a,a,a,b,b =>(a,1)(a,1)(a,1)(b,1)(b,1)
3.将相同的单词 存起来 一个集合里面
进行聚合统计 每个单词出现的次数
<a,1,1,1><b,1,1>=><a,3><b,2>
3.output
1.打印到控制台
2.输出到hdfs上
【HDFS架构设计】(重要)
角色:
namenode 名称节点 nn
1.文件名称
2.文件的目录结构
3.文件的属性、权限、创建时间 副本数据=》 metadata 【元数据:描述数据的数据】
4. blockmap 块映射
是通过集群启动和运行时 dn定期发送 blockreprot 给nn 来进行动态的维护这种映射关系 mem
一个文件 被切分 多个数据块 副本数 =》数据节点
数据块对应分布在哪些节点上进行存储
作用:
管理文件系统的命名空间 其实就是维护文件系统树的文件和文件夹
是以两种文件 永久的保存在本地磁盘
镜像文件 fsimage
编辑日志文件 editlogs
edits_0000000000000000202-0000000000000000216
edits_inprogress_0000000000000000217
fsimage_0000000000000000201
secondery namenode 第二名称节点 snn:
1.fsimage+编辑日志文件 定期拿过来 进行合并 备份 推送给 老大
nn:
-rw-rw-r--. 1 hadoop hadoop 42 Nov 16 22:42 edits_0000000000000000200-0000000000000000201
-rw-rw-r--. 1 hadoop hadoop 1144 Nov 16 23:42 edits_0000000000000000202-0000000000000000216
-rw-rw-r--. 1 hadoop hadoop 1048576 Nov 16 23:42 edits_inprogress_0000000000000000217
-rw-rw-r--. 1 hadoop hadoop 2716 Nov 16 22:42 fsimage_0000000000000000201
fsimage_0000000000000000216
snn:
-rw-rw-r--. 1 hadoop hadoop 42 Nov 16 22:42 edits_0000000000000000200-0000000000000000201
-rw-rw-r--. 1 hadoop hadoop 1144 Nov 16 23:42 edits_0000000000000000202-0000000000000000216
-rw-rw-r--. 1 hadoop hadoop 2716 Nov 16 22:42 fsimage_0000000000000000201
fsimage_0000000000000000216
拉取过来+合并
edits_inprogress_0000000000000000217 +fsimage_0000000000000000216 =》fsimage_0000000000000000217
推送给
fsimage_0000000000000000217 nn
datanode 数据节点 dn存储数据块和数据块的校验
作用:
1.每个3s发送一次心跳 给nn 告诉你的 我还活着
dfs.heartbeat.interval 3s
2.每隔一定时间发送一次 blockreport
dfs.blockreport.intervalMsec 21600000ms 6h
dfs.datanode.directoryscan.interval 21600s 6h
目的: 生产上 可能会发生 文件块 丢失/损坏
hdfs架构设计: 面试会问【理解】
1.hdfs :
HDFS has a master/slave architecture.【主从架构】
master: a single NameNode
slave:DataNodes
补充:
生产上 两个NameNode =》 hdfs ha =》 high a
2. NameNode:
1.manages the file system namespace [管理 hdfs 文件系统的命名空间]
hdfs 文件的元数据:
1.文件的名称、权限、副本
2.文件路径、文件的块信息
2.regulates access to files by clients【对外提供服务】
3.the mapping of blocks to DataNodes【负责 映射块文件】
3.DataNode:
1.one per node in the cluster【每个节点有这个进程】
2.these blocks are stored in a set of DataNodes【负责存储数据块】
3.The DataNodes are responsible for serving read and write requests from the file system’s clients.【负责文件的读写】
a file is split into one or more blocks