《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》第2章Hadoop配置信息处理,本章从Windows和基于Java Properties配置文件开始,分析了Hadoop使用的基于健–对构成的、结构相对简单的XML配置文件,以及相应的处理类Configuration,特别是C
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》第2章Hadoop配置信息处理,本章从Windows和基于Java Properties配置文件开始,分析了Hadoop使用的基于健–值对构成的、结构相对简单的XML配置文件,以及相应的处理类Configuration,特别是Configuration类中的资源加载、资源合并和属性扩展等比较重要的处理过程。本节为配置文件简介。
第二部分 Common的实现
本部分内容
Hadoop配置信息处理
序列化与压缩
Hadoop远程过程调用
Hadoop文件系统
第2章 Hadoop配置信息处理
任何一个复杂的软件系统,为了提高其适应性和扩展性,一般都会有一个配置模块或配置系统,作为其扩展、定制的手段和方式。Hadoop使用配置文件将系统中的重要属性以文件的形式进行持久化,使得这些属性可以被重启后的进程或者不同的进程使用。
2.1 配置文件简介
配置文件是一个灵活系统不可缺少的一部分,虽然配置文件非常重要,但却没有标准。本节我们来了解Windows操作系统和Java环境中的配置文件。
2.1.1 Windows操作系统的配置文件
Windows系统广泛使用一种特殊化的ASCII文件(以“ini”为文件扩展名)作为它的主要配置文件标准。下面是INI文件的片段:
<ol> <li><span>;最后修改时间:2012.10.12 </span></li> <li><span>[owner] </span></li> <li> <span>name</span><span>=</span><span>John</span><span> Doe </span> </li> <li> <span>organization</span><span>=</span><span>Acme</span><span> Widgets Inc. </span> </li> <li><span> </span></li> <li><span>[database] </span></li> <li> <span>server</span><span>=</span><span>192</span><span>.0.2.62 ;使用IP地址,在域名解析不能使用时还能正常工作 </span> </li> <li> <span>port</span><span>=</span><span>143</span><span> </span> </li> <li> <span>file</span><span>=</span><span>"payroll.dat"</span><span> </span> </li> <li><span> </span></li> <li><span>[ftp] </span></li> </ol>
该文件也称为初始化文件(Initialization File,它的扩展名就是initialization的前三个字母)或概要文件(profile),应用程序可以拥有自己的配置文件,存储应用的设置信息,也可以访问Windows的基本系统配置文件win.ini中存储的配置信息。INI文件将配置信息分为“节”,节标题放在方括号中。如上面例子中的[database],就是database节的节标题。节用于对配置数据做一个归类,每一个节可以包含一些与之相关的“项”(ENTRY),并通过等号对其进行赋值(VALUE)。一般的形式如下:
<ol> <li><span>[div] </span></li> <li> <span>ENTRY</span><span>=</span><span>VALUE</span><span> </span> </li> </ol>
其中VALUE值可以有两种类型:数型或字符串。上面给出的INI文件片段中,database节中包含3个项,分别是server、port和file。其中,配置项port可以以数型的形式读取。
INI文件中的注释以分号开始,到行尾结束。
Windows操作系统同时还提供了一些API,用来对配置文件进行读、写。如使用GetProfileString()函数可以从配置文件win.ini中获取字符串型配置,使用GetPrivateProfileInt()函数可以从私有的配置文件中读取一个配置整数型项。该函数的原型如下:
<ol> <li><span>UINT WINAPI GetPrivateProfileInt( </span></li> <li><span> __in LPCTSTR lpAppName, </span></li> <li><span> __in LPCTSTR lpKeyName, </span></li> <li><span> __in INT nDefault, </span></li> <li><span> __in LPCTSTR lpFileName </span></li> <li><span>); </span></li> </ol>
其中,参数LPCTSTR lpFileName是INI文件的文件名,LPCTSTR lpAppName和LPCTSTR lpKeyName分别是上述的“节”和“项”,INT nDefault是默认值,也就是说,如果在配置文件中找不到配置信息,就返回该默认值。
2.1.2 Java配置文件
JDK提供了java.util.Properties类,用于处理简单的配置文件。Properties很早就被引入到Java的类库中,并且一直没有什么变化。它继承自Hashtable,如图2-1所示,表示了一个持久的属性集,该集可保存在流中或从流中加载。属性列表中每个键及其对应值都是字符串类型。
相对于INI文件,Properties处理的配置文件格式非常简单,它只支持键–值对,等号“=”左边为键,右边为值。形式如下:
<ol><li><span><span>ENTRY</span><span>=</span><span>VALUE</span><span> </span></span></li></ol>
由于Properties基于Hashtable,它并不能支持INI文件中的“节”,对配置项进行分类。
java.util.Properties中用于处理属性列表的主要方法如下,其中,getProperty()用于在属性列表中获取指定键(参数key)对应的属性,它有两个形式,一个不提供默认值,另一个可以提供默认值。Properties.setProperty()用于在属性列表中设置/更新属性值。相关代码如下:
<ol> <li><span>//用指定的键在此属性列表中搜索属性 </span></li> <li><span>public String getProperty(String key) </span></li> <li><span> </span></li> <li><span>//功能同上,参数defaultValue提供了默认值 </span></li> <li><span>public String getProperty(String key, String defaultValue) </span></li> <li><span> </span></li> <li><span>//最终调用 Hashtable 的方法put </span></li> <li><span>public synchronized Object setProperty(String key, String value) </span></li> </ol>
Properties中的属性通过load()方法加载,该方法从输入流中读取键–值对,而store()方法则将Properties表中的属性列表写入输出流。使用输入流和输出流,Properties对象不但可以保存在文件中,而且还可以保存在其他支持流的系统中,如Web服务器。J2SE 1.5版本以后,Properties中的数据也可以以XML格式保存,对应的加载和写出方法是loadFromXML()和storeToXML()。
下面是以XML格式存在的Properties配置文件的例子。
<ol> <li><span><span></span><span>xml</span><span>?</span><span>version</span><span>=</span><span>"1.0"</span><span>?</span><span>encoding</span><span>=</span><span>"UTF-8"</span><span>?></span><span> </span></span></li> <li><span>properties?SYSTEM </span></li> <li> <span> "http://java.sun.com/dtd/properties.dtd"</span><span>></span><span> </span> </li> <li><span><span>properties</span><span>></span><span> </span></span></li> <li> <span> </span><span><span>comment</span><span>></span><span>Hi</span><span></span><span>comment</span><span>></span><span> </span></span> </li> <li> <span> </span><span><span>entry</span><span>?</span><span>key</span><span>=</span><span>"foo"</span><span>></span><span>bar</span><span></span><span>entry</span><span>></span><span> </span></span> </li> <li> <span> </span><span><span>entry</span><span>?</span><span>key</span><span>=</span><span>"fu"</span><span>></span><span>baz</span><span></span><span>entry</span><span>></span><span> </span></span> </li> <li> <span></span><span>properties</span><span>></span><span> </span> </li> </ol>
由于java.util.Properties提供的能力有限,Java社区中出现了大量的配置信息读/写方案,其中比较有名的是Apache Jakarta Commons工具集中提供的Commons Configuration。Commons Configuration中的PropertiesConfiguration类提供了丰富的访问配置参数的方法。Commons Configuration支持文本、XML配置文件格式;支持加载多个配置文件;支持分层或多级的配置;同时提供对单值或多值配置参数的基于类型的访问。应该说,Commons Configuration是一个功能强大的配置文件处理工具。

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

選擇PostgreSQL而非MySQL的場景包括:1)需要復雜查詢和高級SQL功能,2)要求嚴格的數據完整性和ACID遵從性,3)需要高級空間功能,4)處理大數據集時需要高性能。 PostgreSQL在這些方面表現出色,適合需要復雜數據處理和高數據完整性的項目。

MySQL數據庫的安全可以通過以下措施實現:1.用戶權限管理:通過CREATEUSER和GRANT命令嚴格控制訪問權限。 2.加密傳輸:配置SSL/TLS確保數據傳輸安全。 3.數據庫備份和恢復:使用mysqldump或mysqlpump定期備份數據。 4.高級安全策略:使用防火牆限制訪問,並啟用審計日誌記錄操作。 5.性能優化與最佳實踐:通過索引和查詢優化以及定期維護兼顧安全和性能。

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。