Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1102121
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: HADOOP

2013-04-11 16:44:55

前面我们已经配置了一套环境,环境虽然有了,但不少朋友恐怕心头依旧茫然,不知道接下来该做什么,不要着急,这主要是因为我们(我字重读)对HADOOP的认知还停留在概念的层面,所知有限自然不明白该如何着手。其实HADOOP没有那么深奥,老话形容说就是层窗户纸,看着朦朦胧胧如雾里看花不知所以,其实一点儿就透。下面我给大家点点,要是没点儿透……您家窗户上装的那是玻璃呀。

HADOOP是套数据分析平台(个人理解),如大家所知,HADOOP由两大核心模块组成:HDFS+MapReduce,我们前面搭建的HADOOP环境其实也正是这两部分。那么如何使用呢,简单讲就是通过MapReduce方法分析HDFS中存储的数据。从这点来看跟传统的数据计算/分析系统没有什么区别,只是说 HADOOP做的很专业,使得用户无须关注任务分解和计算能力扩充方面(都是针对大数据量)的因素可能造成的困扰,而把重心放在实现自己的业务需求上。

对于用户来说,就是把原始数据存储到HDFS中,通过MapReduce方法进行分析。所以,在本节我们就来实战看看怎么向HDFS中存取文件,以及如何使用MapReduce功能进行数据分析。

    提示:以上属个人理解,比较片面,大家可以相信但不能全信。

1、HDFS功能测试

HDFS是一套分布式的文件系统,其数据保存在各datanode上,datanode可能有几十上百或数千个,但对于用户来说完全透明,即不需要关心数据到底写在哪个节点上,也不需要关注应该在哪个节点上进行读写,在任意节点上操作均可,它所看到的数据也始终是一份。

想要操作HDFS文件系统进行读写,从大的类别上可以分成两种:通过程序的 (比如),或者通过命令行。

    提示:此处理解有限,可能不严谨,也许仍有其它方式向HDFS中读写数据。

需要强调的是,我们这里所说的HDFS文件系统,可并不是我们前面在配置HADOOP环境时,通过conf/hdfs-site.xml文件配置过HDFS的数据节点存储路径哟,比如这段:

           dfs.data.dir

           /data2/hadoop/data

           true

同学,这段配置指定的是数据节点的存储路径不假,但并不是HDFS文件系统哟,这里所指定的是本节点HDFS映射文件的路径。怎么理解呢,简单讲,如果您在这个路径下创建文件,HDFS里是看不到的;同理,在HDFS中创建的文件,操作系统的文件系统中也看不到(也许能够看到一堆64M大小的映射文件)。

我们想要对HDFS文件系统进行读写操作,只有采用前面说的两种方式。

1.1 命令行方式操作HDFS

命令行方式就是通过hadoop命令附加dfs选项。我们可以直接执行该命令并附加dfs选项,不指定任何参数的情况下,会输出一些简要的帮助信息,如下:

    [grid@hdnode1 ~]$ hadoop dfs

    Usage: java FsShell

              [-ls ]

              [-lsr ]

              [-du ]

              [-dus ]

              [-count[-q] ]

              [-mv ]

              [-cp ]

              [-rm [-skipTrash] ]

              [-rmr [-skipTrash] ]

              [-expunge]

              [-put ... ]

              [-copyFromLocal ... ]

              [-moveFromLocal ... ]

              [-get [-ignoreCrc] [-crc] ]

              [-getmerge [addnl]]

              [-cat ]

              [-text ]

              [-copyToLocal [-ignoreCrc] [-crc] ]

              [-moveToLocal [-crc] ]

              [-mkdir ]

              [-setrep [-R] [-w] ]

              [-touchz ]

              [-test -[ezd] ]

              [-stat [format] ]

              [-tail [-f] ]

              [-chmod [-R] PATH...]

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

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

              [-help [cmd]]


    Generic options supported are

    -conf     specify an application configuration file

    -D            use value for given property

    -fs      specify a namenode

    -jt    specify a job tracker

    -files    specify comma separated files to be copied to the map reduce cluster

    -libjars    specify comma separated jar files to include in the classpath.

    -archives    specify comma separated archives to be unarchived on the compute machines.


    The general command line syntax is

    bin/hadoop command [genericOptions] [commandOptions]

上面输出的信息指明hadoop dfs能够支持的参数,对于有经验的朋友来说,肯定已经注意到,很多参数名与下的文件系统操作命令极为相似(有不少就是一模一样啊),悄悄告诉你,功能也很类似的哟。如果觉着信息稍简化,还可以再附加-help参数查看更详细的信息。下面三思通过几个例子给大家演示一下。

创建目录:-mkdir

比如说创建一个jss目录吧,执行hadoop dfs并附加-mkdir参数:

    [grid@hdnode1 ~]$ hadoop dfs -mkdir jss

浏览HDFS目录结构:-ls

目录(或文件)进行了创建,怎么知道是否创建成功了呐,那就ls看一下呗:

    [grid@hdnode1 ~]$ hadoop dfs -ls

    Found 1 items

    drwxr-xr-x   - grid supergroup          0 2013-02-17 14:23 /user/grid/jss

出来了有木有,看到了有木有~~~~

目录结构/权限/用户/时间信息/路径等等看起来都与Linux/Unix环境非常相似,对于具备一定Linux经验的朋友来说会比较容易理解。但是要注意了,这其中的路径和用户,及用户组跟操作系统层的路径没什么关系。

将文件上传至HDFS:-put

先创建两个文本文件:

    [grid@hdnode1 ~]$ echo "Hello Junsansi" > a.txt

    [grid@hdnode1 ~]$ echo "Junsansi says: Hello world" > b.txt

将这两个文件保存到 HDFS的jss目录下:

    [grid@hdnode1 ~]$ hadoop dfs -put *.txt jss

验证一下:

    [grid@hdnode1 ~]$ hadoop dfs -ls jss

    Found 2 items

    -rw-r--r--   3 grid supergroup         15 2013-02-17 16:58 /user/grid/jss/a.txt

    -rw-r--r--   3 grid supergroup         27 2013-02-17 16:58 /user/grid/jss/b.txt

查看文件内容:-cat

HDFS中的文件是否就是我们上传的文件呢,看下内容吧,使用-cat参数:

    [grid@hdnode1 ~]$ hadoop dfs -cat /user/grid/jss/a.txt

    Hello Junsansi

此外还有删除用-rm,下载用-get,复制用-cp等等,咱们演示几条就差不多了,别的有兴趣就自行尝试吧。

1.2 通过API方式操作HDFS

命令行的用法比较简单,不过多数情况下我们操作HDFS时不会在命令行上进行,而是通过应用来读取数据,那在程序中能否读写HDFS中的目录或文件呢,这个必须可以呀。HADOOP API将这些功能都封装好了,直接调用即可。

那么都有哪些API呢?我给个链接,官方白皮书,你想知道的这里都有:

    提示:Eclipse开发环境配置及程序调试可参考三思的其它文章。
阅读(2660) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~