Hadoop 基础
1.搜索引擎在internet的海量数据中搜索特定的内容,Apache的hadoop是一种是一种实现海量数据搜索的分布式框架。
2.Hadoop 是一个能够对大量数据进行分布式处理的软件框架。
3. Hadoop 的处理方式 “可靠、高效、可伸缩”
- 可靠:因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。
- 高效:因为它以并行的方式工作,通过并行处理加快处理速度。
- 可伸缩:能够处理 PB 级数据。
4. Hadoop使用社区服务器,成本低。
5. Hadoop最受关注的是MAP AND REDUCE 流程。这个称为创建索引。它将 Web 爬行器检索到的文本 Web 页面作为输入,并且将这些页面上的单词的频率报告作为结果。然后可以在整个 Web 搜索过程中使用这个结果从已定义的搜索参数中识别内容。
Mapreducde最基本的最成包括一个 Map 函数、一个 Reduce 函数和一个 main 函数。
- Main:将作业控制和文件输入/输出结合起来
- Map:接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对
- Reduce:接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。
6.Hadoop没有将存储移动到某个位置以供处理,而是将处理移动到存储。这通过根据集群中的节点数调节处理,因此支持高效的数据处理。Hadoop 一直帮助解决各种问题,包括超大型数据集的排序和大文件的搜索。它还是各种搜索引擎的核心。
Hadoop c++应用
1 首先我们需要知道map-reduce的基本原理,这里不说了。其次我们需要知道,在用C++编写hadoop应用程序时,需要包含三个头文件:
#include "Pipes.hh"
#include "TemplateFactory.hh"
#include "StringUtils.hh"
#include"Pipes.hh"
#include"TemplateFactory.hh"
#include"StringUtils.hh"
class DataCountMap:public HadoopPipes::Mapper {
public:
DataCountMap(HadoopPipes::TaskContext&context){}
void map(HadoopPipes::MapContext&context) {
std::vector<std::string>words=HadoopUtils::splitString(context.getInputValue()," "); // 这里是分割字符串,如前文所述,每一行数据中的各项是以空格来分割的。分割的结果保存到了一个std::vector中
if("kkk"==words[1]) {
context.emit("kkk","1");
} else if("nnn"==words[1]) {
context.emit("nnn","1");
}
}
};
class DataCountReduce:public HadoopPipes::Reducer {
public:
DataCountReduce(HadoopPipes::TaskContext&context){}
void reduce(HadoopPipes::ReduceContext&context)
{
int sum=0;
while(context.nextValue()) {
sum++;
}
context.emit(context.getInputKey(),HadoopUtils::toString(sum));
}
};
int main(int argc,char*argv[])
{
return HadoopPipes::runTask(HadoopPipes::TemplateFactory<DataCountMap, DataCountReduce>());
}
3. Hadoop的使用:
-
将编译完成的程序上传到HDFS上去: hadoop fs -put dz_count /my_dir/
-
在HDFS上执行: hadoop pipes -D hadoop.pipes.java.recordreader=true -D hadoop.pipes.java.recordwriter=true -input /data/ -output /my_dir/output -program /my_dir/dz_count
-
查看结果: hadoop fs -cat /my_dir/output/part-00000 (其中PART-00000为假设的输出文件)
-
Reference:
1.http://blog.csdn.net/shenyan008/article/details/8460246
2. http://blog.csdn.net/chenweitang123/article/details/6576096