Hadoop安全總體架構(gòu)設(shè)計(jì)建議_第1頁
Hadoop安全總體架構(gòu)設(shè)計(jì)建議_第2頁
Hadoop安全總體架構(gòu)設(shè)計(jì)建議_第3頁
Hadoop安全總體架構(gòu)設(shè)計(jì)建議_第4頁
Hadoop安全總體架構(gòu)設(shè)計(jì)建議_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Hadoop應(yīng)用點(diǎn)總體架構(gòu)設(shè)計(jì)建議1. 總體架構(gòu)規(guī)劃1.1 平臺(tái)愿景聯(lián)動(dòng)優(yōu)勢(shì)hadoop平臺(tái)總包含以下幾大模塊:l 數(shù)據(jù)平臺(tái):數(shù)據(jù)平臺(tái)提供對(duì)最原始數(shù)據(jù)的存儲(chǔ),以及ETL,為上層系統(tǒng)提供數(shù)據(jù)支撐,其中數(shù)據(jù)平臺(tái)功能包括,數(shù)據(jù)存儲(chǔ)、離線處理、在線處理、數(shù)據(jù)導(dǎo)入導(dǎo)出。l 應(yīng)用平臺(tái):如查詢系統(tǒng)、風(fēng)控系統(tǒng)構(gòu)建在數(shù)據(jù)平臺(tái)以及數(shù)據(jù)產(chǎn)品之上。l 內(nèi)部運(yùn)行支撐應(yīng)用環(huán)境:主要指能夠支撐平臺(tái)穩(wěn)定運(yùn)行的各種系統(tǒng)與工具,如調(diào)度系統(tǒng)、監(jiān)控系統(tǒng)、管理系統(tǒng)等l 數(shù)據(jù)產(chǎn)品:數(shù)據(jù)產(chǎn)品以數(shù)據(jù)平臺(tái)為基礎(chǔ),應(yīng)用各種分析方式、挖掘算法包裝出一些列的數(shù)據(jù)產(chǎn)品,比如UserProfile等1.2 數(shù)據(jù)處理流程日志采集:由現(xiàn)有的業(yè)務(wù)系統(tǒng)通過分布

2、式日志采集系統(tǒng),將非結(jié)構(gòu)化業(yè)務(wù)日志采集到HDFS上,同時(shí)日志采集系統(tǒng)包含日志分發(fā)模塊,可以將日志分發(fā)到實(shí)時(shí)計(jì)算框架中。離線處理:主要針對(duì)存儲(chǔ)到HDFS上的日志通過pig、mapreduce、hive等離線處理框架進(jìn)行離線處理,并可以通過sqoop將結(jié)果導(dǎo)入到Hbase、mysql等存儲(chǔ)中在線處理:通過日志轉(zhuǎn)發(fā)模塊給Storm集群轉(zhuǎn)發(fā)實(shí)時(shí)日志,Storm將數(shù)據(jù)實(shí)時(shí)處理并將計(jì)算結(jié)果存儲(chǔ)到Hbase等大吞吐量的key-value數(shù)據(jù)庫中,供前段應(yīng)用實(shí)時(shí)查詢數(shù)據(jù)展示:前端應(yīng)用通過緩存層將數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行一次緩存,達(dá)到良好的用戶體驗(yàn)1.3 實(shí)施戰(zhàn)略技術(shù)路線平臺(tái)架構(gòu)路線可以分為三步驟:離線期:根據(jù)當(dāng)前情

3、況,實(shí)現(xiàn)HDFS的離線處理就能夠滿足業(yè)務(wù)需求,這一期間需要把Hadoop基本平臺(tái)構(gòu)建完備(安全、規(guī)范、流程這個(gè)很重要),數(shù)據(jù)采集系統(tǒng)構(gòu)建。以需求驅(qū)動(dòng)架構(gòu),根據(jù)本人經(jīng)驗(yàn)大概需要一個(gè)季度的時(shí)間可以將離線期架構(gòu)的模塊穩(wěn)定運(yùn)行。實(shí)時(shí)期:在離線期結(jié)束后,我們對(duì)大數(shù)據(jù)處理的輪廓也有了,以及遇到的一些問題也相應(yīng)的解決,這時(shí)期主要針對(duì)具體的某個(gè)實(shí)時(shí)應(yīng)用場景,將實(shí)時(shí)計(jì)算模塊構(gòu)建出來,storm+hbase,簡單會(huì)應(yīng)用這些技術(shù)難度不會(huì)太大,最主要是要制定相應(yīng)的使用流程和規(guī)范,為后續(xù)運(yùn)營鋪墊綜合期:該時(shí)期主要是針對(duì)前兩個(gè)計(jì)算模塊開始搭建相應(yīng)的監(jiān)控系統(tǒng)、使得系統(tǒng)穩(wěn)定、易用、好用,這個(gè)時(shí)期的工作要根據(jù)具體出現(xiàn)的問題和情

4、況靈活調(diào)配。2. 存儲(chǔ)平臺(tái)存儲(chǔ)平臺(tái):底層主要采用HDFS分布式文件系統(tǒng)來支撐, Hortonworks CTO Eric在2012全球大數(shù)據(jù)峰會(huì)上指出未來90%的數(shù)據(jù)都將存儲(chǔ)在HDFS上。各大廠商的計(jì)算框架在設(shè)計(jì)上都要以支持HDFS為第一前提。數(shù)據(jù)平臺(tái)在實(shí)施中需要考慮到幾大問題:安全問題、平臺(tái)規(guī)范、平臺(tái)監(jiān)控。2.1 平臺(tái)安全通常數(shù)據(jù)平臺(tái)的構(gòu)建都著重于可擴(kuò)展性、高可用性等,在設(shè)計(jì)上忽略了對(duì)數(shù)據(jù)安全的考慮。 在hadoop0.20x的版本上,Hadoop并沒對(duì)安全做過多的考慮與設(shè)計(jì),所以在先前的Hadoop版本中存在諸多安全問題。2.1.1 安全問題 Linux終端的隨意連接Hado

5、op集群并沒對(duì)連接其服務(wù)的Linux終端做任何的身份認(rèn)證,所以任何知道其服務(wù)地址的用戶都可以配置任務(wù)的Linux客戶端連接Hadoop集群,直接在其擁有root權(quán)限的終端操作集群。Hadoop的默認(rèn)用戶權(quán)限是基于Linux終端的用戶組信息,假設(shè)HDFS的超級(jí)管理員是Hadoop用戶,本來我們分配出來的終端,每個(gè)用戶在終端上只有自己的一個(gè)特定賬戶,而且該賬戶對(duì)應(yīng)了HDFS上的賬戶,這樣在操作上就能夠給控制到用戶相關(guān)的權(quán)限?,F(xiàn)在如果某用戶A通過另一臺(tái)未知的Linux終端連接到我們的集群(這個(gè)只要用戶知道我們的集群地址就可以配置),并且該用戶擁有這個(gè)終端的root賬戶,那么該用戶就可以通過這個(gè)終端操

6、作任何HDFS用戶的數(shù)據(jù),這個(gè)對(duì)開放的數(shù)據(jù)平臺(tái)來說是極度的不安全。所以我們?cè)谘芯拷鉀Q這個(gè)問題需要達(dá)到的目標(biāo)是連接集群的Linux終端是我們可控制的,不能通過用戶隨意添加。 非法應(yīng)用的連接一般我們都可以開發(fā)一些應(yīng)用連接Hadoop的HDFS服務(wù),比如日志采集系統(tǒng)將外部的業(yè)務(wù)系統(tǒng)采集過來的日志直接上傳到HDFS上。在之前的數(shù)據(jù)平臺(tái)并沒對(duì)第三方應(yīng)用做一些身份認(rèn)證,任何APP只要知道其服務(wù)地址就可以往HDFS上存儲(chǔ)數(shù)據(jù),修改數(shù)據(jù),這樣對(duì)現(xiàn)有的數(shù)據(jù)是極其的不安全。同時(shí)還可以開發(fā)一些私有的應(yīng)用程序用來過度的消耗數(shù)據(jù)平臺(tái)的計(jì)算資源,導(dǎo)致日常的業(yè)務(wù)計(jì)算得不到足夠的計(jì)算資源影響正常的業(yè)務(wù)報(bào)表。所以

7、我們針對(duì)這個(gè)問題的研究重點(diǎn)是對(duì)第三方的應(yīng)用程序需要設(shè)計(jì)一套認(rèn)證方案,使得任何應(yīng)用程序要連接數(shù)據(jù)平臺(tái)的應(yīng)用都要事先申請(qǐng)一個(gè)token,這個(gè)token可以是永久的也可以的臨時(shí),然后才能使用數(shù)據(jù)平臺(tái)的服務(wù)。 用戶身份的冒充在我們提交的MapReduce客戶端程序中,只需要將的屬性設(shè)置成你期望冒充的身份你就可以以該身份進(jìn)行作業(yè)提交。這個(gè)將導(dǎo)致其一:A用戶冒充B用戶提交作業(yè),訪問本來A用戶并沒有權(quán)限訪問的數(shù)據(jù),其二:在平臺(tái)做成本估算報(bào)表會(huì)將A消耗的計(jì)算資源都算到B用戶身上,這樣導(dǎo)致估算的結(jié)果不準(zhǔn)確。所以我們?cè)谘芯拷鉀Q這個(gè)問題的時(shí)候需要提供一種用戶身份識(shí)別的token,這樣

