(1) Hdfs客户端API的操作
① 上传、移动、复制、查看
② 下载
1) Hadoop_home: windows中的环境变量中
③ 读取Hdfs上的数据
1) Open()
2) Seek(起始位置)
(2) 迭代器和集合
(3) Lgfj + 自动收集和上传日志到hdfs中
① 得到日志
② 待上传文件夹
1) Accesss.log.*
③ Hdfs上传我们的日志文件
1) Fs.copyFromLocal()
④ 转到备份文件夹:自动清理非当天的数据
1) renameTo()
2) Date、SimpleDateFormat
手写WordCount
Mapper
1. 找见存放在HDFS上的数据
2. 参数:4
3. 按照偏移量读取内容
4. 开始读数据
5. 注意:如果起始偏移量不是从0开始,就抛弃一行数据
6. 按照word的hashcode取模,对每一个word进行分配
7. 代表真实处理的数据长度大于fileLen,相当于多读了一行
Reducer
1. 找见map阶段输出的数据
2. 不同的reduce处理不同的文件:
(1) 比如:reduce00 处理 map阶段输出的以0结尾的文件
3. 找一个中间map:word——count的map,存储计算的结果
(1) 相同的word,value + 1
4. 遍历map,然后输出结果文件到hdfs
(1) Word, count出现的总次数
创建数据
1. for i in {1..2000}; do cat world.txt >> wc.txt; done
打包运行
1.
2.
3.
4.
5.
6. 点击
(1) Build artificix
① 点击build
7.
真实在集群上运行
1.
(1) 错误的原因是因为:我们的jar运行所需要的hadoop环境jar包不完整
(2) 需要补全:
① 找见 /root/hadoop-2.8.3/share/hadoop 下的所有jar包
② 拼凑1步骤需要的环境jar包
1) find /root/hadoop-2.8.3/share/ -name "*.jar" | xargs | sed "s/ /:/g"
2) Hdpj=`find /root/hadoop-2.8.3/share/ -name "*.jar" | xargs | sed "s/ /:/g"`
③ java -cp 33thprj.jar:$hdpj com.scattle.study.day03.MyMapper /wordcount/input/wc.txt 0(起始偏移量) 134217728(剩余文件的长度) 0
④ java -cp 33thprj.jar:$hdpj com.scattle.study.day03.MyMapper /wordcount/input/wc.txt 134217728(起始偏移量) 106262606(剩余文件的长度) 1
⑤ 备注:
HDFS上传和读取详细流程
上传流程&读取流程
上传流程:请见:第三天:hdfs的详细上传流程图.png
读取流程:请见:第一天的数据读取流程图
Hdfs的Checkpoint机制
请见图:第三天;checkpoint机制的元数据处理的概念.png
MapReduce
1. 概念
(1) Map阶段
① 完成数据的加载,数据的清洗,数据的转换
② ETL:extract、 transformation、 load
(2) Reduce的阶段
① 分组
② 聚合、统计分析
(3) 实现有好多,MapReduce计算框架
2. 开发步骤
(1) 导包
①
(2) 把他们添加到
①
② Intellin 工具会自动更新,不需要干预
(3) 创建mr程序了
① map阶段
1)
② Reduce阶段
1)
(4) 创建job客户端操作
① 见code