转自:http://www.cnblogs.com/skyme/archive/2012/06/01/2529855.html

第1章 引言

1.1 编写目的

对关于hadoop的文档及资料进行进一步的整理。

1.2 相关网站

毋庸置疑 http://hadoop.apache.org/

国内  http://www.hadoopor.com/   专门研究hadoop的,《hadoop开发者》由该站创办,已发4期

中国云计算论坛hadoop专区; http://bbs.chinacloud.cn/showforum-16.aspx

中科院计算所办的hadoop:http://www.hadooper.cn/

1.3 资料及研究成果

http://code.google.com/p/mycloub/

我会搜集更多更好的资料,方便交流。

第2章 hadoop基本命令

2.1 hadoop基本命令

直接输入hadoop得到的语法文档如下:

namenode -format     format the DFS filesystem 格式化DFS文件系统

namenode -format     format the DFS filesystem 运行第2个namenode

datanode             run a DFS datanode 运行DFS的namenode

dfsadmin             run a DFS admin client 运行一个DFS的admin客户端

mradmin              run a Map-Reduce admin client 运行一个map-reduce文件系统的检查工具

fsck                 run a DFS filesystem checking utility 运行一个DFS文件系统的检查工具

fs                   run a generic filesystem user client  运行一个普通的文件系统用户客户端

balancer             run a cluster balancing utility 运行MapReduce的jobTracker节点

fetchdt              fetch a delegation token from the NameNode 运行一个代理的namenode

jobtracker           run the MapReduce job Tracker node 运行一个MapReduce的taskTracker节点

pipes                run a Pipes job 运行一个pipes作业

tasktracker          run a MapReduce task Tracker node 运行一个MapReduce的taskTracker节点

historyserver        run job history servers as a standalone daemon 运行历史服务作为一个单独的线程

job                  manipulate MapReduce jobs 处理mapReduce作业

queue                get information regarding JobQueues

version              print the version 版本

jar <jar>            run a jar file 运行一个jar

distcp <srcurl> <desturl> copy file or directories recursively 递归地复制文件或者目录

archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive

生成一个hadoop档案

daemonlog            get/set the log level for each daemon 获取或设置每个daemon的log级别

2.2 hadoop核心内容

Hadoop框架中最核心的设计就是:MapReduce和HDFS。

l  MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。

l  HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。

2.3 为什么选择hadoop

下面列举hadoop主要的一些特点:

1)扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。

2)成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。

3)高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。

4)可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。

2.4 HDFS设计特点

下面说说HDFS的几个设计特点(对于框架设计值得借鉴):

1. Block的放置

默认不配置。一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定DataNode同一Rack上的DataNode上。

备份无非就是为了数据安全,考虑同一Rack的失败情况以及不同Rack之间数

据拷贝性能问题就采用这种配置方式。

2. 心跳检测

心跳检测DataNode的健康状况,如果发现问题就采取数据备份的方式来保证数据的安全性。

3. 数据复制

数据复制(场景为DataNode失败、需要平衡DataNode的存储利用率和需要平衡DataNode数据交互压力等情况) 这里先说一下,:使用HDFS的balancer命令,

可以配置一个Threshold来平衡每一个DataNode磁盘利用率。例如设置了Threshold为10%,那么执行balancer命令的时候,

首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold以上,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。

4. 数据校验:

采用CRC32作数据交验。在文件Block写入的时候除了写入数据还会写入交验信息,在读取的时候需要交验后再读入。

5. NameNode是单点

如果失败的话,任务处理信息将会记录在本地文件系统和远端的文件系统中。

6. 数据管道性的写入

当客户端要写入文件到DataNode上,首先客户端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备 份的DataNode上,一直到所有需要写入这个Block的DataNode都成功写入,客户端才会继续开始写下一个Block。

7. 安全模式

安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。

在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,

直到安全模式结束。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。

2.5 说说MapReduce

MapReduce从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个任务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。

具体过程序如下:

1) Input输入

从文件中读取原始数据

原始数据   <InputKey, InputValue>

2) Map映射

将原始数据映射成用于Reduce的数据

<InputKey, InputValue> List<<MapKey, MapValue>>

3) Reduce合并

将相同Key值的中间数据合并成最终数据

<MapKey, List<MapValue>>   <OutputKey, OutputValue>

4) Output输出

将最终处理结果输出到文件

<OutputKey, OutputValue> 结果文件

上述就是MapReduce大致处理过程,在Map前还可能会对输入的数据有Split(分割)的过程,保证任务并行效率,在Map之后还会有Shuffle(混合)的过程,对于提高Reduce的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

