最近需要在hadoop上跑一些数据,顺便学习下hadoop相关的东西。
hadoop其实就是一个分布式计算的解决方案,它可以由以下两部分组成:
hadoop=HDFS(文件系统,数据存储相关技术)+Mapreduce(数据处理)两部分组成,
按照我的理解,hadoop其实就是存储和计算这两部分组成,我们需要将大量的数据通过
HDFS文件系统进行存储,然后我们需要对这些大量的数据进行计算,而存储这些大量的
数据通过我们传统的一台计算机肯定不可能完成,所以我们需要借助于成百上千台机器,
我们将大数据存储到这些机器上,但我们看到的是一个文件系统,而不是很多文件系统,
比如我们需要获取/hdfs/temp1的数据,我们虽然引用的是一个文件路径,但实际的数据
其实存放在很多的机器上,我们作为用户并不需要关心存储在哪些机器上,HDFS文件系
统帮我们进行了处理。
我们存下这么多数据以后,那我们该如何进行处理数据呢,单机处理肯定不可以接受,那
我们就需要合理的给机群分配工作任务,我们需要机群相互通信来交互数据,以便完成复
杂的计算,这个完成计算的功能就是mapreduce的功能。mapreduce是第一代计算引擎,
Tez和Spark是第二代,对于简单的处理来说,用mapreduce已经可以处理大数据领域很
大一部分问题了。,mapreduce采用了很简化的计算模型,只有map和reduce两个计算
过程(中间用Shuffle来串联)。
那什么是mapreduce呢,比如我们需要在hadoop的hdfs中,我们需要统计巨大的文本文
件,例如我们需要统计我们存储的大数据文本中“你好”出现的次数,我们启动mapreduce
程序时,进行计算的时候,我们的机群会进行工作,每台机器都有各自的分工,各自负
责各自的部分,假设三台机器A,B,C,他们各自统计到“你好”出现的次数为10,20,
30次,各自分工的阶段就是map阶段,最后将其进行汇总,出现“你好”的次数为60次,
这个汇总的过程就是reduce过程。
如果我们需要实时进行统计计算比如像微博24小时更新的时候,我们就需要另外一种计
算模型,他就是streaming(流)计算,流计算的思路就是,如果我要实现实时更新,
那我就可以在数据流进来的时候,我就是开始进行统计,但缺点是不灵活,我们需要
统计的东西我们必须事先知道。
因为是在工作中零时需要用到hadoop相关的一些知识,所以暂时进行了大概得了解,
并没有太深入了解,深入了解的话可以参考
https://chu888chu888.gitbooks.io/hadoopstudy/content/Content/chapter1.html和
https://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html。里面涉及到了hadoop更
深层次的讲解以及包括安装等。
接下来介绍下工作中用到的部分hadoop在linux上的一些命令。
**fs**
用法:hadoop fs [GENERIC_OPTIONS] [COMMAND_OPTIONS]
它运行一个常规的文件系统客户端。搭配我们的shell命令来使用,shell命令包括:
cat
使用方法:hadoop fs -cat URI [URI …]
将路径指定文件的内容输出到stdout。
示例:
hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
返回值:
成功返回0,失败返回-1。
chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI …]
改变文件所属的组。使用-R将使改变在目录结构下递归进行。命令的使用者必须
是文件的所有者或者超级用户。
chmod
使用方法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI …]
改变文件的权限。使用-R将使改变在目录结构下递归进行。命令的使用者必须是
文件的所有者或者超级用户。
chown
使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须
是超级用户。
copyFromLocal
使用方法:hadoop fs -copyFromLocal <localsrc> URI
除了限定源路径是一个本地文件外,和put命令相似
copyToLocal
使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
除了限定目标路径是一个本地文件外,和get命令类似。
cp
使用方法:hadoop fs -cp URI [URI …] <dest>
将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
示例:
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
返回值:
成功返回0,失败返回-1。
du
使用方法:hadoop fs -du URI [URI …]
显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。
示例:
hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://host:port/user/hadoop/dir1
返回值:
成功返回0,失败返回-1。
expunge
使用方法:hadoop fs -expunge
清空回收站。
get
使用方法:hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用- crc选项
复制文件以及CRC信息。
示例:
hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://host:port/user/hadoop/file localfile
返回值:
成功返回0,失败返回-1。
getmerge
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
接受一个源目录和一个目标文件作为输入,并且将源目录中所有的文件连接成本 地目标文
件。addnl是可选的,用于指定在每个文件结尾添加一个换行符
ls
使用方法:hadoop fs -ls <args>
lsr
使用方法:hadoop fs -lsr <args>
ls命令的递归版本。类似于Unix中的ls -R。
mkdir
使用方法:hadoop fs -mkdir <paths>
接受路径指定的uri作为参数,创建这些目录。
mv
put
使用方法:hadoop fs -put <localsrc> ... <dst>
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取
输入写入目标文件系统。
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
hadoop fs -put - hdfs://host:port/hadoop/hadoopfile
从标准输入中读取输入。
返回值:
成功返回0,失败返回-1。
rm
rmr
test
使用方法:hadoop fs -test -[ezd] URI
选项:
-e 检查文件是否存在。如果存在则返回0。
-z 检查文件是否是0字节。如果是则返回0。
-d 如果路径是个目录,则返回1,否则返回0。
示例:
hadoop fs -test -e filename
touchz
使用方法:hadoop fs -touchz URI [URI …]
创建一个0字节的空文件。
示例:
hadoop -touchz pathname
返回值:
成功返回0,失败返回-1。
这些是hadoop的fs shell相关的命令。
**jar**
运行jar文件。用户可以把他们的Map Reduce代码捆绑到jar文件中,使用这个命令执行。
暂时只是用到这两个命令,后续用到更多再进行补充。
linux 中hadoop相关命令学习
最新推荐文章于 2024-09-08 10:40:56 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)