hadoop新手,只需设置一个3 debian服务器集群即可。
我在研究hadoop的最佳实践时遇到了:jbod没有raid文件系统:ext3,ext4,xfs-没有你在zfs和btrfs中看到的那些花哨的东西
所以我提出这些问题。。。
在我读到的每一篇文章中,jbod都比hadoop中的raid好,而且最好的文件系统是xfs、ext3和ext4。除了文件系统的东西这完全有道理为什么这些是最好的。。。如何实现这个jbod?你会看到我的困惑,如果你做谷歌搜索你自己,jbod暗指一个线性附件或组合只是一堆磁盘有点像一个逻辑卷,至少有人这样解释,但hadoop似乎想要一个jbod不结合。没有人会在那上面扩张。。。
问题1)在hadoop世界中,jbod是什么意思?您如何实现它?
问题2)将每个磁盘安装到不同的目录就这么简单吗?
问题3)这是否意味着hadoop在jbod上运行得最好,在jbod上,每个磁盘只需挂载到不同的目录?
问题4)然后将hadoop指向那些data.dirs?
问题5)我看到jbods有两种方式,要么每个磁盘单独挂载,要么是磁盘的线性连接,这可以通过mdadm——线性模式来实现,我打赌lvm也可以,所以我不认为这有什么大不了的。。。如果是这样的话,可以使用mdadm--linear或lvm,因为人们所指的jbod是这个concat磁盘,那么对于hadoop来说,哪个是“jbod”或linear concat磁盘的最佳方式呢?
这是离题的,但是有人能验证这是否也是正确的吗?使用cow、即写即复制(copy-on-write)的文件系统(如zfs和btrfs)只会减慢hadoop的速度,但这不仅说明cow实现是hadoop的浪费。
问题6)为什么cow和raid之类的东西浪费了hadoop?我认为你的系统崩溃了,你用if的cowness来恢复它,当你恢复你的系统时,hdfs已经有太多的变化,它可能会认为这台机器有故障,最好从头开始重新连接它(把它作为一个新的datanode提出来)。。。或者hadoop系统将如何看到旧的datanode?我的猜测是,它不会认为它的旧的或新的,甚至一个数据节点,它只会认为它是垃圾。。。idk。。。
问题7)如果hadoop看到一个datanode从集群上掉下来,然后datanode带着稍微旧一点的数据重新联机,会发生什么?数据有多旧的程度???这个主题怎么样?
重新解答问题1至4
我刚刚意识到我的问题很简单,但我很难解释它,我不得不把它分成4个问题,我仍然没有得到我想要的答案,从什么听起来像是非常聪明的人,所以我必须重新问不同的问题。。
在纸上我可以很容易地或与绘图。。。我再试着用词。。
如果对我在jbod问题中的问题感到困惑。。。
只是想知道在hadoop世界里每个人都在说什么样的jbod才是真正的
jbods与hadoop的定义不同,我想知道实现hadoop的最佳方法是在jbods的concat上(sda+sdb+sdc+sdd)还是只保留磁盘(sda、sdb、sdc、sdd)
我认为下面的图示说明了我的要求
(jbod方法1)
正常世界:jbod是一个磁盘集合-如果你使用hadoop,你会将data.dir(hdfs虚拟站点)覆盖到这个磁盘集合中的一个目录上,所有磁盘也会显示为1。。。因此,如果将sda、sdb和sdc作为节点中的数据磁盘,则会使它们显示为某种实体1(使用主板硬件或mdadm或lvm),这是sda、sdb和sdc的线性连接。然后将这个entity1装载到unix名称空间中的一个文件夹中,如/mnt/jbod/,然后安装hadoop在其中运行。
文本摘要:如果磁盘1、磁盘2和磁盘3分别为100gb、200gb和300gb,那么这个jbod将是600gb,来自这个节点的hadoop将获得600gb的容量 * TEXTO-GRAPHICAL OF LINEAR CONCAT OF DISKS BEING A JBOD: * disk1 2 and 3 used for datanode for hadoop * disk1 is sda 100gb * disk2 is sdb 200gb * disk3 is sdc 300gb * sda + sdb + sdc = jbod of name entity1 * JBOD MADE ANYWAY - WHO CARES - THATS NOT MY QUESTION: maybe we made the jbod of entity1 with lvm, or mdadm using linear concat, or hardware jbod drivers which combine disks and show them to the operating system as entity1, it doesn't matter, either way its still a jbod * This is the type of JBOD I am used to and I keep coming across when I google search JBOD * cat /proc/partitions would show sda,sdb,sdc and entity1 OR if we used hardware jbod maybe sda and sdb and sdc would not show and only entity1 would show, again who cares how it shows * mount entity1 to /mnt/entity1 * running "df" would show that entity1 is 100+200+300=600gb big * we then setup hadoop to run its datanodes on /mnt/entity1 so that datadir property points at /mnt/entity1 and the cluster just gained 600gb of capacity
…另一种观点是。。
(jbod方法2)
在hadoop中,我觉得他们希望每个磁盘都是分开的。所以我将把unix名称空间中的磁盘sda、sdb和sdc挂载到/mnt/a和/mnt/b和/mnt/c。。。从网上的阅读来看,很多hadoopMaven将jbods归类为一堆磁盘,因此对于unix来说,它们看起来像磁盘,而不是磁盘的一部分。。。然后,我当然可以将它们组合成一个实体,或者与逻辑卷管理器(lvm)或mdadm(以raid或线性方式,线性优先于jbod)。。。。。。但是。。。。。。不,让我们不要把它们结合起来,因为在hadoop世界里,jbod似乎只是一堆磁盘放在它们自己的旁边。。。
如果磁盘1、磁盘2和磁盘3的大小分别为100gb、200gb和300gb,则每个挂载磁盘1->/mnt/a和磁盘2->/mnt/b以及磁盘3->/mnt/c的大小分别为100gb、200gb和300gb,来自此节点的hadoop将获得600gb的容量 TEXTO-GRAPHICAL OF LINEAR CONCAT OF DISKS BEING A JBOD * disk1 2 and 3 used for datanode for hadoop * disk1 is sda 100gb * disk2 is sdb 200gb * disk3 is sdc 300gb * WE DO NOT COMBINE THEM TO APPEAR AS ONE * sda mounted to /mnt/a * sdb mounted to /mnt/b * sdc mounted to /mnt/c * running a "df" would show that sda and sdb and sdc have the following sizes: 100,200,300 gb respectively * we then setup hadoop via its config files to lay its hdfs on this node on the following "datadirs": /mnt/a and /mnt/b and /mnt/c.. gaining 100gb to the cluster from a, 200gb from b and 300gb from c... for a total gain of 600gb from this node... nobody using the cluster would tell the difference..
###问题摘要
每个人都提到的哪种方法是hadoop的最佳实践这种组合jbod或磁盘分离-根据在线文档,它仍然是jbod
这两种情况都将获得hadoop 600gb。。。现在才1点。看起来像一个concat或一个实体,是所有磁盘的组合,这就是我一直认为的jbod。。。或者它会像2在系统中的每个磁盘挂载到不同的目录,最终结果都是相同的hadoop容量明智的。。。只是想知道这是不是最好的表演方式
2条答案
按热度按时间mtb9vblg1#
我可以试着回答几个问题-告诉我你在哪里不同意。
1.jbod:只是一堆磁盘;一组驱动器,每个驱动器都可以作为独立的驱动器直接访问。hadoop权威指南中的主题“为什么不使用raid?”指出,raid读写性能受到阵列中最慢磁盘的限制。此外,在hdfs的情况下,数据的复制发生在位于不同机架中的不同机器上。即使机架发生故障,也可以处理潜在的数据丢失。所以,突袭没必要。但是namenode可以使用链接中提到的raid。
2.是指安装在每台机器(如/disk1、/disk2、/disk3等)上但未分区的独立磁盘(jbods)。
3、4和5读附录
6&7.检查此链接以查看块的复制是如何发生的
评论后的附录:
问题1。每个人都提到的哪种方法是hadoop的最佳实践这种组合jbod或磁盘分离-根据在线文档,这仍然是jbod?
可能的答案:来自hadoop权威指南-
还应设置dfs.data.dir属性,该属性指定datanode存储其块的目录列表。与namenode不同,namenode使用多个目录作为冗余,datanode round robins在其存储目录之间进行写操作,因此为了提高性能,您应该为每个本地磁盘指定一个存储目录。读取性能还得益于多个磁盘的存储,因为数据块将分布在多个磁盘上,不同数据块的并发读取将相应地分布在多个磁盘上。
为了获得最佳性能,您应该使用noatime选项装载存储磁盘。此设置意味着上次访问的时间信息不会写入文件读取,这将显著提高性能。
问题2。为什么lvm不是一个好主意?
避免在tasktracker和datanode机器上使用raid和lvm—这通常会降低性能。
这是因为lvm在一台机器中的各个挂载磁盘上创建逻辑层。
请查看此链接以了解更多详细信息。在一些用例中,运行hadoop作业时使用lvm执行得很慢。
ewm0tg9j2#
我参加聚会迟到了,但也许我可以插嘴:
jbod公司
问题1)在hadoop世界中,jbod是什么意思?您如何实现它?
只是一堆磁盘。。。您只需格式化整个磁盘并将其包含在´hdfs-site.xml文件
and
mapred-site.xml文件or
在datanodes上创建站点xml。hadoop负责跨磁盘分配块。问题2)将每个磁盘安装到不同的目录就这么简单吗?
对。
问题3)这是否意味着hadoop在jbod上运行得最好,在jbod上,每个磁盘只需挂载到不同的目录?
对。hadoop对数据进行校验和,并定期验证这些校验和。
问题4)然后将hadoop指向那些data.dirs?
确切地。但是有用于数据存储(hdfs)和计算(mapreduce,yarn,…)的目录,您可以为某些任务配置不同的目录和磁盘。
问题5)我看到jbods有两种方式,要么每个磁盘单独挂载,要么一个线性连接的磁盘,这可以通过mdadm——线性模式来实现,我打赌lvm也可以,所以我不认为这有什么大不了的。。。如果是这样的话,可以使用mdadm--linear或lvm,因为人们所指的jbod是这个concat磁盘,那么对于hadoop来说,哪个是“jbod”或linear concat磁盘的最佳方式呢?
问题是磁盘有故障。如果您保持简单,只需一次挂载每个磁盘,您只需更换这个磁盘。如果你使用
mdadm
或者ja jbod配置中的lvm在磁盘死机的情况下很容易丢失更多的数据,因为striped或concat配置可能无法在磁盘故障中生存。因为更多块的数据分布在多个磁盘上。问题6)为什么cow和raid之类的东西浪费了hadoop?我认为你的系统崩溃了,你用if的cowness来恢复它,当你恢复你的系统时,hdfs已经有太多的变化,它可能会认为这台机器有故障,最好从头开始重新连接它(把它作为一个新的datanode提出来)。。。或者hadoop系统将如何看到旧的datanode?我猜它不会认为它是旧的或新的,甚至是一个dat