再来看看hadoop下的MapReduce

最简单的 MapReduce 应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce函数和一个 main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop 应用程序开发人员提供许多工具,可用于调试和性能度量等。

MapReduce 本身就是用于并行处理大数据集的软件框架。

MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。

2.6 hadoop结构示意图

MapReduce从它名字上在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。

JobTracker的主要职责就是启动、跟踪和调度各个Slave的任务执行。还会有多台Slave,每一台Slave通常具有DataNode 的功能并负责TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

第3章 FSShell 命令指南

3.1 FSShell 命令指南

调用文件系统(FS)Shell 命令应使用 bin/hadoop fs<args>的形式。所有的的 FSshell命令使用 URI 路径作为参数。URI 格式是 scheme://authority/path。对 HDFS 文件系统,scheme 是 hdfs,对本地文件系统,scheme 是 file。其中 scheme 和 authority 参数都是可选的,如果未加指定,就会使用配置中指定的默认 scheme。一个 HDFS 文件或目录比如/parent/child可以表示成 hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默 认值是 namenode:namenodeport)。大多数 FSShell命令的行为和对应的 UnixShell 命令类似,不同之处会在下面介绍各命令使用详情时指出。

出错信息会输出到 stderr,其他信息输出到 stdout。

1) cat

使用方法:hadoop fs -catURI[URI...]

将路径指定文件的内容输出到 stdout。

示例:

hadoop fs-cat hdfs://host1:port1/file1hdfs://host2:port2/file2

hadoop fs-cat file:///file3/user/hadoop/file4

返回值:

成功返回 0,失败返回-1。

2) copyFromLocal

使用方法:hadoop fs -copyFromLocal<localsrc>URI 除了限定源路径是一个本地文件外,和 put 命令相似。

3) copyToLocal

使用方法:hadoop fs -copyToLocal[-ignorecrc][-crc]URI<localdst>

除了限定目标路径是一个本地文件外,和 get 命令类似。

4) cp

使用方法:hadoopfs-cpURI[URI...]<dest>

将文件从源路径复制到目标路径。这个 Hadoop Shell 命令允许有多个源路径,此时目标路径必须是一个目录。

示例:

Hadoopfs –cp /user/hadoop/file1/user/hadoop/file2

hadoopfs –cp /user/hadoop/file1/user/hadoop/file2/user/hadoop/dir

返回值:

成功返回 0,失败返回-1。

5) du

使用方法:hadoop fs –du URI[URI...]

此 Hadoop Shell 命令显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。

示例:

Hadoop fs –du

/user/hadoop/dir1/user/hadoop/file1hdfs://host:port/user/hadoop/dir1

返回值:

成功返回 0,失败返回-1。

6) dus

使用方法:hadoop fs -dus<args>

显示文件的大小。

7) expunge

使用方法:hadoop fs -expunge

清空回收站。请参考 HDFS 设计文档以获取更多关于回收站特性的信息。

8) get

使用方法:hadoop fs -get[-ignorecrc][-crc]<src><localdst>

复制文件到本地文件系统。可用-ignorecrc 选项复制 CRC 校验失败的文件。使用-crc 选项

复制文件以及 CRC 信息。

示例:

hadoop fs –get /user/hadoop/filelocalfile

hadoop fs –get hdfs://host:port/user/hadoop/filelocalfile

返回值:

成功返回 0,失败返回-1。Hadoop Shell 命令还有很多,这里只介绍了其中的一部分。

第4章 eclipse测试hadoop

4.1 配置eclipse

下载插件hadoop-1.03,拷贝到eclipse插件目录

启动hadoop

然后运行jps,看是否服务都已经启动

启动eclipse

配置hadoop,选择window->preferences->Hadoop Map/Reduce,选择hadoop安装路径

编辑map/reduce location

然后新建map/reduce工程

新建类

PutMerge.java

public class PutMerge {
 
    /**
     * @throws IOException
     * @Title: main
     * @Description: 测试逐一读取inputFiles中的文件,并写入目标HDFS文件
     * @param args
     *            设定文件
     * @return void 返回类型
     * @throws
     */
    public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
 
        FileSystem local = FileSystem.getLocal(conf);
 
        /** 设定文件的输入输出目录 */
        Path inputDir = new Path(args[0]);
        Path hdfsFile = new Path(args[1]);
 
        // 伪分布式下这样处理
        FileSystem hdfs = hdfsFile.getFileSystem(conf);
        // 正常分布式
        // FileSystem hdfs = FileSystem.get(conf);
 
