1. hadoop作为一个数据处理框架,由于大数据量的传输很耗时,hadoop采用的机制为将代码发送到集群环境中去,因为集群中有数据和计算(运行)环境,即代码向集群迁移
2. SQL处理结构化数据,hadoop针对文本这类非结构化数据;
SQL数据库向上扩展(增加单台机性能)时成本高,hadoop向外扩展(增加多台一般商用机)
hadoop用键/值对(MapReduce实现)代替SQL数据库中的关系表,将非结构化数据转换成键/值对
SQL使用查询语句,hadoop使用脚本编程
hadoop用离线批量处理大规模数据代替在线事务处理
3. 管道有助于进程原语重用,消息有助于进程原语同步队列
MapReduce中,数据处理的进程原语称为mapper和reducer
4. 编写一个垃圾邮件过滤器,获取垃圾邮件中经常使用到的词
数据存储在单台机上,处理时提取数据受制于这太机器的传输带宽
集群中每台机器单词计数处理(map)完时将结果传输给单台机时同样受限,需要将map过程的结果分区,使得可以增加机器,每个机器处理一个分区(reduce)
5. MapReduce程序执行需要mapping和reduceing两个阶段,每个阶段定义一个数据处理函数,对应为mapper和reducer
mapping阶段:MapReduce获取输入数据,将数据单元装入mapper
reduceing阶段:reducer处理来自mapper的输出,给出最终结果
6. mapping、reducing、partitioning、shuffling
输入:组织为键值对列表(k,v)list
多个文件时:list(<String filename,String file_content>)
日志文件时:list(<Integer line_number,String log_event>)
一般不同键值对中的键为同一类型,值也是同一类型
拆分键值对列表list,处理每个键值对列表list
单词统计,<String filename,String file_content>被输入mapper,输出<String word,Integer count>
mapper的输出聚合,比如一个map输出列表中出现三次<"foo",1>,两一个出现两次,reducer输出为<"foo",5>
7. 运行hadoop提供的例子程序
建立文件夹并复制源代码
mkdir playground
mkdir playground/src
mkdir playground/classes
cp src/examples/org/apache/hadoop/examples/WordCount.java playground/src/WordCount.java
8. 一个改进的WordCount.java源码
9. hadoop一些特殊的内部类
LongWritable、IntWritable、Text
10. hadoop是Nutch的子项目,Nutch最初是Lucene的子项目
NameNode:hadoop采用master/slave主从结构,NameNode位于主端,指导从端的DataNode执行底层的I/O任务。运行要消耗大量内存和I/O资源,因此驻留 NameNode的服务器不会再有DataNode、Tasktracker运行,从而就会有单点失效问题
DataNode:将HDFS数据块读取或者写入本地文件系统的实际文件中。初始化时将当前存储的数据块告知NameNode,,DataNode数据发生变化时不间断的更新 NameNode中关于数据块的信息
Secondary NameNode(SNN):监测HDFS集群运行状态的辅助守护进程,不接受HDFS的实时变化,与NameNode通信,获取HDFS元数据快照。元数据快照有助于 减少停机时间、降低数据丢失风险
Jobtracker:运行在主节点NameNode中,是应用程序和Hadoop之间的纽带,监测MapReduce作业的整个执行过程。确定处理哪些文件、为不同的任务分配节点、监测 所有任务的运行。指定时间内没有收到Tasktracker的心跳,则认为Tasktracker已经崩溃,从新提交相应任务到其他节点。
Tasktracker:管理各个任务在每个从节点上的执行情况。每个从节点上只有一个Tasktracker,但每个Tasktracker可生成多个虚拟机JVM来并行处理许多map和reduce任 务。不间断的与Jobtracker通信(心跳)。
原文:http://blog.csdn.net/whaoxysh/article/details/19213399