
如果您要自己设计分布式文件系统,那会有什么想法?
看照片吧.

如图所示,四个文件,七个机器,多个存储副本,每个文件除了自身之外,还有两个文件副本存储在不同的机器上,如果前两个机器挂起,则不会影响我们的数据
但这将有很大的缺点. 无论文件多大,它都存储在节点上. 在进行数据处理时,很难执行并行处理. 那么什么是并行处理?假设文件为1TB,如果它不支持拆分,则意味着必须一次处理1TB的数据. 如此大量的数据处理起来非常缓慢!节点可能会成为网络的瓶颈,使其难以处理大数据. 而且,存储负载难以平衡,每个节点的利用率很低.
hadoop使用hdfs文件处理系统. hdfs根据每个文件进行拆分,并拆分为多个块(例如,每个块128MB),然后将每个块存储在节点上并存储多个副本. 以这种方式存储的数据具有很高的可用性. 挂起同一台计算机,数据不受影响,然后每个块的大小相同. 如果太长,则只有128MB. 这样,可以平衡每台机器的负载. 这样会更好,并且上图中的节点上将不会有像1TB这样的大数据,因此可以很好地保证负载平衡,每个块只有128MB. 我们可以在处理时进行并行处理,从而提高计算能力,无论您的数据有多大,每个块大小都会分成128MB,这是提高数据处理速度的好方法!
hadoop实现了分布式文件系统,hadoop分布式文件系统,简称hdfs.
Google提供的gfs论文. hdfs于2003年发布,是gfs的克隆.
HDFS是一个非常大的分布式文件系统. 通常,我们的计算机具有文件系统,无论是mac还是win. 它以层次结构,目录和树的方式存储,但是独立文件系统的存储受到限制. 对于分布式系统,文件以分布式方式存储在系统上. 如果文件系统的存储空间不足,则直接将计算机添加到hdfs中以扩展容量,从而可以满足大数据处理的需求.
HDFS可以在极其普通和廉价的计算机(即普通PC机)上运行,而这些非常普通的PC机形成一个分布式集群.
HDFS易于扩展,就像您的存储空间不足,直接添加计算机一样,简单又粗糙!
HDFS可以提供具有良好技能的文件存储服务. 为什么这样说作为便宜的普通机器,这种故障率比较高!如果文件存储在群集中的廉价计算机上,则如果硬件损坏,则意味着数据已丢失. 绝对不可能. hdfs是如何做到的?他首先根据块大小将文件拆分,例如将140MB的数据分成128MB和12MB,并将其以多份副本的形式存储在集群的多个节点上,然后您的一台机器坏了,没关系,其他节点仍然完好无损,因此您可以提供良好的文件存储服务.
官方介绍: HDFS具有主/从体系结构. HDFS群集由单个NameNode和管理文件系统名称空间并控制客户端对文件的访问的主服务器组成. 此外,还有许多数据节点,通常是集群中每个节点一个,用于管理与它们所运行的节点相连的存储. HDFS公开了文件系统名称空间,并允许用户数据存储在文件中. 在内部,文件被分成一个或多个块,这些块存储在一组DataNode中. NameNode执行文件系统名称空间操作,例如打开,关闭和重命名文件和目录. 它还确定块到DataNode的映射. DataNode负责处理来自文件系统客户端的读写请求. DataNode还会根据NameNode的指令执行块创建,删除和复制.

NameNode和DataNode是旨在在商用机器上运行的软件. 这些机器通常运行GNU / Linux操作系统(OS). HDFS是使用Java语言构建的;任何支持Java的机器都可以运行NameNode或DataNode软件. 使用高度可移植的Java语言意味着HDFS可以部署在各种各样的机器上. 典型的部署有专用的计算机,该计算机仅运行NameNode软件. 集群中的每台其他计算机都运行DataNode软件的一个实例. 该体系结构并不排除在同一台计算机上运行多个DataNode,而是在实际部署中很少出现这种情况.
1个主节点(NameNode / NN)+ N个从属节点(DataNode / DN)(HDFS / YARN / HBase)
1个文件将被分成多个块
(块大小: 128MB
130MB ==> 2个块: 128MB和2MB)
主控(NameNode / NN):
1. 负责客户请求的响应
2. 负责元数据的管理(文件名,复制系数,存储块的DataNode)
从站(DataNode / DN):
1. 存储与用户文件相对应的数据块
2. 定期将心跳信息发送到NameNode,报告自身以及所有阻止信息,运行状况,像这样

NameNode知道您的情况. 如果此DN出现问题,则会输入以下文件,并且不会保存NN
存储在此节点上
典型部署中有一台专用计算机,仅运行NameNode软件. 集群中的每台其他计算机都运行DataNode软件的一个实例. 该体系结构并不排除在同一台计算机上运行多个DataNode,而是在实际部署中很少出现这种情况.
建议: 在实际生产中,NN和DN部署在不同的节点上(对于个人学习,机器可以同时具有NN和DN)
官方介绍: HDFS支持传统的分层文件组织. 用户或应用程序可以创建目录并将文件存储在这些目录中. 文件系统名称空间层次结构与大多数其他现有文件系统相似. 可以创建和删除文件,将文件从一个目录移动到另一个目录或重命名文件.
NameNode维护文件系统名称空间. 对文件系统名称空间或其属性的任何更改均由NameNode记录. 应用程序可以指定HDFS应该维护的文件副本的数量. 文件的副本数称为该文件的复制因子. 此信息由NameNode存储.
HDFS旨在在大型群集中的计算机之间可靠地存储非常大的文件. 它将每个文件存储为一系列块. 复制文件的块是为了容错. 每个文件的块大小和复制因子都是可配置的.
文件中除最后一个块外的所有块均大小相同.
应用程序可以指定文件的副本数. 复制因子可以在文件创建时指定,以后可以更改. HDFS中的文件只能写入一次(追加和截断除外),并且在任何时候都只能具有一个写入器.
NameNode做出所有有关块复制的决定. 它定期从群集中的每个DataNode接收心跳信号和Blockreport. 收到心跳信号表示DataNode正常运行. Blockreport报告包含DataNode上所有块的列表.

HDFS复制存储策略

我们知道一个文件将被分成许多块,每个块将被保存为多个副本. 当然,默认值为3. 那么每个块如何存储?根据hdfs策略,对于第一个副本,图中的表示客户端所在的节点. 如果在更改后的节点上提交数据,则第一个副本存储在该节点上,第二个副本存储在另一台计算机上. 在机架上的任何节点上,第三个副本都与第二个副本存储在同一机架上的另一个节点上. 简而言之,第一个放置在提交数据的节点上,其他两个放置在与第一个副本不同的机架上的不同DN上. 如果只有一个机架,则会将其随机放置在机架上. 如果您有大量块java 分布式文件存储,则将其随机放置在不同机架中的不同节点上. 划分机架仍然是有益的,一个机架坏了,其他机架正常工作. 至少两个或更多机架!
安装Java
Java下载URL: Java SE Development Kit 8
下载到您指定的目录后解压缩
$ tar -zxvf jdk-7u79-linux-x64.tar.gz -C〜/您指定的目录/
查看Java路径
$ echo $ JAVA_HOME
/ home / xxx / xxx / java-8-oracle
添加环境变量的路径
$ sudo vim / etc / profile
最后添加
export JAVA_HOME = / home / xxx / xxx / java-8-oracle

export PATH = $ JAVA_HOME / bin: PATH
保存并退出并生效
$ source / etc / profile
验证Java安装成功
$ java -version
安装ssh
$ sudo apt-get install ssh
在安装ssh之后,我们需要配置无密码登录,因为我们的ND和DN进程需要相互通信,因此我们需要配置无密码登录,以便它们之间的通信不需要我们的手册. 干预java 分布式文件存储,无需密码即可结识.
$ ssh-keygen -t rsa
一路输入
然后在用户目录中查看.ssh文件夹
$ ls -la
然后进入.ssh文件夹并查看两个文件
id_rsa id_rsa.pub
再次输入
$ cp〜/ .ssh / id_rsa.pub〜/ .ssh / authorized_keys
然后测试ssh并连接到本地
$ ssh localhost
没有异常表明ssh测试成功
下载并安装hadoop
使用版本: hadoop-2.6.0-cdh5.7.0
下载地址(/ cdh5 / cdh / 5的索引)

下载后,解压缩到您指定的目录
然后在hadoop文件下的etc目录下输入hadoop文件夹,

