《Scala机器学习》一一3.6 运行Hadoop的HDFS

简介: 本节书摘来自华章出版社《Scala机器学习》一 书中的第3章,第3.6节,作者:[美] 亚历克斯·科兹洛夫(Alex Kozlov)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 运行Hadoop的HDFS
没有分布式存储的分布式框架是不完整的。HDFS是其中的一种分布式存储。即使Spark在本地模式下运行,它仍然可以在后台使用分布式文件系统。与Spark将计算任务分解成子任务一样,HDFS也会将文件分成块,并将它们存储在集群上。为了实现高可用性(High Availability,HA),HDFS会为每个块存储多个副本,副本数称为复制级别,默认为三个(见图3-5)。
image

图3-5 HDFS架构。每个块存储在三个(复制级别)单独的位置
Namenode通过记录块位置以及其他元数据(例如所有者、文件权限和块大小)来管理特定文件的HDFS存储。辅助Namenode是一个轻微的misnomer:它的功能是将元数据的修改和编辑合并到fsimage中,或作为元数据的数据库文件。合并是需要的,因为更实用的方式是将fsimage的修改写入单独的文件,而不是把每个修改直接保存到fsimage的磁盘映像中(除非是保存内存中相应的改变)。辅助Namenode不能作为Namenode的第二个副本。可通过平衡器来移动块,使整个服务器上维持大致相等的磁盘使用率。如果有足够的可用空间并且客户端不在集群上运行,则按随机的方式来分配节点的初始块。最后,为了获取元数据和块位置,可在客户端与Namenode之间进行通信,但在此之后,直接会从节点的副本读取或写入数据。客户端是唯一可在HDFS集群外运行的组件,但它需要与集群中所有节点的网络连接。
如果任何节点死机或断开与网络的连接,Namenode会通知这种变化,因为它一直通过心跳来保持与节点之间的联系。如果节点在10分钟(默认情况)内没有重新连接到Namenode,为了得到节点上丢失块所需的复制级别,它会复制块。Namenode中有一个单独的块扫描器线程,它通过扫描块来得到可能的位旋转(每个块维护的校验和),并将删除损坏和孤立的块:
1.要在计算机上启动HDFS(复制级别为1),可先从http://hadoop.apache.org下载Hadoop的发行版本。
image
image
image

2.要获取最小的HDFS配置,请按如下方式修改core-site.xml和hdfs-site.xml文件:
image
image

这将会把Hadoop HDFS元数据和数据目录放在/tmp/hadoop- $ USER目录。为了能更永久保存,可添加dfs.namenode.name.dir、dfs.namenode.edits.dir和dfs.datanode.data.dir参数,但这里暂时不介绍这些内容。为了得到定制的发行版,可从http://archive.cloudera.com/cdh下载一个Cloudera版本。
3.首先需要格式化一个空的元数据:
image

4.然后启动与namenode、secondarynamenode和datanode相关的Java进程(通常打开三个不同的命令行窗口来查看日志,但在生产环境中,它们通常是守护进程):
image

5.下面将创建一个HDFS文件:
image

6.当然,在这种特殊情况下,文件只存储在一个节点上,这个节点与运行在本地主机上的datanode是同一个节点。在作者的机器上会有如下结果:
image

7.可通过http://localhost:50070来访问Namenode UI,并且会显示主机的信息,包括HDFS的使用情况和DataNode的列表,以及HDFS主节点的从节点,具体信息如下图所示:
image

图3-6 HDFS NameNode UI的截图
上图显示了单节点部署中HDFS Namenode的HTTP UI(通常可通过http://: 50070来访问)。通过Utilities菜单中的Browse可浏览和下载HDFS文件。增加节点的方法为:在不同节点上启动DataNode,并将参数fs.defaultFS = : 8020指向Namenode。辅助Namenode HTTP UI通常位于http:: 50090。
Scala/Spark默认使用本地文件系统。但是,如果core-site/xml文件在类路径上或放在$ SPARK_HOME/conf目录中,Spark将使用HDFS作为默认值。

相关文章
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
195 6
|
2月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
72 3
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
57 4
|
2月前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
60 3
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
119 3
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
53 2
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
43 2
|
2月前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
46 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
51 0