Created
July 8, 2014 07:37
-
-
Save chenzx/3ff5980821b08904dc1c to your computer and use it in GitHub Desktop.
Hadoop实战 读书笔记
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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