Hadoop学习笔记(2) ——解读Hello World

时间:2022-09-06 23:47:43

Hadoop学习笔记(2)

——解读Hello World

上一章中,我们把hadoop下载、安装、运行起来,最后还执行了一个Hello world程序,看到了结果。现在我们就来解读一下这个Hello Word。

OK,我们先来看一下当时在命令行里输入的内容:

  1. $mkdir input
  2. $cd input
  3. $echo "hello world">test1.txt
  4. $echo "hello hadoop">test2.txt
  5. $cd ..
  6. $bin/hadoop dfs -put input in
  7. $bin/hadoop jar build/hadoop-0.20.2-examples.jar wordcount in out
  8. $bin/hadoop dfs -cat out/*

第1行,容易理解,我们在hadoop文件夹下建了一个input子文件夹;

第2行,进入input文件夹;

第3行,echo是指回显示,可以理解为print, 大于符(>)为重定向,正常echo是显示在屏幕上,而用了重定向后,即内容显示在了text1.txt文件里。那这句话意思是,创建一个test1.txt文件,其内容是"hello world"。 第4行类同;

第5行,回上一级目录

第6行,这里运行了一个hadoop命令, 参数为 dfs –put input in 意思是将input文件夹上传到hadoop文件系统中,并存于目录in中。

第7行,同样是hadoop命令,参数 jar XXX.jar wordcount in out 是指运行jar程序中wordcount类的程序,并传入参数 in out。 in 为输入目录 out 为输出结果目录,两个目录皆为hadoop文件系统中的目录,而并不是当前操作系统目录了。在第7行后,会看到屏幕在刷,是在计算。

第8行,cat是linux常用的命令,是将指定文件中的文本内容输出。 所以这里 cat out/* 是指把out文件夹下所有文件的文本内容输出,同时注意这里是dfs即是在hadoop文件系统中,且这个out正是第7步程序中输出的目录。所以输入该命令后,我们看到了下面的结果:

Hadoop学习笔记(2) ——解读Hello World

这个简单的程序目的是什么,其实比较容易看出来了,就是统计每个文件中的单词出现的数量,并将结果合并后显示出来。

可能有人就想,有什么啊,这程序我们C#、java几行代码也就实现了,有什么特别的?的确,初看过程就是。但我们深入来看一下。Hadoop的框架最核心的设计就是:HDFS和MapReduce。

HDFS就是分布式数据存储,这就不一样了,也就是说我的这里需要统计的文件很多的话,可能就不存在一台机器上了,而且存在不同机器上,不需要我们人为控制,而是交给Hadoop自动完成,而我们,只需要统一的接口(bin/Hadoop dfs)来访问:

Hadoop学习笔记(2) ——解读Hello World

MapReduce当然就是负责计算咯,回头一想,的确这程序不简单,统计一个文件单词出现的频率容易,但时如果这些文件是分布在不同机器上,然后又需要将结果能很方便的合并起来,那就不是简单几行代码就能搞定的了。所以MapReduce就是来负责这一块的。

看到这里,我们就理解了上面的hello world,但是马上会想,这个hadoop有哪些应用场景呢?或为什么它这现在这么牛,这么流行?

现在是一个大数据时代,首先是一个存储问题,hadoop提供了一个很好的分布式文件系统,方便我们存大量数据,同时提供了统一接口。

其次,拥有了大数据,不代表能产生价值,在产生价值,就必须利用这些数据进行计算(查询、分析等),但时传统的计算就是在一台或多台机器上部署程序,然后把数据获通过接口抓取到程序里进行分析,这称之为移动数据。而hadoop不是,而是把程序自动分发到各hadoop结点上进行计算,然后通过一定机制把结果进行汇总最后返回出来,这称之为移动计算。显然,移动计算要比移动数据成本要低得多

应用场景之一:就是搜索引擎,现在互联网数据海量,如何存储并搜索成为难点,那hadoop的两大核心框架就正符合这用处,用网络爬虫取来的海量网页数据存于分布式库,然后当去搜索时,通过各子结点并发搜索,将数据返回合并后展示。 而hadoop的产生,也就是在google在2003年到2004年公布了关于GFS、MapReduce和BigTable三篇技术论文,即google的三驾马车。Hadoop的HDFS对就google的GFS,MapReduce对就google的MapReduce,Hadoop的HBase对应google的BigTable。 (注:HBase是其于hadoop开发的类似数据操作的软件)。

应用场景之二:生物医疗,大量DNA数据存储,同时要进行比对工作,用Hadoop再合式不过了。

当然还有N多其他应用场景……

到现在hadoop的核心价值总算摸清了,一是分布式存储,二是移动计算。

为了支撑这些功能,肯定会用到不少的进程,现在我们就来了解下这些进程以及相应的命令。

我们知道,运行$bin/start-all.sh来启动整个hadoop。然后运行$bin/jps可以看到所有运行的进程:

Hadoop学习笔记(2) ——解读Hello World

这些进程现在是安装在同一台机器上的,而实际分布式部署时,如下图:

Hadoop学习笔记(2) ——解读Hello World

NameNode:是HDFS的守护进程,负责记录文件是如何分割成数据块以及分配存储到哪个DataNode节点上,对内存及I/O进行集中管理。一个系统中只会有一个NameNode。

DataNode:数据结点,负责将数据包读写到硬盘上。当客户端需要数据通讯时,先问NameNode获取存放到哪个DataNode,然后,客户端直接与DataNode进行通讯。

SecondaryNameNode:用来监控HDFS状态的辅助进程。与NameNode不同的时,它不接收或记录任何实时的数据变化,只与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过SecondaryNameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时NameNode发生问题时,Secondary NameNode可以及时地作为备用NameNode使用。

JobTracker:应用程序与Hadooop之间的纽带,代码提交到集群上,JobTracker将会确定执行计划,包括决定处理哪些文件,为不同的任务分配节点以及监察所有任务的运行,如果任务失败,JobTracker将会自动重启,但分配的节点可能会不同。

TaskTracker:负责执行由JobTracker分配的单项任务,虽然单个结点上只有一个TaskTracker,但可以利用多个JVM(Java虚拟机)并行处理多个Map或reduce任务。

了解了进程后,我们再来了解下有哪些文件操作命令,

bin/hadoop是一个批处理sh文件(与bat类似),运行时需要输入子命令。子命令列表如下:

Hadoop学习笔记(2) ——解读Hello World

这里比较清楚了,各个子命令的描述,但这里有下fs,是我们常用的,同里里面会还有N多子命令,比如bin/hadoop fs -ls 列出文件内容。

其它fs参数清单如下:

命令

说明

[-ls <path>]

列出文件夹下的内容

[-lsr <path>]

递归列出文件夹下的内容

[-du <path>]

显示文件点用空间

[-mv <src> <dst>]

移动文件

[-cp <src> <dst>]

复制文件

[-rm [-skipTrash] <path>]

删除文件

[-rmr [-skipTrash] <path>]

删除文件夹

[-put <localsrc> ... <dst>]

将本地文件上传到服务器上

[-copyFromLocal <localsrc> ... <dst>]

将服务器文件下载到本地

[-moveFromLocal <localsrc> ... <dst>]

将服务器文件移至到本地

[-get [-ignoreCrc] [-crc] <src> <localdst>]

将服务器文件下载到本地

[-getmerge <src> <localdst> [addnl]]

将服务器文件夹内文件合并后下载到本地

[-cat <src>]

显示文件的文本内容

[-text <src>]

显示文件文本内容

[-copyToLocal [-ignoreCrc] [-crc] <src> <localdst>]

复制文件(夹)到本地

[-moveToLocal [-crc] <src> <localdst>]

移动文件(夹)到本地

[-mkdir <path>]

创建文件夹

[-setrep [-R] [-w] <rep> <path/file>]

设置文件的复制数量

[-touchz <path>]

写一个时间戳放在文件同级目录

[-test -[ezd] <path>]

测试文件是否存在

[-stat [format] <path>]

返回文件状态

[-tail [-f] <file>]

显示文件最后1KB的内容

[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]

修改文件(夹)属性

[-chown [-R] [OWNER][:[GROUP]] PATH...]

修改文件owner属性

[-chgrp [-R] GROUP PATH...]

修改文件(夹)属性

[-help [cmd]]

显示帮助

Hadoop学习笔记(2) ——解读Hello World的更多相关文章

  1. Hadoop学习笔记&lpar;2&rpar;

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  2. Hadoop学习笔记—22&period;Hadoop2&period;x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  3. Hadoop学习笔记&lpar;7&rpar; ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  4. Hadoop学习笔记&lpar;6&rpar; ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  5. Hadoop学习笔记&lpar;5&rpar; ——编写HelloWorld&lpar;2&rpar;

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  6. Hadoop学习笔记&lpar;3&rpar;——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  7. Hadoop学习笔记&lpar;1&rpar; ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  8. Hadoop学习笔记(两)设置单节点集群

    本文描写叙述怎样设置一个单一节点的 Hadoop 安装.以便您能够高速运行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 參考官方文档:Hadoo ...

  9. Hadoop学习笔记—5&period;自定义类型处理手机上网日志

    转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...

随机推荐

  1. js瀑布流 原理实现揭秘 javascript 原生实现

    web,js瀑布流揭秘 瀑布流再很久之前流行,可能如我一样入行晚的 ,可能就没有机会去使用.但是这个技术终究是个挺炫酷的东西,花了一个上午来研究,用原生js实现了一个,下面会附上源码,供大家解读. 说 ...

  2. 为什么做前端要做好SEO

    我就挑干货说啦SEO可能听起来很高大上,其实翻译成中文就是"搜索引擎优化",它只是通过一定的方法在网站内外发布文章.交换连接等,最终达到某个关键词在搜索引擎上获得好的排名. 我有幸 ...

  3. nginx反向代理tomcat访问时浏览器加载失败,出现 ERR&lowbar;CONTENT&lowbar;LENGTH&lowbar;MISMATCH 问题

    问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...

  4. shell命令从目录中循环匹配关键词

    #!/bin/bash while read line do for file in /home/local/test/* do if test -f $file then sed -n " ...

  5. Mac Port 基本用法总结

    Mac Port 基本用法总结 Mac Port 基本用法总结 1. Mac Port的下载地址 http://www.macports.org/install.php 2. Mac Port的说明文 ...

  6. 让CALayer的shadowPath跟随bounds一起做动画改变-b

    在iOS开发中,我们经常需要给视图添加阴影效果,最简单的方法就是通过设置CALayer的shadowColor.shadowOpacity.shadowOffset和shadowRadius这几个属性 ...

  7. Fedora 17下交叉编译vlc-2&period;0&period;6-win32小记

    关于编译windows下的vlc网上的教程除了翻译N年前wiki官网的那些蚂蚁文之外,可以说基本没啥参考意义和价值.因为那些都是非常老的版本,0.8.x或者1.x.x,而我这个人有喜欢新鲜事儿,所以就 ...

  8. lua方法点&lpar;&period;&rpar;调用和冒号&lpar;&colon;&rpar;调用区别&colon;

    用.定义方法时object.func_name(arg1,arg2...),方法真正的函数签名形式为: object.func_name(arg1, arg2...) 用:定义方法时object:fu ...

  9. 【MS SQL】数据库维护计划之数据库备份&lpar;二&rpar;

    原文:[MS SQL]数据库维护计划之数据库备份(二) 上篇[MS SQL]数据库维护计划之数据库备份(一) 说了数据库备份的一些概念后,这篇以HRP_KQYY数据库备份为例,进行备份计划设置. 考虑 ...

  10. Bug Tracker

    Bug Tracker 使用笔记(有图有真相)   目的:管理Bug,完善业务流程. 前提条件:BugTracker是基于IIS和SQL Server和Asp.Net的.相当于一个Web端的管理系统. ...