Skip to content

Instantly share code, notes, and snippets.

@chenzx
Created July 8, 2014 07:37
Show Gist options
  • Save chenzx/3ff5980821b08904dc1c to your computer and use it in GitHub Desktop.
Save chenzx/3ff5980821b08904dc1c to your computer and use it in GitHub Desktop.
Hadoop实战 读书笔记
Hadoop实战
跳转至: 导航、 搜索
目录
1 比较SQL数据库和Hadoop
2 Hadoop的构造模块
3 HDFS
4 剖析MapReduce程序
5 读和写
6 适应API的变化
7 Streaming
8 高阶MapReduce
9 生产集群上的监视和调优
10 性能调优
11 管理Hadoop
12 在云(AWS/EC2)上运行Hadoop
13 Pig
14 Hive
15 其他
16 案例研究
比较SQL数据库和Hadoop
用Scale Out代替Scale Up
用Key/Value对代替关系表
用函数式编程(MapReduce)代替SQL
用离线批量处理代替在线处理
Hadoop的构造模块
NameNode CPU/IO密集,单点失效?
DataNode 不断更新通知NameNode
Secondary NameNode(SNN) NameNode的只读快照?
JobTracker 每个Hadoop集群一个(守护进程)
TaskTracer 管理各个任务在每个节点上的执行情况,可生成多个JVM
看起来挺复杂的,那么,如何自动配置大型集群呢???
HDFS
文件操作命令:hadoop fs -cmd <args>
PutMerge程序:Configuration -> FileSystem -> Path -> FSDataInput/OutputStream
剖析MapReduce程序
图3-1 节点之间的唯一通信是在“洗牌”阶段(mapper -> reducer)
数据类型
{Boolean, Byte, Double, Float, Int, Long, Null}Writable
Text:UTF8格式的文本
MapReduceBase
Mapper:map(K1, V1, OutputCollector<K2,V2>, Reporter)
Reducer:reduce(K2, Iterator<V2>, OutputCollector<K3,V3>, Reporter)
Partitioner:重定向Mapper输出
getPartition:返回0~reduce任务数之间的整数,对应键值对将要发送的reducer
Combiner:本地reduce
读和写
~InputFormat
Text
KeyValueText
SequenceFile
NLine
生成一个定制的InputFormat:InputSplit和RecordReader
~OutputFormat
Text(默认) 将每个结果记录写为一行文本
适应API的变化
0.18.3(本书撰写时)--> 0.19 --> 0.20 --...-> 1.0?
org.apache.hadoop.mapred --> org.apache.hadoop.mapreduce
reduce():Iterator --> Iterable
不再需要OutputCollector参数了
Streaming
p68 ... -mapper 'cut -f 2 -d ,' -reducer 'uniq'
Aggregate包
ValueHistogram:对于每个键,输出唯一值个数、最小、中值、最大、平均个数、标准方差
使用combiner提升性能
p82 未必会提高性能...
使用MapReduce范式思考
p83 Top-K问题(整体的Top-K等于部分的Top-K基础上的进一步Top-K。。。)
?FFT的MapReduce实现
交换律满足吗?
高阶MapReduce
顺序链接作业:非常简单
复杂依赖
指定作业x依赖于y:x.addDepending(y)
0.19 ChainMapper/Reducer
p89 同一JVM上不同线程之间传递,可byValue=false获得一定性能提升
联结
Reduce侧联结:repartitioned join/repartitioned sort-merge join
tags, group key, ...
datajoin软件包
基于DistributedCache的复制联结
... 将较小的数据源复制到所有的mapper,在map阶段执行联结
半联结:map侧过滤后在reduce侧联结
文件仍然太大无法放入内存怎么办?--> Bloom Filter(分布式数据库标准技术,用在Oracle 11g中)
创建一个Bloom Filter
p102 它是一个数据集的摘要...
add()和contains()
不会漏报:contains()返回false代表集合没有所查询的对象,否则有小概率的误报
生产集群上的监视和调优
Reporter.incrCounter()
JobConf.setMaxMap/ReduceAttempts()
SkipBadRecords
用IsolationRunner重新运行出错的任务
重试id:/local_dir/taskTracker/jobcache/job_id/attempt_id/work
性能调优
*通过combiner减少网络流量
使用压缩
0.19+ 重用JVM
幂等执行(猜测执行):同时启动多个并行任务,有一个先完成就结束其他的
算法改进
如计算方差:一遍扫描即可!
管理Hadoop
p154 SNN将在0.21中去除?
恢复失效的NameNode
?感知网络布局和机架的设计
0.21 可插拔的策略?
多用户作业调度
多个JobTracker
0.19+ 调度器上插件式架构
Facebook公平调度器:引入‘池’的概念
Yahoo容量调度器
在云(AWS/EC2)上运行Hadoop
Hadoop S3 Block FileSystem?
Pig
通过Grunt shell学习Pig Latin
读写操作:LOAD LIMIT DUMP STORE
诊断运算:DESCRIBE EXPLAIN ILLUSTRATE
Pig Latin中的关系运算符:略
UDF
脚本:注释/参数替换/多查询执行
Hive
其他
HBase
ZooKeeper
Cascading
Cloudera
Katta:比Nutch更轻量灵活?
CloudBase
Aster Data和Greenplum
Hama和Mahout
search-hadoop.com
案例研究
转换纽约时报1100万个图片
挖掘中国移动的数据
在StumbleUpon推荐最佳网站
IBM的ES2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment