大数据Hadoop
HDFS
一 HDFS
1.1 概念
HDFS,全称:Hadoop Distributed File System,用于存储文件通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
1.2
1HDFSNameNodeDataNodeSecondary Namenode
2NameNode
3DataNode datanode
4Secondary NameNode用来HDFSHDFS
1.3HDFS 文件
HDFSblock( dfs.blocksize)hadoop2.x128M64M
HDFS块时间块时间,
10ms,而100MB/s,ʹ1%100MB。的128MB
块10ms*100*100M/s = 100M
HFDS命令行操作
1
bin/hadoop fs 具体命令
2)参数
bin/hadoop fs
[-appendToFile <localsrc> ... <dst>] |
3实操
1-help:
bin/hdfs dfs -help rm
2
hadoop fs -ls /
3-mkdirhdfs
(4-moveFromLocalhdfs
/hdfs
5追加一个文件到已经存在的文件末尾
/hdfs
6-cat
hadoop fs -cat /hdfs
7
8-chmod-chownlinux
9hdfshdfs
12
10-mvhdfs/
11-getcopyToLocalhdfs
12linuxhdfs/aaa/:log.1,Linux
hadoop fs -getmerge /aaa/log.* ./log.sum
合成到不同的目录:hadoop fs -getmerge /hdfs1 /hdfs2 /
13-putcopyFromLocal
14-rm
hadoop fs -rm -r /hdfs
(15-df
(16-du
17-count
hadoop fs -count /aaa/
(18-setrephdfs3
hadoop fs -setrep 3 / hdfs
这里设置namenode的datanode3台310台时副本10
HDFS客户端
3.1IDEA
{$MAVEN_HOME/conf/settings}
--> <localRepository>F:\m2\repository</localRepository> <!--Jar--> <!--JDK8--> <profiles> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles> |
3.1.0Maven
3.1.1Maven
<dependencies> <dependency> |
3.1.2IDEA
1HADOOP_HOME环境
2hadoopbin 、lib两个(如果IDEA
3java
publicclass publicstaticvoidthrows // 1 Configuration configuration = new // configuration.set("fs.defaultFS", "hdfs://bigdata111:9000"); FileSystem fileSystem = FileSystem.get(configuration); // // FileSystem fileSystem = FileSystem.get(new URI("hdfs://bigdata111:9000"),configuration, "itstar"); // 2 fileSystem.copyFromLocalFile(newnew // 3 fileSystem.close(); System.out.println("over"); } } |
4
eclipse时可能
客户端hdfsʱ情况hdfsapijvm:-DHADOOP_USER_NAME=itstar,itstar
3.2 通过APIHDFS
3.2.1HDFS获取文件系统
1)详细
hadoop ctrl + shitl + enter |
3.2.2HDFS上传
128MB,2 import org.apache.hadoop.conf.Configuration; HDFS Windows HDFS src -> dst "); } |
3.2.3HDFS下载
Configuration: HDFS Linux fs "); |
3.2.4HDFS目录创建
"); |
3.2.5HDFS夹删除
"); |
3.2.6HDFS名更改
@Test publicvoidthrows // 1 Configuration configuration = new FileSystem fs = FileSystem.get(new //2 fs.rename(newnew fs.close(); } |
3.2.7HDFS详情查看
查看长度块
" + fileStatus.getPath().getName()); " + fileStatus.getBlockSize()); " + fileStatus.getPermission()); ----------------"); |
3.2.8HDFS文件夹判断
:" + status.getPath().getName()); 目录:" + status.getPath().getName()); |
3.3 通过IO流操作HDFS
3.3.1HDFS上传
/Andy/Sogou.txt "); |
3.3.2HDFS下载
/** HDFS |
3.3.3 定位文件
1
/** |
2
/** /offset//() |
3
在window
rar即可
HDFS的数据
4.1
4.1.1
1namenodenamenode
2namenode
3blockdatanode
4namenode3datanodedn1、dn2、dn3。
5dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个建立完成
6dn1、dn2、dn3逐级应答客户端
7)客户端开始往dn1blockpacketdn1packetdn2,dn2传给dn3;dn1packet
8blocknamenodeblock3-7步)
- DistributedFileSystemcreate方法创建新文件。
- DistributedFileSystemRPCnamenodeblocksnamenodenamenodeIO
- 前两步结束后,会返回FSDataOutputStream FSDataOutputStreamDFSOutputStreamDFSOutputStreamnamenodedatanodeDFSOutputStreamDFSOutputStreampacketdata quene(数据队列)。
- DataStreamerdata quenenamenodeblockdatanode33datanodepipelineDataStreamerpacketdatanodedatanodepacketdatanode
- DFSOutputStreamack quenepacketdatanodepipelinedatanodeack quenepacket
datanode
ack quenepacket同步data quene
datanodeblock
写到剩下datanode
datanode
- close
- DataStreamerpipelineackackdatanode
writeblock(注:)blocksyncclosesync
4.1.2
在“彼此”是在――的
节点距离
例如d1机架r1中n1节点/d1/r1/n1这种
Distance(/d1/r1/n1, /d1/r1/n1)=0(同一节点)
Distance(/d1/r1/n1, /d1/r1/n2)=2(同一)
Distance(/d1/r1/n1, /d1/r3/n2)=4(同一数据)
Distance(/d1/r1/n1, /d2/r4/n2)=6(不同数据)
大家算每之间距离
4.1.3 机架(副本节点
1ip:
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/RackAwareness.html
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication
2)低版本Hadoop副本节点
第一个副本client。客户端
第副本副本位于不的
第副本和第副本,
3)高副本节点选择
第一个副client。客户端
第副副本位于,
第副,随机
4.2
1namenodenamenodedatanode
2datanode
3datanodepacket
4packet
- FileSystemopenDistributedFileSystem
- DistributedFileSystemrpcblocklocationsblocklocationslocationshadoop
- 前两步会返回一个FSDataInputStreamDFSInputStreamDFSInputStreamdatanodenamenodereadDFSInputStreamdatanode
- datanode
- datanode
- blockDFSInputStreamnamenodeblocklocations
- DFSInputStreamdatanodeblockdatanode,datanodeblocksdatanodeDFSInputStreamblockblock,namenodeDFSInputStreamdatanodeblock
- datanodenamenodeblockdatanodenamenodeblock locationnamenodehdfsdatanode
4.3
1debug
@Test public void writeFile() throws Exception{ // 1 Configuration configuration = new Configuration(); fs = FileSystem.get(configuration); // 2 Path path = new Path("F:\\date\\H.txt"); FSDataOutputStream fos = fs.create(path); // 3 fos.write("hello Andy".getBytes()); 刷新 fos.hflush(); fos.close(); } |
2)总结
写入client
client
NameNode
5.1 NameNode&Secondary NameNode工作机制
1namenode
1namenode格式化后创建fsimage和edits。如果(edits)(fsimage)
2
3namenode
4namenode
2Secondary NameNode工作
1Secondary NameNode询问namenodecheckpoint直接namenode
2Secondary NameNode请求checkpoint。
3namenode滚动edits
4Secondary NameNode
5Secondary NameNode编辑
6fsimage.chkpoint
7fsimage.chkpoint到namenode
8namenodefsimage.chkpoint重新fsimage
3chkpoint检查参数璁剧疆
1SecondaryNameNode每隔。
[hdfs-default.xml]
<property> </property> |
21SecondaryNameNode执行
<property> <description>操作动作次数</description> </property> <property> <description> 1分钟检查一次操作次数</description> </property> |
5.2
1
namenode在/opt/module/hadoop-2.8.4/data/dfs/name/current目录,NameNode
edits_0000000000000000000 fsimage_0000000000000000000.md5 seen_txid VERSION |
1FsimageHDFSHDFSidnode
2EditsHDFSedits
3seen_txidedits_
4Namenodefsimage00001seen_txideditsNamenodefsimageedits
2oivfsimage
1oiv和oev命令
[itstar@bigdata111 current]$ hdfs
2
hdfs oiv -p 文件
3
[itstar@bigdata111 current]$ pwd
/opt/module/hadoop-2.8.4/data/dfs/name/current
[itstar@bigdata111 current]$ hdfs oiv -p XML -i fsimage_0000000000000000316 -o /opt/fsimage.xml
[itstar@bigdata111 current]$ cat /opt/module/hadoop-2.8.4/fsimage.xml
将显示xmlIDEAxml。
3)oevedits
(1)基本语法
hdfs oev -p 文件-o 转换
-p : binary (), xml (XML),stats
-i editsxmlXML
-o
(2)案例实操
[itstar@bigdata111 current]$ cat /opt/module/hadoop-2.8.4/edits.xml
RECORD
OP_ADDOP_MKDIR
PATH
MTIME
ATIME
CLIENT_NAME
CLIENT_MACHINE
PERMISSION_STATUS
将显示xmlIDEAxml。
5.3
正常HDFS时也可以
1)滚动前提
[itstar@bigdata111 current]$ hdfs dfsadmin -rollEdits
举例:原文件名edits_inprogress_0000000000000000321
执行以下命令后
[root@bigdata111 current]# hdfs dfsadmin -rollEdits
Successfully rolled edit logs.
New segment starts at txid 323
2)镜像
Namenode启动
5.4 namenode版本
1namenode
在/opt/module/hadoop-2.8.4/data/dfs/name/current这个VERSION
namespaceID=1778616660
clusterID=CID-bc165781-d10a-46b2-9b6f-3beb1d988fe0
cTime=1552918200296
storageType=NAME_NODE
blockpoolID=BP-274621862-192.168.1.111-1552918200296
layoutVersion=-63
2)namenode
1namespaceIDHDFSNamenodeNamenodenamespaceIDblockpoolID
2clusterID集群id,
3cTime属性namenode存储0
4storageType属性说明namenode的
5blockpoolIDblock pool idblock poolNamespace(format)IDBlockPoolIDNNBlockPoolIDload
6layoutVersionHDFS
7storageID (ID)DataNodeID,
5.5NameNodeĿ¼
Secondary NameNode用来HDFSHDFS
在/opt/module/hadoop-2.8.4/data/dfs/namesecondary/current这个SecondaryNameNodeĿ¼
edits_0000000000000000001-0000000000000000002 fsimage_0000000000000000002 fsimage_0000000000000000002.md5 VERSION |
SecondaryNameNode的namesecondary/currentnamenodecurrent布局
好处namenode发生假设,可以SecondaryNameNode恢复。
方法SecondaryNameNode中namenode存储数据
方法使用-importCheckpoint选项namenodeSecondaryNameNode中数据namenodeĿ¼。
1(一)
模拟namenode采用namenode
1kill
2namenode存储的(/opt/module/hadoop-2.8.4/data/dfs/name)
rm -rf /opt/module/hadoop-2.8.4/data/dfs/name/*
NN,
然后hadoop-daemon.sh start namenodeNN,50070页面启动不了
3SecondaryNameNode中namenode存储
4namenode
sbin/hadoop-daemon.sh start namenode
2)案例(二)
模拟namenode采用二namenode
0hdfs-site.xml中value36001仅配置һ̨即可
<property> </property> <property> </property> |
1kill
2namenode存储的(/opt/module/hadoop-2.8.4/data/dfs/name)
rm -rf /opt/module/hadoop-2.8.4/data/dfs/name/*
3SecondaryNameNode不和Namenode在主机SecondaryNameNode存储Namenode存储
[itstar@bigdata111 dfs]$ pwd /opt/module/hadoop-2.8.4/data/dfs [itstar@bigdata111 dfs]$ ls |
(4)导入(等待ctrl+c结束掉)
bin/hdfs namenode -importCheckpoint
(5namenode
sbin/hadoop-daemon.sh start namenode
(6)如果提示in_use.lock
rm -rf /opt/module/hadoop-2.8.4/data/dfs/namesecondary/in_use.lock
5.6模式操作
1
Namenode映像fsimage载入edits中在fsimage,namenode开始datanodenamenodenamenode的
系统中namenode维护datanode中。ϵͳnamenode安全datanode向namenodenamenode了解多
如果满足“最小副本”,namenode30的副本99.9%副本默认dfs.replication.min=1。启动HDFSnamenode不会
2
д。启动
(1)bin/hdfs dfsadmin -safemode get (功能)
2)
3bin/hdfs dfsadmin -safemode leave (功能)
4bin/hdfs dfsadmin -safemode wait (功能)
3
模拟
1)
bin/hdfs dfsadmin -safemode enter
2)
编辑()
#!bin/bash hdfs dfsadmin -safemode wait hadoop fs -put /opt/BBB / |
3)再
bin/hdfs dfsadmin -safemode leave
5.7
1namenode的目录可以配置且增加
2
hdfs-site.xml
<property> <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value> </property> |
https://blog.csdn.net/qq_39657909/article/details/85553525 |
实验总结: 思考1如果在非Namenode节点、进行格式化( 是否和在NNname1和name2目录呢? 答:只要配置了以上得配置,在该节点下同样会生成name1name2 具体解释: 格式化做了哪些事情? 在NameNode元数据信息和操作日志,而这两个路径来自于配置文件,它们对应的属性分别是dfs.name.dir和dfs.name.edits.dir,同时,它们默认的路径均是/tmp/hadoop/dfs/nameNameNode格式化会在目录dfs.name.dir hadoop.tmp.dir 思考2非NNname1和name2,那么他和NN 答:有区别、NNedits_XXX,非NNfsimageNNfsimage,不会生成edits,更不会发生日志滚动。 |
DataNode工作机制
6.1 NameNodeDataNode工作
1一个datanode上的时间戳
2DataNode启动namenode1小时的namenode
3心跳3namenodedatanode复制。10datanode
4集群可以
6.2 完整性
1当DataNodeblockchecksum
2如果checksumblockblock
3clientDataNodeblock.
4datanodechecksum
6.3 掉线时限参数设置
datanodedatanodenamenodenamenodeHDFS10+30timeout
dfs.namenode.heartbeat.recheck-interval 5dfs.heartbeat.interval3
heartbeat.recheck.interval毫秒dfs.heartbeat.interval秒。
<property> </property> <property> </property> |
6.4 DataNode的目录
和namenode不同datanode阶段
1/opt/module/hadoop-2.8.4/data/dfs/data/current这
[itstar@bigdata111 current]$ cat VERSION
storageID=DS-1b998a1d-71a3-43d5-82dc-c0ff3294921b
clusterID=CID-1f2bf8d1-5ad2-4202-af1c-6713ab381175
cTime=0
datanodeUuid=970b2daf-63b8-4e17-a514-d81741392165
storageType=DATA_NODE
layoutVersion=-56
2)
1storageID:id
2clusterID集群id,
3cTime属性datanode存储0
4datanodeUuiddatanode
5storageType:
6layoutVersionHDFS
3)在/opt/module/hadoop-2.8.4/data/dfs/data/current/BP-97847618-192.168.10.102-1493726072779/current这个块
[itstar@bigdata111 current]$ cat VERSION
#Mon May 08 16:30:19 CST 2017
namespaceID=1933630176
cTime=0
blockpoolID=BP-97847618-192.168.10.102-1493726072779
layoutVersion=-56
4)
1namespaceID:datanode首次namenodenamenodestorageID对datanode但对datanode,namenodedatanode
2cTime属性datanode存储0
3blockpoolIDblock pool idblock poolNamespace(format)IDBlockPoolID