使用vim或gedit打开hadoop-env.sh,然后找到导出JAVA_HOME
设置Java路径(java路径: $ echo $ JAVA_HOME)

我们正在配置伪分布式环境,因此我们还必须设置hadoop的core-site.xml和hdfs-site.xml
在core-site.xml中配置以下设置
<property>
<name>fs.defaultFS</name>
<value>hdfs://你的机器名称:8020</value>
</property>
下面的配置是因为我们默认的文件系统存储的地方是在临时文件夹下面,
而临时文件夹在linux中每次重启都会被删除的,所以我们需要添加下面的属性,
这个目录一定要设置,否则每次重启数据又没了,配置好后还要去
/home/你的用户名/你安装hadoop的目录/ 下面新建临时文件tmp(mkdir tmp)
<property>
<name>hadoop.tmp.dir</name>
<value>/home/你的用户名/你安装hadoop的目录/tmp</value>
</property>

在hdfs-site.xml中配置以下设置
这里的value是用来设置副本数量,我们只有一台机器,副本只设置一个,所有value=1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

首先格式化文件系统(仅第一次,不要每次都执行,格式化会删除数据)
格式化文件系统是一项客户端操作,因此请转到hadoop目录下的bin目录,打开终端并输入以下代码来格式化文件系统
$ ./hadoop namenode -format#或直接在hadoop目录中执行bin / hdfs namenode -format
然后进入hadoop文件目录下的sbin目录以启动程序
$ ./start-dfs.sh
然后检查它是否通过jps正常启动
$ jps
如果是NameNode,DataNode,SecondaryNameNode
所有操作均正常启动,则表示启动成功. 如果缺少一两个,则配置一定是错误的. 此时检查日志

使用vim或gedit打开日志. 请注意将后缀.out更改为.log以成功打开它
还有一个浏览器可以检查启动情况
在浏览器URL框中输入您的计算机名称: 50070

如图所示,活动表示活动状态.

容易出错
有时,在启动时检查jps时发现缺少一个节点. 这时,当您打开日志检查时,会发现类似以下提示:
WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: / data3 / cdh中不兼容的clusterID: namenode clusterID = CID-c61b3952-cf9d-47d4-97df-ee86aa63cdf4; datanode clusterID = CID-b0cf57dd-646c-4c7a-9654-9568305f2ac1
java.io.IOException: 所有指定目录加载失败.
at. . . . . . . . . . . . . . . . . . . . . . . . . . .
在日志中,这是因为datanode的clusterID和namenode的clusterID不匹配.
已解决:
根据日志中报告的路径,转到根目录下data1中的cdh(当前文件夹下还有一个VERSION文件),然后用每个数据文件夹替换日志信息中指示的namenode地址副本clusterID可以使用in,其他节点也应根据每个hadoop日志中报告的错误信息替换ID. 如果在第一次启动时报告了错误,则可以直接删除tmp文件并重新构建并重新启动.
原因:
此问题的原因: 首次格式化dfs之后,hadoop已启动并使用,然后重新执行了格式化命令(bin / hdfs namenode -format),然后将重新生成namenode的clusterID ,则datanode的clusterID保持不变.
还要输入sbin并执行停止过程
$ ./stop-dfs.sh
首先设置Hadoop运行所需的环境变量,然后编辑〜/ .bashrc文件并添加我们的环境变量
打开bashrc文件
$ vim〜/ .bashrc
写下以下内容
#请注意,这里的路径与您的hadoop文件最后一次解压缩和存储的位置相同
export HADOOP_HOME = / home / chandler / Download / hadoop / hadoop-2.6.0-cdh5.7.0
export HADOOP_INSTALL = $ HADOOP_HOME
导出HADOOP_MAPRED_HOME = $ HADOOP_HOME
导出HADOOP_COMMON_HOME = $ HADOOP_HOME
导出HADOOP_HDFS_HOME = $ HADOOP_HOME
导出YARN_HOME = $ HADOOP_HOME
导出HADOOP_COMMON_LIB_NATIVE_DIR = $ HADOOP_HOME / lib / native
export PATH = $ PATH: $ HADOOP_HOME / sbin: $ HADOOP_HOME / bin
#END
源使更改生效
$ source〜/ .bashrc
--------------------------------------------------- ------------------------------------------------- <
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-235432-1.html
上高中学文的
小米逆天了