Hadoop实战一
来源:互联网 发布:苹果 联通4g劫持网络 编辑:程序博客网 时间:2024/04/30 17:33
1. 三副本放置
1) 第一个副本放在写入文件的DataNode上
2) 第二个副本放在不同机架上的任意DataNode
3) 第三个副本放在同一个NameNode管理的DataNode上(一个NameNode可管理4000个DataNode)
2. Block概述
1) 默认是64MB
2) 错误处理:
l 每当DataNode读取Block时,会进行CRC校验计算得到checksum
l 计算得到的checksum与读取前的checksum对比,若不同则向NameNode报告,NameNode会标记该Block已损坏,并有该Block的其他副本进行恢复以达到配置的副本数
3. 安全模式(适用于升级)
NameNode处于安全模式下客户端是只读的
4. 常用命令
bin/hadoop job –list //列出正在运行的作业
bin/hadoop job –kill job_id //删除作业
bin/hadoop fsck //查看HDFS状态,是否有损坏块
bin/hadoop fsck –delete //删除损坏块
bin/hadoop dfsadmin –report //返回当前HDFS状态
sbin/start-balancer.sh //启动平衡器
5. 如何使用MapReduce解决问题
1. 将问题转化成MapReduce模型
2. 设置相关参数
3. 写Map逻辑
4. 写Reduce逻辑
MapReduce执行流程:
1) JobClient对输入数据源分片
2) 通过JobTracker生成jobid
3) 检查输出目录不存在,输入目录存在
4) 拷贝任务资源到JobTracker(jar,集群配置文件,输入源切片信息)
5) JobTracker遍历每一个InputSplit(切片信息),根据其记录的引用地址选择距离最近的TackTracker去执行
6) 将任务jar从HDFS拷贝到本地并进行解压
7)创建子JVM执行具体任务
7.1)若为Map任务,则处理流程:
l 加载InputSplit记录的数据源切片,通过InputFormat的getRecordReader()方法
获取到Reader后,执行如下操作
l K key = reader.createKey();
l V value = reader.createValue();
l while (reader.next(key, value)) {//遍历split中的每一条记录,执行map功能函数
l mapper.map(key, value, output, reporter);
如果JobTracker出现故障,则系统瘫痪
如果TaskTracker出现故障,JobTracker将其拉入黑名单,并调度其他TaskTracker重新执行此任务,失败次数超过4次,则Job失败或者以Task的成功数比例决定Job是否通过
Job资源调度器
1) FIFO调度器
2) Fair Schedule(公平调度器),具有多个Pool,每个Job需要按照优先级放入Pool中,支持资源抢占
3) Capacity Schedule(容量调度器)
Configuration conf=new Configuration();//以上是其默认配置
Job job=new Job(conf,”wordcount”);
5. Combine和Partitioner
1) Combine作用
对于每个Map执行后的<key,value>集进行Combine操作,然后对多个Combine产生的<key,value>集进行Reduce操作得到最终结果
虽然可以减少网络流量但具有应用的局限性,可能导致错误的结果
job.setCombinerClass(reduce.class);//combine的作用实际上就是reduce
3) Partitioner(根据key分类进行reduce,解决Hadoop负载均衡和数据倾斜问题)
允许对Map之后的<key,value>数据集进行分类,分别放置于不同的文件中(文件的个数==Reduce个数)
6. 多文件输出格式
只需要继承MutipleOutputFormat
7. MapReduce单元测试
Mappermap=new Mapper();
Reducereduce=new Reduce();
MapReduceDriverdriver=new MapReduceDriver(map,reduce);
driver.withInput(“”,newText(str)).withOutput(new Text(“CDN”),new IntWritable(1));//输入为假设输入,输出为预计输出(需要考虑排序)
8. 源文件split
Split对源文件进行划分得到<key,value>,其中key表示起始偏移,value表示实际文本内容,一个split切片信息会作为一个map的一个输入
注意:
Split不会对小文件进行切分,所谓的小文件是指文件大小<Block大小的文件,此小文件会作为一个split作为一个map的输入,因此Hadoop对于小文件的处理效率不高
9. MapReduce的输入FileInputFormat
getRecordReader():根据给定的split得到record
getSplits():对输入文件进行划分得到splits
1) TextInputFormat每一行作为一个record,每一行的起始偏移量为key,每一行的内容为value,默认以\n或者回车键作为一个record
2) CombinerFileInputFormat:针对大量小文件设计
3) KeyValueFileInputFormat:针对key-value格式的文件设计,key value中间是tab分割
4) NLineInputFormat:可以控制每一个split的行数
5) SequenceFileInputFormat:文件格式是sequencefile(.seq)
自定义输入格式需要继承FileInputFormat并实现其两个接口函数
10. MapReduce的输出FileOutputFormat
1) TextOutputFormat输出的每一行key value中间用tab隔开
2) SequenceFileOutputFormat:keyvalue以.seq文件保存
3) SequenceFileAsOutputFormat:keyvalue以原始二进制格式输出
4) MapFileOutputFormat:keyvalue写入MapFile文件中,写入时保证记录按key值顺序
5) MultipleOutputFormat:一个reduce产生多个输出
11. MapReduce对输出进行压缩
常用的是压缩编码Gzip,LZO(适用于大文件压缩),Snappy
Hadoop自带小文件解决方案
1) HadoopArchive 能将小文件快速放入HDFS的文件归档工具中,能将多个小文件打包成一个HAR文件
2) Sequencefile 由一系列的二进制key/value组成的,key为小文件名,value为文件内容,将大批小文件合并成大文件
3) CombineFileInputFormat将多个小文件合并成单独的split,并会考虑数据的存储位置
小文件优化:
1) 开启JVM重用,可以提升45%的性能
2)
3) 开启并行拷贝,可以提升12%的性能
12. 排序中job.setComparatorClass()和job.setGroupingComparatorClass()区别
Job.setComparatorClass():对Map输出的所有键值对按照key值排序
Job.setGroupingComparatorClass():对Shuffle,Sort之后的键值对进行排序,允许一个reduce处理多个记录(即多个values)
13. PageRank算法思想
q为G的特征向量,q的值为每个网页的评分,MapReduce是PageRank实现的基础
14. Hadoop配置文件清单
1) core-site.xml
fs.default.name HDFS的NameNode的IP+Port
fs.defaultFS Hadoop默认的文件系统
hadoop.tmp.dir Hadoop默认的工作目录
hadoop.http.staticuser..user Hadoop默认的http用户
2) hdfs-site.xml
dfs.namenode.name.dir 配置NameNode的工作目录(保存镜像)
dfs.namenode.edits.dir 配置NameNode的工作目录(保存编辑日志)
dfs.datanode.data.dir 配置DataNode的工作目录(保存数据块和校验块)
dfs.namenode.checkpoint.dir 配置SecondaryNameNode的工作目录(保存镜像)
dfs.namenode.checkpoint.edits.dir 配置SecondaryNameNode的工作目录(保存编辑日志)
dfs.namenode.http-address 配置NameNode的HTTP访问地址
dfs.namenode.secondary.http-address 配置SecondaryNameNode的HTTP访问地址
dfs.data.dir DataNode的工作目录(保存数据块的位置)
dfs.name.dir NameNode的工作目录(fsimage和edit log)
3) mapred-site.xml
yarn.resourcemanager.hostname 配置ResourceManager的主机名
mapreduce.jobhistory.address 配置JobHistoryServer的IPC地址
mapreduce.jobhistory.webapp.address 配置JobHistoryServer的HTTP地址
如果是完全分布式模式,一般选择3个主机,一个Master主机(启动NameNode和JobTracker守护进程),两个Slave主机(启动DataNode和TaskTracker)
15. 通过WEB页面访问HDFS NameNode和MapReduce Job信息
1) http://localhost:50070/ 访问NameNode目录树
2) http://localhost:19888/ 访问结束的Job(必须先执行mr-jobhistory-daemon.shstart historyserver命令启动JobHistoryServer)
3) http://localhost:8088/ 访问正在运行的应用程序
- hadoop实战(一) hadoop基本概念
- Hadoop实战【一、HDFS】
- Hadoop实战一
- Hadoop 实战之运行AveragingWithCombiner(一)
- Hadoop 实战之Streaming(一)
- Hadoop 实战之Streaming(一)
- Hadoop 实战之运行MultiFile(一)
- hadoop实战基础篇(一)
- 虚拟机Hadoop实战(一)概念总览
- hadoop实战
- hadoop实战
- Hadoop实战
- hadoop基础----hadoop实战(一)-----hadoop环境安装---手动安装官方1.0版本
- Hadoop 实战之分析专利引用数据集(一)
- Hadoop 实战之分析专利引用数据集(一)
- HDInsight-Hadoop实战(一)网站日志分析
- Hadoop之——MapReduce实战(一)
- Hadoop实战:*********MapReduce的性能调优(一)*********
- Python的下划线
- 【OI之路】11更高级数论-3快速傅里叶变换
- EventBus3.0 List事件遇到的坑
- Centos7.3安装和配置Java JDK 1.8
- Android简单实现高德地图显示及定位
- Hadoop实战一
- 一致性哈希算法与Java实现
- Linux中的PCB——tast_struct
- js验证失败后阻止提交
- 关于opencv在代码正确的情况下,无法显示图像的问题。
- RecyclerView设置addItemDecoration在Fragment中不显示
- JavaScript之闭包
- andriod——Retrofit+Fresco+MVP接口拼接传值
- android制定统一的ProgressBar以及统一的提示页面