目錄
HDFS-2246 曾经实现的Short-Circuit LocalReads
HDFS-347:让Short-Circuit Local Reads 安全
Cache 文件描述符
HDFS-347配置
性能
结论
首頁 資料庫 mysql教程 如何提高hadoop中Short-Circuit Local Reads时的性能及安全性

如何提高hadoop中Short-Circuit Local Reads时的性能及安全性

Jun 07, 2016 pm 04:32 PM
hadoop 如何 提高

本文由 ImportNew - Royce Wong 翻译自 Cloudera。如需转载本文,请先参见文章末尾处的转载要求。 大家都知道,apache hadoop的一个关键思想就是移动计算比移动数据更廉价。所以只要可能,我们就乐忠移动计算到数据地方。因此,HDFS通常使用许多的本地读,在

本文由 ImportNew - Royce Wong 翻译自 Cloudera。如需转载本文,请先参见文章末尾处的转载要求。

大家都知道,apache hadoop的一个关键思想就是移动计算比移动数据更廉价。所以只要可能,我们就乐忠移动计算到数据地方。因此,HDFS通常使用许多的本地读,在本地机器构造读对象读出数据。

最初,hdfs本地读其实和远程读使用的同一种方式:client端通过TCP 连接DN,并通过DataTransferProtocol传输数据。该方法简单,但是有一些不好的地方。例如,DN需要维护一个线程运行,并为每个client打开的tcp套接字建立连接传输数据。在linux内核中tcp协议是有开销的,同时DataTransferProtocol本身也有开销。这里有优化空间。

本文大家将会了解到一项HDFS新的优化,叫做“secure short-circuit local reads”,学习该优化如何实现并怎样提速本地读的。

HDFS-2246 曾经实现的Short-Circuit LocalReads

HDFS-2246,ndrew Purtell, Suresh Srinivas, Jitendra Nath Pandey, and Benoy Antony等人添加了一项称为“short-circuit local reads”优化。

其关键思想如下:因为客户端和数据在同一个节点,所以没必要再去和DN交互。客户端本身直接就从本地磁盘读出数据。这个性能优化被加入了CDH3u3。

HDFS-2246实现的short-circuit local read 是一个好的开始,但其带来了许多配置上麻烦。系统管理员必须改变DN数据目录权限,允许客户端打开相关文件。还需要定义一个白名单用户,可以使用这个特性。其他用户不允许。通常,这些用户被搞到一个特殊的UNIX 用户组里。

不幸的是,这种权限改变带来了安全漏洞。有这种权限的用户就可以直接浏览所有数据了,不仅是他们需要的数据。简直就是超级用户啊!这个在一些场景下可以接受,比如 HBase用户,但是一般来讲,它还是带来了问题。这不是一个通用的方式。

HDFS-347:让Short-Circuit Local Reads 安全

HDFS-2246的主要问题就是它将DN的所有数据路径直接开放给了客户端。其实,客户端只是想要几个其关心的数据文件。

幸亏Unix提供了可以这样做的机制,文件描述符。HDFS-347使用该机制实现安全的short-circuit local reads. 客户端向DN请求数据时,DN简单地打开blockfile和元数据文件,并直接传给客户端,而不是将路径传给客户端。因为文件描述符是只读的,客户端不能修改接收到的文件。同时不支持对block所在路径的访问,所以也就不能访问其他数据。

Windows 有类似的机制允许将文件描述符在进程间传递。CDH目前还不支持该特性,同时Windows用户可以配置dfs.cient.use.legacy.blockreader.local为true使用legacy block reader。

Cache 文件描述符

HDFS客户端经常多次读取相同的block文件(y尤其对HBase而言)。为了提高这种场景下的本地读,HDFS-2246实现的机制中有一个block 路径的Cache。Cache允许客户端重新打开block文件,而不需要再去访问DN。

相对于路径Cache,新机制实现了一个FileInputStreamCache,缓存文件描述符。优点在于不需要客户端重新打开数据文件。该处实现性能优于老的读取机制。

