Hadoop高可用

匿名 (未验证) 提交于 2019-12-02 23:52:01

大数据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的datanode3310台时副本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步)

  1. DistributedFileSystemcreate方法创建新文件。

  1. DistributedFileSystemRPCnamenodeblocksnamenodenamenodeIO

  1. 前两步结束后,会返回FSDataOutputStream FSDataOutputStreamDFSOutputStreamDFSOutputStreamnamenodedatanodeDFSOutputStreamDFSOutputStreampacketdata quene(数据队列)。

  1. DataStreamerdata quenenamenodeblockdatanode33datanodepipelineDataStreamerpacketdatanodedatanodepacketdatanode

  1. DFSOutputStreamack quenepacketdatanodepipelinedatanodeack quenepacket

datanode

ack quenepacket同步data quene

datanodeblock

写到剩下datanode

datanode

  1. close

  1. 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

  1. FileSystemopenDistributedFileSystem
  2. DistributedFileSystemrpcblocklocationsblocklocationslocationshadoop
  3. 前两步会返回一个FSDataInputStreamDFSInputStreamDFSInputStreamdatanodenamenodereadDFSInputStreamdatanode
  4. datanode
  5. datanode
  6. blockDFSInputStreamnamenodeblocklocations
  7. DFSInputStreamdatanodeblockdatanode,datanodeblocksdatanodeDFSInputStreamblockblock,namenodeDFSInputStreamdatanodeblock
  8. 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。

3oevedits

(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>

  1. 停止集群 删除data
  2. hdfs namenode -format
  3. start-dfs.sh
  4. ȥչʾ

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

思考2NNname1和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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!