        try {
            FileStatus[] inputFiles = local.listStatus(inputDir);
            FSDataOutputStream out = hdfs.create(hdfsFile);
 
            for (int i = 0; i < inputFiles.length; i++) {
                System.out.println(inputFiles[i].getPath().getName());
                FSDataInputStream in = local.open(inputFiles[i].getPath());
                byte buffer[] = new byte[256];
                int bytesRead = 0;
                while ((bytesRead = in.read(buffer)) > 0) {
                    out.write(buffer, 0, bytesRead);
                }
                in.close();
            }
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
}

在本地创建input文件夹,创建file01,file02文件

配置java application,加入参数

加入本地路径和服务器上的路径

然后运行程序,得到输出结果

file02

file01

使用命令查看

bin/hadoop fs -ls /user

查看文件上传情况

<转>Hadoop入门总结的更多相关文章

  1. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  2. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  3. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  4. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  5. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  6. 大数据:Hadoop入门

    大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...

  7. 一.hadoop入门须知

    目录: 1.hadoop入门须知 2.hadoop环境搭建 3.hadoop mapreduce之WordCount例子 4.idea本地调试hadoop程序 5.hadoop 从mysql中读取数据 ...

  8. Hadoop入门必须知道的简单知识

    Hadoop入门知识 Hadoop构成 Hadoop由4个主要构成部分: 1) 基础核心:提供基础的通用的功能 2) HDFS:分布式存储 3) MapReduce:分布式计算 4) YARN:资源分 ...

  9. Hadoop 入门教程

    Hadoop 入门教程 https://blog.csdn.net/kkkloveyou/article/details/52348883

  10. hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2

    问题导读 1.改变hdfs文件的权限,需要修改哪个配置文件?2.获取一个文件的或则目录的权限,哪个命令可以实现?3.哪个命令可以实现设置访问控制列表(ACL)的文件和目录? 接上篇:Hadoop[2. ...

随机推荐

  1. Hadoop集群 增加节点/增加磁盘

    在虚拟机中新建一个机器. 设置静态IP 将修改/etc/hosts 192.168.102.10 master 192.168.102.11 slave-1 192.168.102.12 slave- ...

  2. 让Qt给你报时,为你读诗词 之 Qt5 TTS

    对,Qt没有食言,9月底如期发布了6.2 LTS.嗯,昨天是9月30日,是月底没错,准时没毛病.博客地址如下 https://www.qt.io/blog/qt-6.2-lts-release 对于老 ...

  3. [atARC083F]Collecting Balls

    考虑一个构造,对于坐标$(x,y)$,连一条$x$到$y$的边(注意:横坐标和纵坐标即使权值相同也是不同的点),之后每一个连通块独立,考虑一个连通块内部: 每一个点意味着一次删除操作,每一个边意味着一 ...

  4. 【机器学习基础】卷积神经网络(CNN)基础

    最近几天陆续补充了一些"线性回归"部分内容,这节继续机器学习基础部分,这节主要对CNN的基础进行整理,仅限于基础原理的了解,更复杂的内容和实践放在以后再进行总结. 卷积神经网络的基 ...

  5. SpringCloud微服务实战——搭建企业级开发框架(二十三):Gateway+OAuth2+JWT实现微服务统一认证授权

      OAuth2是一个关于授权的开放标准,核心思路是通过各类认证手段(具体什么手段OAuth2不关心)认证用户身份,并颁发token(令牌),使得第三方应用可以使用该token(令牌)在限定时间.限定 ...

  6. 唯一id生成器

    public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1");//id自增 Long ...

  7. 【R】行或列数目不同的两个数据框如何用rbind/cbind合并?

    目录 前言 方法一:dplyr的bind_rows 方法二:plyr的rbind.fill 前言 通常我们用rbind和cbind合并相同行列的数据框.当两个数据框具有不同行列数目时,直接用会报错. ...

  8. Scrapy框架延迟请求之Splash的使用

    Splash是什么,用来做什么 Splash, 就是一个Javascript渲染服务.它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT.T ...

  9. dart系列之:还在为编码解码而烦恼吗?用dart试试

    目录 简介 为JSON编码和解码 UTF-8编码和解码 总结 简介 在我们日常使用的数据格式中json应该是最为通用的一个.很多时候,我们需要把一个对象转换成为JSON的格式,也可以说需要把对象编码为 ...

  10. 巩固javaweb的第二十四天

    巩固内容: 提示用户信息 在验证失败之后通常需要提示用户错误信息,可以通过下面的代码完成: alert("地址长度大于 50 位!"); 当使用 alert 提示错误信息时,参数是 ...