8、保證每個(gè)用戶不會(huì)被其他用戶所冒充,保證用戶的權(quán)益以及數(shù)據(jù)的安全。 Web界面的任意訪問數(shù)據(jù)平臺(tái)默認(rèn)提供兩個(gè)web界面用來供用戶查詢操作。其中HDFS界面主要用來給用戶查詢及下載相關(guān)存儲(chǔ)的數(shù)據(jù),MapReduce界面主要用來用戶查看其提交作業(yè)的進(jìn)度,以及相關(guān)的配置文件。但是在之前的數(shù)據(jù)平臺(tái)這兩個(gè)界面的訪問并沒有進(jìn)行用戶身份的控制,任何用戶都可以對(duì)HDFS上的任何數(shù)據(jù)進(jìn)行訪問下載,這樣對(duì)一些私有數(shù)據(jù)的安全性是極其沒有保證。此外任何用戶都可以查看到每個(gè)作業(yè)的一些進(jìn)度以及相關(guān)配置文件,有些時(shí)候我們會(huì)將一些數(shù)據(jù)庫配置的賬號(hào)密碼存儲(chǔ)到配置文件中,這樣就會(huì)通過web界面暴露出來,會(huì)帶來一些其他

9、安全問題16。所以我們?cè)谘芯拷鉀Q這個(gè)問題的目標(biāo)就是要達(dá)到對(duì)web界面的訪問達(dá)到對(duì)用戶身份的控制,特定的用戶通過web界面只能查看到他有權(quán)限訪問的數(shù)據(jù),以及他自己提交的作業(yè)配置信息。 slave節(jié)點(diǎn)隨意添加Hadoop兩個(gè)主要部分HDFS、MapReduce都是master/slave結(jié)構(gòu),所以在master節(jié)點(diǎn)確定以后,slave節(jié)點(diǎn)在之前的數(shù)據(jù)平臺(tái)是可以隨意添加到master中,這樣一些不確定的slave添加有可能導(dǎo)致數(shù)據(jù)的丟失以及作業(yè)的失敗。假設(shè)我們每一份文件都是三個(gè)備份存儲(chǔ),然后我們添加三個(gè)未知的slave節(jié)點(diǎn)到集群中,恰好某個(gè)文件的三個(gè)備份都存儲(chǔ)在這新添加的三個(gè)slave

10、節(jié)點(diǎn)上,隨后如果非法用戶惡意將這三個(gè)節(jié)點(diǎn)同時(shí)下架,那么將導(dǎo)致這個(gè)文件的丟失。此外,在MapReduce框架中我們?cè)O(shè)置了某個(gè)task嘗試4次如果不成功則將被視為失敗,如果新添加的這些slave節(jié)點(diǎn)環(huán)境配置以及擴(kuò)展包配置與集群中的其他節(jié)點(diǎn)不一致,很可能導(dǎo)致task的多次失敗最終將導(dǎo)致作業(yè)的失敗。所以我們?cè)谘芯拷鉀Q這個(gè)問題的時(shí)候需要嚴(yán)格的控制slave節(jié)點(diǎn)的添加。 SecondNameNode節(jié)點(diǎn)添加SecondNameNode主要是用于定時(shí)備份NameNode的目錄樹文件,同時(shí)對(duì)NameNode的日志文件與fsimage進(jìn)行合并,如果不對(duì)SecondNameNode服務(wù)進(jìn)行認(rèn)證,那么

11、可以任意的啟動(dòng)SecondNameNode,如果啟動(dòng)過多的話這將對(duì)NameNode的fsimage合并造成沖突。所以在研究解決這個(gè)問題我們需要解決SecondNameNode添加的身份認(rèn)證。2.1.2 身份認(rèn)證 Kerberos介紹Kerberos是由MIT大學(xué)研發(fā)出來網(wǎng)絡(luò)認(rèn)證協(xié)議,其設(shè)計(jì)目標(biāo)是通過一套自帶的密匙認(rèn)證系統(tǒng)為客戶端及服務(wù)端做認(rèn)證。目前在Linux操作系統(tǒng)中都默認(rèn)安裝了其客戶端工具。圖2.1 kerberos主體結(jié)構(gòu)圖如上圖2.1所示,Kerberos包含兩個(gè)重要部分,一個(gè)是密匙數(shù)據(jù)庫,主要存儲(chǔ)針對(duì)每個(gè)服務(wù)及相關(guān)用戶的密匙,另一個(gè)是密匙分發(fā)服務(wù)器,主要提供密匙分發(fā)的服

