Hadoop初识,分布式文件系统HDFS

1Hadoop核心组件与应用

HDFS:分布式海量数据存储功能

Yarn:提供资源调度与任务管理功能

资源调度:根据申请的计算任务,合理分配集群中的计算节点

任务管理:任务在执行过程中,负责过程监控,状态反馈,任务在调度等工作

MapReduce:分布式并行编程模型和计算框架

Hive:提供数据摘要和查询的数据仓

Streaming:解决非Java开发人员使用Hadoop平台语言的问题

Hbase:基于列式存储模型的分布式数据库

Zookeeper:分布式协同服务

2Hadoop生态圈

3Ambari平台环境介绍

      1) Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。同类产品为Cloudera Manager的CDH

        2)优点:

                Web安装图形界面操作便捷

                Hadoop家族各组件支持全面

                社区资源比较丰富

        3)缺点

        Bug较多:安装过程中,莫名其妙的出现错误。系统运维过程中偶尔出错。以上两种情况重启就正常。

        安装速度与网络质量关系较大,往往时间较长。

        在合理避免大坑的情况下,3小时内可以搭建一个基本版的集群。

分布式文件系统HDFS

 1特点介绍

 a高容错和高可用性,硬件错误是常态而不是异常

 b流式数据访问

c弹性存储,支持大规模数据集

d简单一致性模型

e移动计算而非移动数据

f协议和接口多样性

h 多样的数据管理功能

2、应用场景

  • 各大电信运营商
  • 中大型互联网公司,如BAT、京东、乐视、美团等
  • 金融银行保险类公司
  • 各大云平台底层存储平台
  • 其他本地系统无法承载存储能力的应用

 

 

  • HDFS架构设计(理解为主)

1HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。

2 HDFS 组件角色

        2.1NameNode(简称NN)HDFS元数据管理者,管理NameSpace.   NameSpace 或其本身属性的任何更改都由NameNode记录

        2.2 DataNode(简称DN)   DataNode是文件系统的工作节点  。 通过心跳机制定期向NameNode发送他们的存储块的列表

        2.3Client          

  • 客户端Client代表用户与NameNode或者DataNode交互来访问整个文件系统的对象。

开发人员面向Client API来编程实现,对NameNode、DataNode来说透明无感

3、HDFS架构设计

3.1基本架构

 

 HDFS是一个主从式(Master/Slave)的体系结构。HDFS集群中有一个NameNode和一些DataNodes,

NameNode管理文件的元数据,DataNode存储实际的数据。从用户的角度看,就像操作传统的文件系统一样,可以通过目录路径对文件执行创建、读取、删除操作。客户端联系NameNode来获取元数据信息,而真正的文件I/O是直接和DataNode进行交互的

3.2读文件流程

 

详细步骤:

  • 第一步:Client向NameNode发送数据请求后,寻找数据对应的数据块的位置信息。
  • 第二步:NameNode返回文件对应的数据块元数据信息,如所属机器、数据块的block_id、数据块的先后顺序等。
  • 第三步:由Client与DataNode直接通信,读取各个block数据块的信息。过程为并行读取,由客户端合并数据。

写文件流程

 

详细步骤:

  • 第一步:
  1. Client向NameNode发送写数据请求后,寻找可以写入的数据块block信息的机器位置。
  2. 若文件过大,写入可能会分成很多block数据块,实际上是通过一个block一个block的申请。
  3. 若副本为3,则每次请求后返回一个block的对应的3个副本的block的存放位置。
  • 第二步:
  1. Client获取到对应的block数据块所处的DataNode节点位置后,Client开始写操作。
  2. Client先写入第一个DataNode,以数据包package的方式逐个发送和接收。如64K大小的package包大小来发送和接收。
  3. 存在多个副本时,package包的写入是依次进行的。写入到第一个DataNode后,第一个向第二个DataNode传输。第二个写完后,由第二个向第三个DataNode传输package。以此类推。
  4. 写完一个block数据块后,如果还有则反复进行第一步和第二步。
  • 第三步:
  1. 待所有的数据块block均写完后,Client接收到全部写完的ack答复,告诉NameNode数据已写完,Client关闭socket流。
  2. DataNode也会向NameNode报告新增block数据块的信息。

 

 