cache的大小可以通过dfs.client.read.shortcircuit.stream.cache.size调整,cache超时时间通过dfs.client.read.shortcircuit.streams.cache.expiry.ms设定。也可以关掉该cache,设置cache大小为0即可。大多数情况下,默认配置就可以了。如果你面对的是特殊的大规模的工作集和高文件描述符限制,你可以试着提高参数值。

HDFS-347配置

HDFS-347实现的新机制,所有hdfs用户都可以使用该特性,而不是局限于配置的几个用户。也没有必要去修改Unix用户组来设定谁可以访问DN路径。然而,java标准库并不包含支持文件描述符传递的库,所以该特性需要使用JNI。同时需要安装libhadoop.so库.

HDFS-347也需要一个Unix域套接字路径,可通过dfs.domain.socket.path设置。该路径必须安全地阻止无优先级进程进行中间人攻击(MITM攻击,man-in-the-middle attack)。每个套接字路径必须是root拥有或者DN用户拥有,不能使用人人都可以写或者用户组可写方式的路径。

如果你安装cloudera包 rpm,deb,cloudera会创建一个默认的安全的unix域套接字路径。同时会讲libhadoop.so安装到正确路径下。

详细配置信息可以参考 the upstream documentation

性能

新实现到底咋样呢?作者使用 hio_bench程序获取到一些性能统计数据。hiobench github 地址 https://github.com/cmccabe/hiotest。

测试案例运行在8核 intelXeon 2.13 12块磁盘服务器上,集群使用CDH4.3.1,底层使用ext4文件系统。 下图每个值是运行三次的平均值。

在所有测试案例中,HDFS-347实现是最快的,可能归功于FileInputStreamCache.相反HDFS-2246实现会重复打开ext4 块文件多次,打开文件是一个重操作。

short-circuit实现在随机读场景下比顺序读相对于hdfs初始的读取机制有相对优势。部分原因是为short-circuit local reads场景的 高速预读(readahead)还未实现。可以参考HDFS-4697参与相关讨论。

结论

SCR (short-circuit local reads)是hadoop模型下优化的一项极好的案例。他们也有如何解决规模不断增长的挑战,Cloudera目前正挑战在集群中获取每个节点更多性能方向的研究。

如果你正使用CDH4.2 或以上版本,用下新的实现把!

Colin McCabe is a Software Engineer on the Platform team, and a Hadoop Committer.

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java錯誤:Hadoop錯誤,如何處理與避免 Java錯誤:Hadoop錯誤,如何處理與避免 Jun 24, 2023 pm 01:06 PM

Java錯誤:Hadoop錯誤,如何處理和避免使用Hadoop處理大數據時,常常會遇到一些Java異常錯誤,這些錯誤可能會影響任務的執行,導致資料處理失敗。本文將介紹一些常見的Hadoop錯誤,並提供處理和避免這些錯誤的方法。 Java.lang.OutOfMemoryErrorOutOfMemoryError是Java虛擬機器記憶體不足的錯誤。當Hadoop任

在Beego中使用Hadoop和HBase進行大數據儲存和查詢 在Beego中使用Hadoop和HBase進行大數據儲存和查詢 Jun 22, 2023 am 10:21 AM

隨著大數據時代的到來,資料處理和儲存變得越來越重要,如何有效率地管理和分析大量的資料也成為企業面臨的挑戰。 Hadoop和HBase作為Apache基金會的兩個項目,為大數據儲存和分析提供了一個解決方案。本文將介紹如何在Beego中使用Hadoop和HBase進行大數據儲存和查詢。一、Hadoop和HBase簡介Hadoop是一個開源的分散式儲存和運算系統,它可

如何使用PHP和Hadoop進行大數據處理 如何使用PHP和Hadoop進行大數據處理 Jun 19, 2023 pm 02:24 PM

