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的使用:

  • hadoop fs -put dz_count /my_dir/
  • 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