Hadoop的一些基础概念。
Hadoop是一个开源的框架,可编写和运行分布式应用管理大规模数据。Hadoop强调把代码向数据迁移,而不是相反(SETI @ home),向外发展。
MapReduce的一个简单的例子就是,统计一组文档的每个单词的出现的次数。将文档分成好几个部分,然后给不同的计算机执行,分词。第二阶段,将它们分到不同的计算机上进行汇总处理。MapReduce执行分为两阶段,mapping和reducing。每阶段定义一个函数,成为mapper,reducer。在mapping阶段,获取输入数据,并将数据单元装入mapper。在reducing阶段,reducer处理来自mapper的所有输出,并给出最终结果。举例,mapper后,会出现很多(假设共5个)的<foo, 1>,将它们送给reducer,会合并成<foo, 5>。
当使用到多个reducer时,我们需要一种策略来决定应该把输出的键/值对给谁。比如<foo,1>给f开头的分区,<hoo>给h开头的分区。这里就需要Partitioner,重定向Mapper输出。如hash散列等的方式。在很多场景下,可以在mapper分发前,首先在本地进行一下“本地Reducer”。这时需要用到Combiner。如输出500次的<the, 1>,比不上输出一次的<the,500>。
接下来,看下Hadoop的构成。包括以下几种:
NameNode。Hadoop采用主从结构。分布式存储系统被称为Hadoop文件系统,即HDFS。NameNode位于HDFS的主端,指导从端的DataNode执行底层操作。NameNode是HDFS的书记员,跟踪文件如何被分割为文件块,而这些块又被哪些节点存储。驻留NameNode的节点唯一,不做其他工作。也带来一个负面影响——Hadoop集群的单点失效。
DataNode。每个从节点都会驻留一个DataNode守护进程,来执行分布式文件系统繁重的IO操作——将HDFS的文件读取或写入到本地的文件系统中。一个文件块会被存储多次,实现冗余备份。
Secondary NameNode。独占一台机器,做备份,降低数据丢失的风险。
JobTracker。应用程序和Hadoop的纽带。负责确定执行的计划,包括处理哪些文件、为不同的任务分配节点以及监控所有任务的运行。只有一个JobTracker进程,通常运行在主节点上。
TaskTracker。管理每个任务在每个节点上的执行情况。
在验证上,使用SSH。这个与git在window上的安装类似。
Hadoop的配置也很方便,通过core-site.xml配置NameNode的信息,在mapred-site.xml配置JobTracker信息,在hdfs-site.xml配置hdfs备份等信息。
HDFS是一种文件系统,专为MapReduce这类框架下的大规模分布式数据处理而设计。可以把一个大数据集(如100TB)存为一个文件。
试着在电脑上架设hadoop,可参考这个:http://www.cnblogs.com/tippoint/archive/2012/10/23/2735532.html
在单机模式测试正常。但调成伪分布模式后出错。
通过jps指令,查看当前运行的java进程有哪些,发现datanode没有启动起来。
再查看日志啊,报错信息等,发现是修改了计算机名称出错了。到/etc/hosts里面,添加当前计算机名字与127.0.0.1的对应关系。就解决了。
注意的是,在单机模式时,输入的文件夹是本地的。但是在伪分布模式下,需要先将内容拷贝进HDFS里,才能被识别。
了解到HDFS的一些基本操作,如bin/hadoop fs -mkdir /user/hadoop , bin/hadoop fs -lsr 等。