12、務(wù)??蛻舳苏?qǐng)求某個(gè)具體的業(yè)務(wù)前需要先請(qǐng)求密匙分發(fā)服務(wù)器予以獲得一個(gè)票證,密匙分發(fā)服務(wù)器根據(jù)客戶端請(qǐng)求的身份信息以及密匙數(shù)據(jù)庫存儲(chǔ)的信息進(jìn)行匹配,如果匹配成功則返回一個(gè)帶用戶信息的票證,客戶端再持有該票證向服務(wù)端請(qǐng)求具體的業(yè)務(wù)操作。如果密匙分發(fā)服務(wù)器不能認(rèn)證客戶端的身份,那么將不能給客戶端分發(fā)相關(guān)的票證。所以在整個(gè)kerberos認(rèn)證過程中實(shí)際上包含了4個(gè)主體,客戶端、服務(wù)端、密匙分發(fā)服務(wù)器、密匙數(shù)據(jù)庫,其中如果密匙分發(fā)服務(wù)器宕機(jī)或者密匙數(shù)據(jù)庫損壞將影響整個(gè)認(rèn)證過程。圖2.2 客戶端一次認(rèn)證過程下面我們來看看kerberos進(jìn)行一次服務(wù)端認(rèn)證的詳細(xì)過程。如圖2.2所示。首先客戶端向KDC服務(wù)器發(fā)

13、送 Ticket Request ,KDC認(rèn)證客戶端身份,如果認(rèn)證通過則返回一個(gè)Service Ticket,如果認(rèn)證不通過則提示不能從密匙服務(wù)器中獲取任何與用戶相關(guān)的密匙。當(dāng)客戶端獲取到了Service Ticket,將該Service Ticket與本地身份發(fā)送到服務(wù)端,服務(wù)端根據(jù)發(fā)送過來的Service Ticket進(jìn)行效驗(yàn),效驗(yàn)通過以后直接回應(yīng)給客戶端。整個(gè)過程需要獲取兩次票證,第一次是用戶來識(shí)別用戶身份的票證,第二次是用來識(shí)別服務(wù)許可的票證。 集成Kerberos一系統(tǒng)搭建:環(huán)境以及軟件包(實(shí)踐環(huán)境) 操作系統(tǒng) centos5.8JDK 1.7.0_07(根據(jù)需要下載

14、32 位或者 64 位) Hadoop-1.0.3(可用最新穩(wěn)定版 1.1.2) Kerberos(krb5-1.10.3.tar.gz) /kerberos/dist/krb5/1.10/krb5-1.10.3-signed.tar 將 krb5-1.10.3.tar.gz 、jdk、Hadoop-1.0.3 都拷貝到/opt 下,/opt 作為我們的安裝空間, 解壓相關(guān)文件,規(guī)范的目錄結(jié)構(gòu)是良好的開端,并且將安裝包備份到其他目錄,以備后續(xù)不時(shí)之需。解壓完的目錄結(jié)構(gòu)如下 ll /opt其中 JDK 1.7.0_07 解壓到 java 目錄中并且 建 defa

15、ult 目錄用來做軟鏈接后續(xù)好升級(jí)版本,具體 java 目錄的結(jié)構(gòu)如下:ll /opt/java可以看出目前使用的版本為 jdk1.7.0_07_x64 二.Kerberos 安裝1. 編譯 安裝 kerberos 包c(diǎn)d /opt/krb5-1.10.3/src 執(zhí)行 ./configure 執(zhí)行 make & make install 如果遇到錯(cuò)誤根據(jù)錯(cuò)誤安裝 gcc 等依賴包(yum -install xx ) 默認(rèn)會(huì)將相關(guān)依賴安裝到/usr/local/lib 下,相應(yīng)的命令也拷貝到/usr/local/sbin 默認(rèn)會(huì)創(chuàng)建 /usr/local/var/krb5kdc 這個(gè)目

16、錄做為 kerberos 的工作空間驗(yàn)證是否安裝成功可執(zhí)行 which kdb5_util 能夠得到正確的路徑2. 確認(rèn) kerberos 工作空間Centeros5.8 默認(rèn)安裝了 kerberos 客戶端工具,所以會(huì)存在/user/kerberos 目錄,目錄結(jié)構(gòu)為:同時(shí)將 /usr/local/var/krb5kdc 目錄創(chuàng)建軟鏈接到 /user/kerberos/varln -s /usr/local/var/krb5kdc /user/kerberos/var 此刻/user/kerberos 目錄結(jié)構(gòu)為:3.修改 krb5.conf 此刻 工作空間/usr/kerberos/var

