您的位置:首页 > 理论基础 > 计算机网络

网络上的学习笔记 Hadoop

2015-10-09 17:56 465 查看
1. 如今有10个文件夹,每个文件夹都有1000000个url.如今让你找出top1000000url

(1)运用2个job,第一个job直接用filesystem读取10个文件夹作为map输入,url做key,reduce计算个url的sum,

下一个job map用url作key,运用sum 二次排序,reduce中取top10000000

(2)建hive表 A,挂分区channel,每个文件夹是一个分区.

select x.url,x.c from

(select url,count(1) as c from A where channel ='' group by url ") x order by x.c desc limit 1000000;

在进行文本分析的时候我们经常需要过滤掉停用词,标点等,本文给大家介绍一下如何识别并删除文本中的所有标点符号。下面是三个可行的正则表达式方案,童鞋们来试试吧^_^

[java]

(1) s.replaceAll( "\\p{Punct}", "" );

(2) s.replaceAll("\\pP" , "");

(3) s.replaceAll("\\p{P}" , "");

正则表达式,

\\d表示 0-9 的数字,

\\s表示 空格,回车,换行等空白符,

\\w表示单词字符(数字字母下划线)


Map端机制

对于map端的输入,需要做如下的事情:

1.反射构造InputFormat.

2.反射构造InputSplit.

3.创建RecordReader.

4.反射创建MapperRunner(新api形式下是反射创建org.apache.hadoop.mapreduce.Mapper.Context).

对Map端输出,需要做如下的事情:

1.如果有Partitioner的话,反射构造Partitioner。

2.将key/value/Partitioner数据写入到内存当中。

3.当内存当中的数据达到一定阀值了,需要spill到硬盘上面,在spill前,需要进行排序,如果有combiner的话需要进行combiner。

4.sort的规则是先进行Partitioner的排序,然后再进行key的字典排序,默认的是快速排序。

5.当生成多个spill文件时,需要进行归并,最终归并成一个大文件

关于排序:

1.在内存中进行排序,整个数据的内存不会进行移动,只是再加上一层索引的数据,排序只要调整索引数据就可以了

2.多个spill文件归并到一个大文件时,是一个归并排序的过程,每一个spill文件都是按分区和key排序好的,所以归并完的文件也是按分区和key排序好的。


Reduce端机制

1.ReduceTask有一个线程和TaskTracker联系,之后TaskTracker和JobTracker联系,获取MapTask完成事件

2. ReduceTask会创建和MapTask数目相等的拷贝线程,用于拷贝MapTask的输出数据,MapTask的数据一般都是非本地的

3. 当有新的MapTask完成事件时,拷贝线程就从指定的机器上面拷贝数据,是通过http的形式进行拷贝

4. 当数据拷贝的时候,分两种情况,当数据量小的时候就会写入内存当中,当数据量大的时候就会写入硬盘当中,这些工作分别由两个线程完成

5. 因为所有的数据都来自不同的机器,所以有多个文件,这些文件需要归并成一个文件,在拷贝文件的时候就会进行归并动作

6. 拷贝和归并过程统称为shuffle过程

Reduce端输出需要做如下的事情:

1.构造RecordWriter,这个是根据客户端设置的OutputFormat中getRecordWriter()方法得到

2.通过OutputFormat和RecordWriter将结果输出到临时文件中

3.Rudece进行commit过程,和TaskTracker进行通信,TaskTracker和JobTracker进行通信,然后JobTracker返回commit的指令,Reduce进行

commit,将临时结果文件重命名成最终的文件

4.commit成功后,kill掉其他的TaskAttempt
http://blog.csdn.net/zdp072/article/category/2240149
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: