设为首页 收藏本站
查看: 1451|回复: 0

[经验分享] [hadoop读书笔记] 第三章 HDFS

[复制链接]

尚未签到

发表于 2017-12-17 10:10:52 | 显示全部楼层 |阅读模式
  P49
  当数据集的大小超过一台计算机存储能力时,就有必要对数据集分区(partition)并将分区存储到若干台独立的计算机上。
  管理网络中跨多台计算机存储的系统就叫分布式文件系统  Distributed FileSystem
  而基于Hadoop构建的DFS就称之为HDFS。
  P49-50
  HDFS的设计思路:以流数据访问模式来存储超大文件,运行在商用硬件集群上。
DSC0000.png

DSC0001.png

  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文件系统接口,有如下的具体实现:
DSC0002.png

  使用URI可用于Hadoop与文件系统进行实时交互,如:
  列出本地文件系统根目录下的文件:hadoop fs -ls file:///
DSC0003.png

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

  或
DSC0005.png

  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接口,支持随机访问,可以从流的任意位置读取数据
  实例:
DSC0006.png

  P68 通过FileSystem API 写入数据
  public FSDataOutputStream create(Path f)
  public FSDataOutputStream append(Path f)
  例子:将本地文件复制到hadoop文件系统
DSC0007.png

  P72 查询文件系统
DSC0008.png

  P83
  Apache Flume:将大规模流数据导入HDFS的工具
  典型应用:日志数据分析
  Flume支持包含tail,通过管道的方式将本地文件写入Flume中,以及syslog和apcache log4j的系统
  Apache sqoop:为了将数据从结构化存储设备(RDBMS)批量导入HDFS中设计的
  用于将白天生产的数据库中的数据导入Hive仓库中进行分析
  distcp:Hadoop分布式复制程序,用于在hadoop文件系统之间复制大量数据,作为MR作业来实现的。
  复制数据命令行:hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar
  在namenode的bar/foo文件下存储复制的数据
  更新数据:hadoop distcp -update hadfs://namenode1/foo hdfs://namenode2/bar/foo
  注意,使用以上命令两个集群的HDFS版本必须相同,如果不同,则使用基于HTTp协议的HFTP文件系统读取源文件系统数据。
  且这个作业必须运行在目标集群上,实现HDFS RPC版本的兼容
  命令行:hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar
  或直接使用webhdfs协议也可以:
  hadoop distcp webhdfs://namenode1:50070/foo webhdfs://namenode2:50070/bar
  P86 Hadoop 存档工具
  为什么需要?
  Hadopp文件按块存储,每个块的元数据存储在namenode的内存中,如果小文件过多,则大量的小文件会耗尽namenode的大量内存。
  Hadoop存档文件/HAR文件是一个高效的文件存档工具,在减少namenode内存的同时,允许对文件进行透明的访问。
  对一系列文件进行存档命令:hadoop archive -archiveName files.har /my/files(被打包目录) /my(存档文件输出目录)
DSC0009.png

  删除har文件,要用递归的形式进行删除,因为基于文件系统来说,HAR文件是一个目录
  hadoop fs -rmr /my/files.har

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424952-1-1.html 上篇帖子: Hadoop文件解压缩 下篇帖子: 马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表