[hadoop读书笔记] 第三章 HDFS

P49

当数据集的大小超过一台计算机存储能力时,就有必要对数据集分区(partition)并将分区存储到若干台独立的计算机上。

管理网络中跨多台计算机存储的系统就叫分布式文件系统  Distributed FileSystem

而基于Hadoop构建的DFS就称之为HDFS。

P49-50

HDFS的设计思路:以流数据访问模式来存储超大文件,运行在商用硬件集群上。

P51

HDFS 数据块:默认为64MB,是HDFS进行数据读写的最小单位,作为独立的存储单元存在。

一个打文件可以切分为多个块存储在不同节点的磁盘上,数据的备份是以块的方式来备份的。

P52

显示块信息命令:fsck

列出文件系统中各个文件由哪些块构成:hadoop fsck / -files -blocks

P56

fs.default.name - core-site.xml

用于设置Hadoop的默认文件系统,由URI指定,通常为:hdfs://ip:port/

表示将HDFS作为Hadoop的默认文件系统。HDFS的守护进程将会通过该属性来确定namenode的主机和端口。

如果不配置端口号  hdfs://ip/ 则默认端口为8020 ,namenode将会运行在8020端口上。

<property>
    <name>fs.default.name</name>
    <value>hdfs://192.168.200.123:9000</value>
</property>

dfs.replication - hdfs-site.xml

用于设置数据块的副本数量,默认为3。如果是伪分布式配置时,则配置为1。

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/wdcloud/data/hadoop/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/wdcloud/data/hadoop/data</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
</configuration>

文件系统基本操作

查看帮助:hadoop fs -help

举例:

(1)将文件从本地文件系统复制到HDFS:

hadoop fs -copyFromLocal    本地文件路径/a.txt    hdfs://ip:port/user/xxx/a.txt

当core-site.xml中配置了URI时,可以省略 hdfs://ip:port,直接运行

hadoop fs -copyFromLocal    本地文件路径/a.txt    /user/xxx/a.txt

使用相对路径将文件复制到HDFS的home目录(/user/xxx/):

hadoop fs -copyFromLocal    本地文件路径/a.txt   a.txt

(2)将文件从HDFS复制到本地文件系统

hadoop fs -copyToLocal xxx.txt(HDFS 的 home 下)    xxx.copy.txt(本地文件系统)

(3)创建文件夹

hadoop fs -mkdir books

(4)列出目录文件

hadoop fs -ls .

drwxr-xr-  -  tom supergroup 0 2009-04-02 22:41 /user/tom/books

drwxr-xr-  1  tom supergroup 118 2009-04-02 22:29 /user/tom/xxx.txt

第一列文件模式

第二列数据块备份数目,目录作为元数据存储在namenode而非datanode中

3、4显示文件所属用户和组

5显示文件大小,字节为单位,目录为0

6、7列是文件的最后修改日期和时间

第8列是文件或目录的绝对路径

P58 Hadoop文件系统

Hadoop的文件系统的概念是抽象的 HDFS只是其中的一种实现。Java抽象类org.apache.hadoop.FileSystem定义了hadoop文件系统接口,有如下的具体实现:

使用URI可用于Hadoop与文件系统进行实时交互,如:

列出本地文件系统根目录下的文件:hadoop fs -ls file:///

列出HDFS文件系统根目录下的文件

P61

namenode内置web服务器:默认运行在50070端口上,提供目录服务

datanode内置web服务器:默认运行在50075端口上,以数据流方式传输

配置:

dfs.webhdfs.enable - true

访问namenode的hdfs使用50070端口,访问datanode的webhdfs使用50075端口。访问文件、文件夹信息使用namenode的IP和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的IP和50075端口。要想不区分端口,直接使用namenode的IP和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hefs-site.xml中的dfs.webhdfs.enabled为true。

端口配置

Hadoop 管理介面 - mapred-site.xml
<property>
  <name>mapred.job.tracker.http.address</name>
  <value>0.0.0.0:50030</value>
</property>

Hadoop Task Tracker 状态 - mapred-site.xml
<property>
  <name>mapred.task.tracker.http.address</name>
  <value>0.0.0.0:50060</value>
</property>

Hadoop DFS 状态 - hdfs-site.xml
<property>
  <name>dfs.http.address</name>
  <value>0.0.0.0:50070</value>
</property>
curl操作webhdfs
创建并写一个文件
 curl -i -X PUT "http://localhost:50070/webhdfs/v1/<PATH>?op=CREATE
 [&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>]
 [&permission=<OCTAL>][&buffersize=<INT>]“
 curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?
 op=CREATE...“
 注意这个地方填入的是DataNode的信息

在一个文件内追加内容
 curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=APPEND[&buffersize=<INT>]”
 curl -i -X POST -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?
 op=APPEND...“
 注意该条命令获得的是DataNode的信息。