隨著資料量的不斷增大,傳統的資料處理方式已經無法處理大數據時代所帶來的挑戰。 Hadoop是開源的分散式運算框架,它透過分散式儲存和處理大量的數據,解決了單節點伺服器在大數據處理中帶來的效能瓶頸問題。 PHP是一種腳本語言,廣泛應用於Web開發,而且具有快速開發、易於維護等優點。本文將介紹如何使用PHP和Hadoop進行大數據處理。什麼是HadoopHadoop是

如何透過PHP多執行緒提高資料庫查詢效能 如何透過PHP多執行緒提高資料庫查詢效能 Jun 29, 2023 pm 08:27 PM

如何透過PHP多執行緒提高資料庫查詢效能引言:隨著網際網路的快速發展,資料庫查詢效能成為了開發者面臨的重要挑戰之一。而PHP作為一種廣泛使用的伺服器端腳本語言,對於資料庫查詢也扮演著重要的角色。本文將探討如何透過PHP多執行緒技術提高資料庫查詢效能,以滿足高並發請求的需求。一、什麼是多執行緒在討論如何利用多執行緒來提高資料庫查詢效能前,我們首先需要了解什麼是多執行緒。通俗

探索Java在大數據領域的應用:Hadoop、Spark、Kafka等技術堆疊的了解 探索Java在大數據領域的應用:Hadoop、Spark、Kafka等技術堆疊的了解 Dec 26, 2023 pm 02:57 PM

Java大數據技術堆疊:了解Java在大數據領域的應用,如Hadoop、Spark、Kafka等隨著資料量不斷增加,大數據技術成為了當今網路時代的熱門話題。在大數據領域,我們常聽到Hadoop、Spark、Kafka等技術的名字。這些技術起到了至關重要的作用,而Java作為一門廣泛應用的程式語言,也在大數據領域發揮著巨大的作用。本文將重點放在Java在大

哈醫大臨床藥學就業是否有前途(哈醫大臨床藥學就業前景怎麼樣) 哈醫大臨床藥學就業是否有前途(哈醫大臨床藥學就業前景怎麼樣) Jan 02, 2024 pm 08:54 PM

哈醫大臨床藥學就業前景如何儘管全國就業情況不容樂觀,但藥科類畢業生仍有著良好的就業前景。整體來看,藥科類畢業生的供給量少於需求量,各醫藥公司和製藥廠是吸收這類畢業生的主要管道,製藥業對人才的需求也穩定成長。據介紹,近幾年藥物製劑、天然藥物化學等專業的研究生供需比甚至達到1∶10。臨床藥學專業就業方向:臨床醫學專業學生畢業後可在醫療衛生單位、醫學科研等部門從事醫療及預防、醫學科研等方面的工作。就業機會:醫藥代表、醫藥銷售代表、銷售代表、銷售經理、區域銷售經理、招募經理、產品經理、產品專員、護

linux下安裝Hadoop的方法是什麼 linux下安裝Hadoop的方法是什麼 May 18, 2023 pm 08:19 PM

一:安裝JDK1.執行以下指令,下載JDK1.8安裝套件。 wget--no-check-certificatehttps://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz2.執行以下命令,解壓縮下載的JDK1.8安裝包。 tar-zxvfjdk-8u151-linux-x64.tar.gz3.移動並重新命名JDK包。 mvjdk1.8.0_151//usr/java84.配置Java環境變數。 echo'

利用PHP實現大規模資料處理:Hadoop、Spark、Flink等 利用PHP實現大規模資料處理:Hadoop、Spark、Flink等 May 11, 2023 pm 04:13 PM

隨著資料量的不斷增加,大規模資料處理已經成為了企業必須面對和解決的問題。傳統的關聯式資料庫已經無法滿足這種需求,而對於大規模資料的儲存與分析,Hadoop、Spark、Flink等分散式運算平台成為了最佳選擇。在資料處理工具的選擇過程中,PHP作為一種易於開發和維護的語言,越來越受到開發者的歡迎。在本文中,我們將探討如何利用PHP來實現大規模資料處理,以及如

See all articles