三 HDFS高可用性措施

1、冗余备份

2、跨机架副本存放

 3、心跳检测

4、数据完整性检测

5、安全模式

6、核心文件备份

7、空间回收

HDFS shell 应用

 2常用命令

    1. 查看hdfs dfs下的所有可用命令:   hads dfs

                         2 查看hdfs 根目录下的文件列表: hdfs dfs -ls/

                        3   查看某文本文件的内容: hdfs dfs -cat /tmp/index.html

                        4  在hdfs 中创建目录     hdfs dfs -mkdif /tmp/目录

                         5删除     hdfs  dfs -rm -r /目录

                        6 将hdfs 中文件下载到本地文件的当前路径:   hdfs dfs -copyTolacal /文件

                         7从本地上传文件到hdfs : hdfs dfs -copyFromLocal  文件 /地址

                        8 查看压缩文本文件的格式: hdfs dfs -text /tmp/tianliang/index.html.gz | more

                          9 查看hdfs 中目录文件站磁盘大小   : hdfs dfs -du -h /文件

                        10创建文件  :hdfs dfs -touchz /文件

                         11查看命令帮助信息,如cp   : hdfs dfs -usage cp

3  hdfs dfsadmin

hdfs dfsadmin是集群管理员的常用命令,用来对HDFS集群的整体运行进行管理和运维。常用的管理命令如下

        1查看可用的管理命令:hdfs dfsadmin -help

         2报告文件系统的基本信息和统计信息 :hdfs dfsadmin -report

        3设置目录配额

    1. 设置目录配额,目录配额是一个长整型数,限定指定目录下的名字个数:
    2. hdfs dfsadmin -setQuota <quota> <dirname>……<dirname>
    3. 比如:hdfs dfsadmin -setQuota 10 /tmp/tianliangedu

                4安全模式管理

    1. hdfs dfsadmin -safemode get   ##返回安全模式是否开启的信息,返回Safe mode is OFF/OPEN
    2. hdfs dfsadmin -safemode enter ##进入安全模式
    3. hdfs dfsadmin -safemode leave ##强制NameNode退出安全模式
    4. hdfs dfsadmin -safemode wait  ##等待,一直到安全模式结束

 HDFS JAVA  API应用 

1

 2操作实现

1搭建Maven

2Pom依赖引用

<dependencies>
	      <!-- 引入hadoop-cli-2.7.4依赖 -->
	      <dependency>
	         <groupId>org.apache.hadoop</groupId>
	         <artifactId>hadoop-client</artifactId>
	        <version>2.7.4</version>
	        <scope>provided</scope>
	      </dependency>



  <build>
	      <finalName>TlHadoopCore</finalName>
	      <plugins>
	         <plugin>
	           <artifactId>maven-compiler-plugin</artifactId>
	           <version>2.3.2</version>
	           <configuration>
	              <source>1.8</source>
	              <target>1.8</target>
	              <encoding>UTF-8</encoding>
	           </configuration>
	        </plugin>
	        <plugin>
	           <artifactId>maven-assembly-plugin</artifactId>
	           <configuration>
	              <descriptorRefs>
	                 <descriptorRef>jar-with-dependencies</descriptorRef>
	              </descriptorRefs>
	<archive>
							<manifest>
								<mainClass>com.tl.job009.hdfs.HdfsFileRead</mainClass>
							</manifest>
					</archive>
	           </configuration>
	           <executions>
	              <execution>
	                 <id>make-assembly</id>
	                 <phase>package</phase>
	                 <goals>
	                    <goal>assembly</goal>
	                 </goals>
	              </execution>
	           </executions>
	        </plugin>
	      </plugins>
	   </build>

3编码实现

        1定义读取文件的路径

        2创建hdfs配置

        3打开创建FileSystem 对hdfs的抽象

        4创建一个Path  对文件的引用

        5FileSystem 打开输入流

         6 将输入流的字节数组都读取出来

              7将字节数组都转化成字符串输出

4本地运行

5打包上传

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值