打开并读取一个文件
 curl -i -L "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN
 [&offset=<LONG>][&length=<LONG>][&buffersize=<INT>]“

创建一个目录
 curl -i -X PUT "http://<HOST>:<PORT>/<PATH>?op=MKDIRS[&permission=<OCTAL>]“

重名命文件、文件夹
 curl -i -X PUT "<HOST>:<PORT>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>"

删除文件/文件夹
 curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE [&recursive=<true|false>]“

文件/ 文件夹的状态信息
 curl -i “http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS“

目录列表
 curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS”

获取目录的上下文环境汇总信息
 curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETCONTENTSUMMARY"

获取Check Sum File
 curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM”

获取Home 目录
 curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETHOMEDIRECTORY”

设置权限
 curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETPERMISSION [&permission=<OCTAL>]“

设置所有者
 curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETOWNER [&owner=<USER>][&group=<GROUP>]"

设置备份
 curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION [&replication=<SHORT>]“

P63

使用Java接口与Hadoop文件系统进行交互

FileSystem:与Hadoop中某文件系统进行交互的API

DistributedFileSystem:与HDFS文件系统进行交互的API

P64 通过FileSystem API 读取数据

1、检索文件系统

public static FileSystem get(Configuration conf)

返回core-site.xml中配置的默认文件系统,若没有配置,使用本地文件系统

public static FileSystem get(URI uri,Configuration conf)

返回给定的URI指定的文件系统,若URI为空,返回默认文件系统

public static FileSystem get(URI uri,Configuration conf,String user)

作为给定用户访问文件系统

Configuration:封装了客户端或服务器的配置

如果确定获取本地文件系统,直接使用

public static LocalFileSystem getLocal(Configuration conf)

2、获取文件输入流

public FSDataInputStream open(Path f) - 默认缓冲区大小4KB

public abstract FSDataInputStream open(Path f,int bufferSize) 

FSDataInputStream  - 这个类继承了java.io.DataInputStream接口,支持随机访问,可以从流的任意位置读取数据

实例:

P68 通过FileSystem API 写入数据

public FSDataOutputStream create(Path f)

public FSDataOutputStream append(Path f)

例子:将本地文件复制到hadoop文件系统

P72 查询文件系统

时间: 2024-10-07 23:53:16

[hadoop读书笔记] 第三章 HDFS的相关文章

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

Hadoop读书笔记(四)HDFS体系结构

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 Hadoop读书笔记(三)Java API操作HDFS:http://blog.csdn.net/caicongyang/article/details/41290955

MySQL Cookbook读书笔记第三章

1,查询指定列/从指定列中查询 若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后): 查询显示用户所关注的列: 2,指定查询行 使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录: 使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串. where使用操作符and可以查询多个条件: 条件并集: 3,格式化显示查询结果 当查询语句中没有重命名列名,

Linux内核设计与实现读书笔记——第三章

Linux内核设计与实现读书笔记——第三章 进程管理 20135111李光豫 3.1进程 1.进程即处于执行期的程序,并不局限于一个可执行的代码,是处于执行期程序以及其相关资源的总称. 2.Linux系统中,对于进程和线程并没有明显的区分,线程是一种特殊的进程. 3.Linux系统中,常用fork()进程创建子进程.调用fork()进程的成之为其子进程的父进程. 4.fork()继承实际上由clone()系统调用实现.最后通过exit()退出执行. 3.2任务描述符及任务结构 1.任务队列实质上

Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Action 演示模式 3.2 Android Studio使用进阶 操作与导航 快速重构 代码模板 内置模板 自定义代码注释模板 代码分析 在Andr

Hadoop读书笔记(二)HDFS的shell操作

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 1.shell操作 1.1所有的HDFS shell操作命名可以通过hadoop fs获取: [[email protected] ~]# hadoop fs Usage: java FsShell [-ls <path>] [-lsr <path>] [-du <path>] [-dus <path>

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

&lt;java并发编程的艺术&gt;读书笔记-第三章java内存模型(一)

一概述 本文属于<java并发编程的艺术>读书笔记系列,继续第三章java内存模型. 二重排序 2.1数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置. 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量. 读后写 a = b;b = 1; 读一个变量之后,再写这个变量. 上面三种情况,只要重排序两个操作的执行顺序,

Python读书笔记-第三章,四章

第三章 1. 字符串格式化 >>>format="hello %s  %s world" >>>values=('world','hot') >>>print format % values  #也可以接收单个字符串也 也可以用%f %d这类的类似与c的printf 匹配多个参数的时候应该用圆括号 >>>'%s plus %s equals %s'  %(1,1,2) >>>'%010.2f' %