17、/krb5kdc/ 若沒有任何文件,這個(gè)屬于正常,首先我們需要配置一下/etc/krb5.conf 為 kerberos 服務(wù)端配置默認(rèn)參數(shù),系統(tǒng)默認(rèn)的/etc/krb5.conf 是一個(gè)example 數(shù)據(jù)庫的配置,我們需要在這上面做修改:logging default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.log (kdc 日志保存地址) admin_server = FILE:/var/log/kadmind.log (kadmin 日志保存地址)libdefaults default_realm = HADOOP

18、 (想要?jiǎng)?chuàng)建的 realm 名稱,一般大寫) dns_lookup_realm = false dns_lookup_kdc = falseticket_lifetime = 24h(票證的有效期)forwardable = yeskdc profile = /usr/kerberos/var/krb5kdc/kdc.conf (kdc 的默認(rèn)配置文件)realms HADOOP = kdc = 主機(jī) hostname:88admin_server = 主機(jī) hostname:749default_domain = -與下面的 domain_realm 對(duì)應(yīng)domain_realm -doma

19、in 到 realm 的映射 = HADOOP = HADOOPappdefaults -客戶端應(yīng)用參數(shù)pam = debug = falseticket_lifetime = 36000renew_lifetime = 36000forwardable = true krb4_convert = false4.創(chuàng)建 kerberos 的數(shù)據(jù)庫修改完/ect/krb5.conf 以后所有該機(jī)器上的 kerberos 操作都會(huì)去讀取該配置文件,就可以進(jìn)行數(shù)據(jù)庫創(chuàng)建的操作:kdb5_util create -r hadoop -s (創(chuàng)建名為 hadoop 的庫)需要輸入數(shù)據(jù)庫密碼,然后我們?cè)賮砜?/p>

20、下工作空間ll /usr/kerberos/var/krb5kdc/多了以上幾個(gè)文件,運(yùn)行 kadmin.local 如果報(bào)錯(cuò)則刪除工作空間/usr/kerberos/var/krb5kdc/* 重新執(zhí)行 kdb5_util create -r hadoop s5.創(chuàng)建 kerberos 的管理員執(zhí)行 kadmin.local此次需要輸入管理員密碼6.修改 kdc.conf 修改 /usr/kerberos/var/krb5kdc/kdc.conf ,若沒有則新建該文件,編輯內(nèi)容kdcdefaultsacl_file = /usr/kerberos/var/krb5kdc/kadm5.acl

21、(管理員權(quán)限配置)dict_file = /usr/share/dict/words (加密字典,根據(jù)實(shí)際情況修改,可不改)admin_keytab = /usr/kerberos/var/krb5kdc/kadm5.keytabv4_mode = nopreauthrealmsHADOOP = master_key_type = des3-hmac-sha1supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal#加密算法7.配置 kadmin 的操作權(quán)限 簡單修改賦予所有權(quán)限編輯 /usr/kerberos/var/krb5

22、kdc/kadm5.acl ,若文件不存在 則新建該文件,編輯內(nèi)容如下:*/adminhadoop.server *8.配置/usr/kerberos/var/krb5kdc/kadm5.keytabkadmin.local -q "ktadd -k /usr/kerberos/var/krb5kdc/kadm5.keytab kadmin/admin" kadmin.local -q "ktadd -k /usr/kerberos/var/krb5kdc/kadm5.keytab kadmin/changepw"9.啟動(dòng) kdc、kadmin/etc/

23、init.d/kadmin start/etc/init.d/krb5kdc start 若沒找到相關(guān)命令則用以下命令替換/usr/kerberos/sbin/kadmin start/usr/local/sbin/krb5kdc start10 kerberos 操作kadmin.local: addprinc -randkey host/域名 / 生產(chǎn)本機(jī)的 host 隨機(jī) key 用于鑒權(quán) https 請(qǐng)求kadmin.local: addprinc -randkey hadoop/本機(jī)域名 /生產(chǎn)本機(jī)的 hadoop 隨機(jī) key 用戶啟動(dòng)datanode kadmin.local:

