<转>Hadoop入门总结
转自: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入门总结的更多相关文章
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- 大数据:Hadoop入门
大数据:Hadoop入门 一:什么是大数据 什么是大数据: (1.)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如 ...
- 一.hadoop入门须知
目录: 1.hadoop入门须知 2.hadoop环境搭建 3.hadoop mapreduce之WordCount例子 4.idea本地调试hadoop程序 5.hadoop 从mysql中读取数据 ...
- Hadoop入门必须知道的简单知识
Hadoop入门知识 Hadoop构成 Hadoop由4个主要构成部分: 1) 基础核心:提供基础的通用的功能 2) HDFS:分布式存储 3) MapReduce:分布式计算 4) YARN:资源分 ...
- Hadoop 入门教程
Hadoop 入门教程 https://blog.csdn.net/kkkloveyou/article/details/52348883
- hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
问题导读 1.改变hdfs文件的权限,需要修改哪个配置文件?2.获取一个文件的或则目录的权限,哪个命令可以实现?3.哪个命令可以实现设置访问控制列表(ACL)的文件和目录? 接上篇:Hadoop[2. ...
随机推荐
- win10的pycharm中安装ansible模块过程
前面的安装报错信息 ansible模块安装报错:Could not install packages due to an OSError: [Errno 2] No such file or dire ...
- JS中bind、call和apply的作用以及在TS装饰器中的用法
目录 1,前言 1,call 1.1,例子 1.2,直接调用 1.3,将this指向另一个对象 1.4,传递参数 2,apply 2.1,例子 2.2,直接调用 2.3,将this指向另一个对象 2. ...
- [atARC096F]Sweet Alchemy
给定一棵有根树,记$f_{i}$表示$i$的父亲,每一个点有一个代价$c_{i}$ 给定常数$D$和$X$,再给每个点赋一个权值$v_{i}$($v_{i}\ge 0$),满足以下条件下最大化$\su ...
- 【JavaSE】集合
Java集合 2019-07-05 12:39:09 by冲冲 1. 集合的由来 通常情况下,程序直到运行时,才知道需要创建多少个对象.但在开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不 ...
- [SQL]SQL Server 锁表
-- 查看被锁表: SELECT request_session_id spid, -- 锁表进程 OBJECT_NAME(resource_associated_entity_id) tableNa ...
- 如何查看dpdk版本
服务器上曾经装过很多版本的dpdk,此时如果编译某个程序出现奇怪错误的时候不由得会怀疑是不是dpdk版本的问题= = 令人吃惊的是,网上搜了一圈居然没有一个简单直接的方法能够直接使用,于是自己实验了一 ...
- Hbuilder/Uniapp 格式化的时候,很多属性会排列在一行,如何结局?
因为自己遇到这个问题,然后百度了很久都得不到解决办法,所以解决问题以后在博客园写下此文,希望能帮助到更多人! //在jsbeautifyrc.js里面的html中加入这个,就OK了 "wra ...
- Codeforces Round #701 (Div. 2) 题解
由于今天实在是太自闭了就前来写场已经 AK 的 div.2 的题解了 这场比赛是我的 div.2 首 AK 哦 A 先特判 \(b=1\),强制将 \(b+1\) 否则容易发现答案最大为 \(\log ...
- Atcoder Grand Contest 003 F - Fraction of Fractal(矩阵乘法)
Atcoder 题面传送门 & 洛谷题面传送门 Yet another AGC F,然鹅这次就没能自己想出来了-- 首先需注意到题目中有一个条件叫做"黑格子组成的连通块是四联通的&q ...
- 自动添加shell脚本头部信息
autocmd BufNewFile *.sh exec ":call AddTitleForShell()" function AddTitleForShell() call a ...