24、ktadd -k 本地路徑/hadoop.keytab hadoop/本機(jī)域名 host/本機(jī)域名Kinit -k -t keytab principle 申請(qǐng) principle Klist 查看生成的 principle Kdestroy 摧毀生成的 principle 三. 同步節(jié)點(diǎn)配置同步所有節(jié)點(diǎn)的 /etc/hosts 、 /etc/krb5.conf 為各個(gè)節(jié)點(diǎn)生成相應(yīng)的 keytab 文件Hadoop.keytab 包含 hadoop/_HOST、host/_HOST mapred.keytab 包含 mapred/_HOST 、host/_HOST 將 keytab 配置到統(tǒng)一

25、的路徑下 /opt/keys/*.keytab四. Hadoop 配置1. 配置 core-site.xml 并同步到所有節(jié)點(diǎn)<property><name>hadoop.security.authorization</name><value>true</value><description>Is service-level authorization enabled?</description></property><property><name>hadoop.securi

26、ty.authentication</name><value>kerberos</value><description>Possible values are simple (no authentication), and kerberos </description></property>2.配置 NameNode<!- kerberos -nameNode -config 修改 hdfs-site.xml -><property><name>dfs.https.address<

27、/name><value>namenodeHost:50470</value></property><property><name>dfs.https.port</name><value>50470</value></property><property><name>dfs.block.access.token.enable</name><value>true</value></property><pro

28、perty><name>node.keytab.file</name><value>/opt/keys/hadoop.keytab</value></property><property><name>node.kerberos.principal</name><value>hadoop/_HOSThdfs.server</value></property><property><name>

29、node.kerberos.https.principal</name><value>host/_HOSThdfs.server</value></property>3. 配置 secondNameNode - hdfs-site.xml <property><name>dfs.secondary.http.address</name><value>secnamenodeHost:50090</value></property><property><name

30、>dfs.secondary.https.address</name><value>:50495</value></property><property><name>dfs.secondary.https.port</name><value>50495</value></property><property><name>node.keytab.file</name><value&

31、gt;/opt/keys/hadoop.keytab</value></property><property><name>node.kerberos.principal</name><value>hadoop/_HOSThdfs.server</value></property><property><name>node.kerberos.https.principal</name><va

32、lue>host/_HOSThdfs.server</value></property>4.config datanode <!- kerberos DataNode config -><property><name>dfs.datanode.data.dir.perm</name><value>700</value><description>Permissions for the directories on on the local filesystem wherethe DF

33、S data node store its blocks. The permissions can either be octal or symbolic.</description></property><property><name>dfs.datanode.address</name><value>:1004</value></property><property><name>dfs.datanode.http.address</name>&l

34、t;value>:1006</value></property><property><name>dfs.datanode.keytab.file</name><value>/opt/keys/hadoop.keytab</value></property><property><name>dfs.datanode.kerberos.principal</name><value>hadoop/_HOSThdfs.server</v

35、alue></property><property><name>dfs.datanode.kerberos.https.principal</name><value>host/_HOSThdfs.server</value></property>- 另外更改 supergroup 為 hadoop$HADOOP_HOME/conf/hadoop-env.sh 新增一行export HADOOP_SECURE_DN_USER=hadoop 指定以 hadoop 身份啟動(dòng) datanode 如果是 64 位的

36、 jdk 則要更改 bin/hadoopexec "$HADOOP_HOME/libexec/jsvc.i386" 改為exec "$HADOOP_HOME/libexec/jsvc.amd64"利用 sudo 啟動(dòng)sudo start-dfs.sh 啟動(dòng) hdfs 成功5. 配置 mapred-site.xml <!- kerberos config -><!- JobTracker security configs -><property><name>mapreduce.jobtracker.kerbe

37、ros.principal</name><value>hadoop/_HOSThdfs.server</value></property><property><name>mapreduce.jobtracker.kerberos.https.principal</name><value>host/_HOSThdfs.server</value></property><property><name>mapreduce.jobtracker.keytab.

38、file</name><value>/opt/keys/hadoop.keytab</value></property>6.<!- TaskTracker security configs -><property><name>mapreduce.tasktracker.kerberos.principal</name><value>hadoop/_HOSThdfs.server</value></property><property><name&

39、gt;mapreduce.tasktracker.kerberos.https.principal</name><value>host/_HOSThdfs.server</value></property><property><name>mapreduce.tasktracker.keytab.file</name><value>/opt/keys/hadoop.keytab</value> <!- path to the MapReduce keytab -></pr

40、operty><!- TaskController settings -><property><name>mapred.task.tracker.task-controller</name><value>org.apache.hadoop.mapred.DefaultTaskController</value></property><property><name>mapreduce.tasktracker.group</name><value>hadoop&

41、lt;/value></property>配置$HADOOP_HOME/conf/taskcontroller.cfg mapred.local.dir=更改與 mapred-site.xml 同步hadoop.log.dir=#configured value of hadoop.log.dir. mapred.tasktracker.tasks.sleeptime-before-sigkill=2 mapreduce.tasktracker.group=hadoop(更改與 mapred-site.xml 同步)2.1.3 權(quán)限控制 Hadoop文件訪問控制

42、HDFS文件系統(tǒng)設(shè)計(jì)是模擬了Linux 的文件系統(tǒng),所以其對(duì)文件的屬性也是遵從Linux文件的屬性。每個(gè)文件擁有讀、寫、執(zhí)行三種操作,每個(gè)文件歸屬于一個(gè)所有者,歸屬于一個(gè)組。每個(gè)文件都定義了所有者擁有的操作,組用戶擁有的操作,其他用戶擁有的操作。這樣等于是三種不同的身份對(duì)三個(gè)不同的操作進(jìn)行排列組合一共擁有9種不同的配置策略。這樣的設(shè)計(jì)比較簡單但是其權(quán)限分配卻不夠靈活。我們可以發(fā)現(xiàn)Hadoop對(duì)于文件訪問控制依賴于組用戶的權(quán)限控制。而Hadoop默認(rèn)是使用客戶端組權(quán)限信息,也就是Hadoop本身并沒有存儲(chǔ)用戶的權(quán)限信息,而是在進(jìn)行用戶權(quán)限判斷的時(shí)候通過調(diào)用一個(gè)接口來獲取客戶端的用戶組信息,也就是

43、說如果在HDFS上存在某個(gè)用戶,但是在某個(gè)客戶端執(zhí)行操作的時(shí)候,客戶端并不存在該用戶對(duì)應(yīng)的組信息那么程序就會(huì)報(bào)錯(cuò)。此外,如果組信息依賴于客戶端機(jī)器的話也很容易使用戶的組信息被造假。如下圖2.3所示,程序員A與程序員C分別通過合法的客戶端連接到數(shù)據(jù)平臺(tái),如果某個(gè)用戶對(duì)client1 及client2 擁有了root的權(quán)限,那么他就可以模擬任何一個(gè)用戶,也可以更改任何一個(gè)用戶所對(duì)應(yīng)的客戶端組信息這樣就會(huì)導(dǎo)致一些本來沒有權(quán)限訪問的數(shù)據(jù)被其操作。除此之外連接到數(shù)據(jù)平臺(tái)的客戶端機(jī)器數(shù)量較多,如果每臺(tái)客戶機(jī)上都擁有一些相同的用戶組信息那么會(huì)導(dǎo)致用戶組信息的數(shù)據(jù)不一致性。圖2.3 讀取客戶端組配置如果想要對(duì)

44、某個(gè)用戶的組信息更改,則需要先知道哪幾臺(tái)客戶端機(jī)器擁有這個(gè)用戶的登陸信息,然后分別需要在這些機(jī)器上將其組信息全部進(jìn)行更改。這樣操作管理上極為不方便,有時(shí)候一些用戶的權(quán)限信息更改比較頻繁而且又比較迫切,這樣就會(huì)很難為管理員。綜上分析,我們發(fā)現(xiàn)Hadoop默認(rèn)Linux客戶端的組信息存在以下幾個(gè)不足之處:1.任何客戶端的不安全都會(huì)破壞集群的安全;2.客戶端機(jī)器眾多,映射關(guān)系數(shù)據(jù)的一致性比較困難;3.復(fù)雜的權(quán)限資源配置需求無法得到滿足;4.管理極其的不方便。 自定義用戶組策略默認(rèn)的用戶組策略存在著諸多問題,我們需要設(shè)計(jì)一個(gè)可以進(jìn)行自定義用戶組信息。平臺(tái)的用戶組信息不依賴于客戶端,而且是

45、集中式的。詳細(xì)設(shè)計(jì)如圖2.4所示,我們?cè)跀?shù)據(jù)平臺(tái)之外建立一個(gè)數(shù)據(jù)庫用來存儲(chǔ)用戶組映射關(guān)系,每次當(dāng)客戶端請(qǐng)求操作的時(shí)候,數(shù)據(jù)平臺(tái)就會(huì)在其緩存內(nèi)部尋找這個(gè)用戶的組信息,其中組信息是一個(gè)Map結(jié)構(gòu),一個(gè)用戶可以對(duì)應(yīng)于多個(gè)組,每個(gè)組直接的關(guān)系是并列的并無主次之分。這個(gè)Map組存在一個(gè)時(shí)間戳,系統(tǒng)也設(shè)置了數(shù)據(jù)的有效期,如果該Map組的產(chǎn)生的時(shí)間超過了有效期,系統(tǒng)會(huì)促發(fā)重新加載用戶組信息,直接從數(shù)據(jù)庫中讀取相應(yīng)的組信息。目前我們?cè)O(shè)置的有效期是5分鐘,也就是如果更改了某個(gè)用戶的權(quán)限信息,其需要經(jīng)過5分鐘才能生效到數(shù)據(jù)平臺(tái)。圖2.4 自定義組映射設(shè)計(jì)那么我們?cè)趯?shí)現(xiàn)上需要做哪些操作可以實(shí)現(xiàn)自定義組映射?其實(shí)Ha

46、doop在設(shè)計(jì)上已經(jīng)預(yù)留了接口,在配置hadoop.security.group.mapping的屬性可以將其值更改為我們自定義獲取組信息的方法。在這里我們重寫了getGroups的方法將其邏輯更改為讀取關(guān)系數(shù)據(jù)庫中的User_Group表。這樣不管用戶從哪個(gè)客戶端上執(zhí)行操作,用戶組信息都是一致的。用戶組信息的管理同樣還是交給管理員才處理,只不過之前是需要更改每臺(tái)客戶機(jī)上的用戶組信息,現(xiàn)在只需要更改數(shù)據(jù)庫中的一個(gè)表數(shù)據(jù),當(dāng)然我們?cè)O(shè)計(jì)了一個(gè)簡單的頁面供管理員操作,而不是直接更改數(shù)據(jù)庫。2.2 平臺(tái)規(guī)范2.2.1 目錄規(guī)范 根目錄結(jié)構(gòu) Logs 原始日志,按照業(yè)務(wù)劃分目錄 commo

47、ns 一些公用數(shù)據(jù),如ip信息、省份信息等work 工作空間,按照?qǐng)F(tuán)隊(duì)劃分目錄,分配權(quán)限 user 用戶空間、存儲(chǔ)私有數(shù)據(jù),僅自己能訪問操作 warehouse 主要存儲(chǔ)hive數(shù)據(jù)倉庫等,后續(xù)有可能存儲(chǔ)類似數(shù)據(jù)tmp 臨時(shí)空間,存儲(chǔ)臨時(shí)文件,定期刪除根目錄由平臺(tái)管理員統(tǒng)一規(guī)劃,普通用戶無法在根目錄下隨意創(chuàng)建文件及目錄,目前根目錄將按照上表所示的結(jié)構(gòu)存儲(chǔ)文件。2.1.2. commons規(guī)范該目錄下存儲(chǔ)的為一些公共數(shù)據(jù),比如ip,省市等數(shù)據(jù) 存儲(chǔ)規(guī)則如下: /頂級(jí)目錄/數(shù)據(jù)類別/文件名稱 命名規(guī)范:文件名統(tǒng)一用dim_XXX.bz2 2.1.3. workspace規(guī)范該目錄下存儲(chǔ)的

48、數(shù)據(jù)為各個(gè)團(tuán)隊(duì)計(jì)算出來的數(shù)據(jù)結(jié)果,按照子團(tuán)隊(duì)劃分目錄,存儲(chǔ)的數(shù)據(jù)即為各產(chǎn)品線上的生產(chǎn)數(shù)據(jù),該工作空間類似于團(tuán)隊(duì)間協(xié)作的空間,這里給出一個(gè)參考規(guī)范,具體規(guī)范可按照本團(tuán)隊(duì)的業(yè)務(wù)進(jìn)行調(diào)整。 存儲(chǔ)規(guī)則如下:/workspace/團(tuán)隊(duì)名稱/業(yè)務(wù)名稱/日志名稱/分區(qū)/日期/文件名稱 Workspace:為工作空間的名稱 團(tuán)隊(duì)名稱:目前分yda,tda,dm,ad,soku,iku等 業(yè)務(wù)名稱:根據(jù)每個(gè)團(tuán)隊(duì)內(nèi)部的業(yè)務(wù)情況確認(rèn)是否需要這一級(jí) 日志名稱:該目錄類似數(shù)據(jù)庫中的表面,能夠很清楚的知道該日志的業(yè)務(wù)含義(是否需要加t_?) 分區(qū):根據(jù)實(shí)際情況看是否需要該目錄 日期:統(tǒng)一格式y(tǒng)yyyMMdd 文件名稱: 團(tuán)隊(duì)名稱_日志名稱簡寫_分區(qū)縮寫_yyyyMMddhh.文件壓縮格式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論