版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Hadoop平臺搭建與應(yīng)用教案NO.1教師姓名授課班級授課形式理實一體化授課時間年月日 第周授課時數(shù)10授課章節(jié)名稱任務(wù)1.1認(rèn)知大數(shù)據(jù),完成系統(tǒng)環(huán)境搭建教學(xué)目的(1)熟悉大數(shù)據(jù)的概念和特征。(2)熟悉大數(shù)據(jù)分析流程和工具使用。(3)學(xué)會CentOS的安裝。(4)學(xué)會CentOS中常用命令的使用。教學(xué)重點CentOS中常用命令的使用教學(xué)難點CentOS中常用命令的使用更新、補(bǔ)充、刪節(jié)內(nèi)容課外作業(yè)熟練Hadoop的安裝與配置教學(xué)過程 教學(xué)提示教學(xué)過程 教學(xué)提示一.知識準(zhǔn)備.大數(shù)據(jù)背景知識大數(shù)據(jù)是時下IT界最炙手可熱的名詞,在全球引領(lǐng)了新一輪數(shù)據(jù)技術(shù)革命的浪潮,通過2012年的蓄勢待發(fā),2013年被稱為“世界大數(shù)據(jù)元年",標(biāo)志著世界正式步入了大數(shù)據(jù)時代。Hadoop從某些方面來講,與大數(shù)據(jù)結(jié)合緊密,它最擅長的就是高效地處理海量規(guī)模的數(shù)據(jù),它就是為大數(shù)據(jù)而生的。想要系統(tǒng)地認(rèn)知大數(shù)據(jù),必須要全面而細(xì)致地分解它,接下來將從3個層面展開介紹,如圖1T所示。第1個層面是理論。理論是認(rèn)知的必經(jīng)途徑,也是被廣泛認(rèn)同和傳播的基線。第2個層面是技術(shù)。技術(shù)是大數(shù)據(jù)價值體現(xiàn)的手段和前進(jìn)的基石。第3個層面是實踐,實踐是大數(shù)據(jù)的最終價值體現(xiàn)。人們分別從互聯(lián)網(wǎng)的大數(shù)據(jù)、政府的大數(shù)據(jù)、企業(yè)的大數(shù)據(jù)和個人的大數(shù)據(jù)4個方面出發(fā),去描繪大數(shù)據(jù)己經(jīng)展現(xiàn)的美好景象及即將實現(xiàn)的藍(lán)圖。(1)從理論層面認(rèn)知大數(shù)據(jù)大數(shù)據(jù)的特征定義。最早提出大數(shù)據(jù)時代到來的是麥肯錫咨詢公司。它是美國首屈一指的咨詢公司,是研究大數(shù)據(jù)的先驅(qū)。業(yè)界(IBM最早定義)將大數(shù)據(jù)的特征歸納為4個V。a.數(shù)據(jù)體量巨大(Volume):大數(shù)據(jù)的起始計量單位至少是PB(1000TB)、EB(10'Tb)或ZB(109TB)?b.數(shù)據(jù)類型繁多(Variety):如網(wǎng)絡(luò)日志、視頻、圖片、地理位置信息等。c.價值密度低,商業(yè)價值高(Value):由于數(shù)據(jù)采集的不及時,數(shù)據(jù)樣本的不全面、數(shù)據(jù)不連續(xù)等,可能會導(dǎo)致數(shù)據(jù)失真,但當(dāng)數(shù)據(jù)量達(dá)到一定規(guī)模時,可以通過更多的數(shù)據(jù)實現(xiàn)更真實全面的反饋。d.處理速度快(Velocity):大數(shù)據(jù)處理對處理速度有較高要求,一般要在秒級時間范圍內(nèi)給出分析結(jié)果,時間太長就失去了價值,這個速度要求是大數(shù)據(jù)處理技術(shù)和傳統(tǒng)的數(shù)據(jù)挖掘技術(shù)最大的區(qū)別。(2)從技術(shù)層面認(rèn)知大數(shù)據(jù)(3)從實踐層面認(rèn)知大數(shù)據(jù).大數(shù)據(jù)處理流程具體的大數(shù)據(jù)處理方法有很多,根據(jù)長時間的實踐,可以總結(jié)出一個基本的大數(shù)據(jù)處理流程。整個處理流程可以概括為4步,分別是采集、導(dǎo)入和預(yù)處理、統(tǒng)計與分析、挖掘。.大數(shù)據(jù)分析工具HadoopHadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架,其以一種可靠、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理。①HDFS(Hadoop分布式文件系統(tǒng)):Hadoop的HDFS是Hadoop體系中數(shù)據(jù)存儲管理的基礎(chǔ)。②MapReduce(分布式計算框架):MapReduce是一種計算模型,用于進(jìn)行大數(shù)據(jù)量的計算。③Hive(基于Hadoop的數(shù)據(jù)倉庫):Hive定義了一種類似SQL的查詢語言,將SQL轉(zhuǎn)換為MapReduce任務(wù)在Hadoop上執(zhí)行。④HBase(分布式列存數(shù)據(jù)庫):HBase是一個針對結(jié)構(gòu)化數(shù)據(jù)的可伸縮、高可靠、高性能、分布式和面向列的動態(tài)模式數(shù)據(jù)庫。⑤ZooKeeper(分布式協(xié)作服務(wù)):其用于解決分布式環(huán)境下的數(shù)據(jù)管理問題,主要是統(tǒng)一命名、同步狀態(tài)、管理集群、同步配置等。⑥Sqoop(數(shù)據(jù)同步工具):Sqoop是SQL-to-Hadoop的縮寫,主要用于在傳統(tǒng)數(shù)據(jù)庫和Hadoop之間傳輸數(shù)據(jù)。⑦Pig(基于Hadoop的數(shù)據(jù)流系統(tǒng)):Pig的設(shè)計動機(jī)是提供一種基于MapReduce的Ad-Hoc(計算在query時發(fā)生)數(shù)據(jù)分析工具。⑧Flume(日志收集工具):Flume是Cloudera開源的日志收集系統(tǒng),具有分布式、高可靠、高容錯、易于定制和擴(kuò)展的特點。⑨Oozie(作業(yè)流調(diào)度系統(tǒng)):Oozie是一個基于工作流引擎的服務(wù)器,可以運(yùn)行Hadoop的MapReduce和Pig任務(wù)。⑩Spark(大數(shù)據(jù)處理通用引擎):Spark提供了分布式的內(nèi)存抽象,其最大的特點就是快,是HadoopMapReduce處理速度的100倍。顯YARN(另一種資源協(xié)調(diào)者):YARN是一種新的Hadoop資源管理器,它是一個通用資源管理系統(tǒng),可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度,它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處。?Kafka(高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)):Kafka可以處理消費(fèi)者規(guī)模的網(wǎng)站中的所有動作流數(shù)據(jù)。任務(wù)1.1認(rèn)知大數(shù)據(jù),完成系統(tǒng)環(huán)境搭建(1)安裝CentOS系統(tǒng)(確保CentOS系統(tǒng)版本在7及以上,以便配合后續(xù)Docker安裝)。①在VMware中設(shè)置CentOS7鏡像,進(jìn)入后選擇第一項安裝CentOS7,如圖「8所示。②在新打開頁面中設(shè)置時間(DATE&TIME),分配磁盤(INSTALLATIONDESTINATION)和網(wǎng)絡(luò)設(shè)置(NETWORK&HOSTNAME)等,如圖1-9所示。③單擊“INSTALLATIONDESTINATION”鏈接,在打開的界面中選擇“Iwillconfigurepartitioning"選項,然后單擊"Done"按鈕,跳轉(zhuǎn)到分配磁盤頁面即可進(jìn)行磁盤分配,如圖「10所示。單擊"NETWORK&HOSTNAME"鏈接,可以進(jìn)行網(wǎng)絡(luò)和主機(jī)名稱設(shè)置,如圖1-11所④單擊圖1-9安裝設(shè)置頁面中的"BeginInstallation"按鈕,在新打開界面中分別設(shè)置root賬戶密碼和創(chuàng)建普通用戶,如圖1-12到圖1-14所示。在創(chuàng)建用戶界面,勾選第一個選項,可將創(chuàng)建的用戶設(shè)置為管理員,單擊"Done"按鈕,完成創(chuàng)建操作。安裝操作完成后,單擊"Reboot”按鈕重啟操作系統(tǒng),如圖1-15所示。⑤在用戶登錄提示后,輸入設(shè)置的賬號和密碼,進(jìn)入CentOS系統(tǒng),如圖1-16所CentOS中常用命令的使用①常用文件和目錄操作命令有"cd”“1s”“11”“mkdir""rm”“cp""touch""pwd"“mv”“vi”等。②常用文件權(quán)限修改命令有"sudo”"chmod"“chown"等。③常用下載與壓縮命令有"tar""yuminstall"等。④靜態(tài)ip設(shè)置和遠(yuǎn)程連接。通過"ipaddr"命令查看自動分配的ip,此處ip為192.168.18.158,如圖1-17所示。在windows上可以通過網(wǎng)絡(luò)下載Xshell等遠(yuǎn)程登錄工具,以便可以遠(yuǎn)程登錄CentOS系統(tǒng),啟動遠(yuǎn)程軟件并新建會話,通過設(shè)置會話的名稱和要連接的主機(jī)IP,默認(rèn)連接端口為22號端口,設(shè)置遠(yuǎn)程登錄參數(shù),如圖1-18所示。單擊“確定"按鈕后,在新打開的界面中填寫要登錄的用戶名稱和密碼,再次單擊“確定”按鈕,即可實現(xiàn)遠(yuǎn)程登錄系統(tǒng),如圖1-19所示。任務(wù)1.2Docker安裝及基礎(chǔ)命令.在CentOS系統(tǒng)中安裝Docker(1)設(shè)置Docker存儲庫和相關(guān)配置(2)測試Docker(3)Docker的卸載隨后,通過執(zhí)行“yumremovecontainerd.iodocker-*"命令,卸載Docker及相關(guān)軟件,如圖1-20所示。最后,通過執(zhí)行"rm-rf/var/lib/docker"命令,刪除Docker殘余文件,執(zhí)行"rm-rf/var/^5/containerd?,命令,刪除本地已存在的容器文件夾。.Docker常用命令Docker基礎(chǔ)命令啟動Docker的命令:systemctlstartdocker停止Docker的命令:systemctlstopdocker重啟Docker的命令:systemctlrestartdocker查看Docker狀態(tài)的命令::systemctlstatusdocker設(shè)置Docker開機(jī)自啟動的命令:systemctlenabledocker查看Docker概要信息的命令:dockerinfo查看Docker總體幫助文檔的命令:docker--help查看Docker命令幫助文檔的命令:docker具體命令--helpDocker相關(guān)鏡像操作的命令①列出本地主機(jī)上鏡像的命令為:dockerimages[options],[options]為可選參數(shù),常用參數(shù)有:"-a",表示列出所有本地鏡像;“-q”,表示只顯示鏡像ID(IMAGEID)②查找Docker鏡像的命令為:dockersearch[options]鏡像名稱,其中[options]為可選項,常用的參數(shù)有"limitN",表示列出N個鏡像,默認(rèn)為25個,"dockersearch"命令的執(zhí)行結(jié)果如圖1-21所示。③Docker鏡像下載的命令為:dockerpull鏡像名稱:TAG。如果下載鏡像時不指定標(biāo)簽,則默認(rèn)會下載倉庫中最新版本的鏡像,即選擇標(biāo)簽為latest標(biāo)簽。@Docker鏡像刪除的命令如下:刪除一個鏡像時:Dockerrmi-f鏡像名稱/鏡像ID;刪除全部鏡像時:Dockerrmi-f$(dockerimages-qa)。刪除多個鏡像時:Dockerrmi-f鏡像名1:TAG1鏡像名2:TAG2或Dockerrmi-f鏡像ID1鏡像ID2,多個鏡像間使用空格分隔。(3)新建Docker容器的命令創(chuàng)建一個新的Docker容器但不啟動的命令為:dockercreate[options]IMAGE[COMMAND][ARG...]o創(chuàng)建一個Docker容器并運(yùn)行它的命令為:dockerrun[options]IMAGE[COMMAND][ARG...]Docker啟動和停止的命令①啟動Docker的命令為:dockerstart容器ID/容器名稱②停止Docker的螟蛉畏:dockerstop容器ID/容器名稱(5)進(jìn)入和退出Docker的命令①進(jìn)入Docker第一種方式的命令為:dockerexec-i-1容器ID/名稱/bin/bash②進(jìn)入Docker第二種方式的命令為:dockerattach容器ID/名稱③退出方式:輸入"exit”命令或者使用"ctrl+p+q”組合鍵exec用exit退出時,不停止容器,attach用exit退出時,停止容器。(6)查看和刪除Docker的命令①查看運(yùn)行中的容器的命令為:dockerps②查看所有容器的命令為:dockerps-a。③刪除未啟動的容器的命令為:dockerrm容器ID/名稱。④強(qiáng)制刪除容器的命令為:dockerrm-f容器ID/名稱。該命令也可以用于刪除啟動中的容器。任務(wù)1.3Hadoop環(huán)境搭建.單機(jī)模式的安裝與配置(1)安裝JDK在Xshell登錄root用戶,在CentOS上輸入"systemtclstartdocker"啟動docker,然后執(zhí)行"systemctlstatusdocker"命令,檢查Docker的狀態(tài)。Hadoop是使用Java編寫的,所以需要安裝Java環(huán)境。將Centos中準(zhǔn)備好的TAR包,通過"dockercp宿主機(jī)TAR包存儲路徑容器名稱:容器存儲路徑”命令,將jdk拷貝到相應(yīng)的容器。進(jìn)入目標(biāo)Docker容器的存儲目錄中查看軟件包,并執(zhí)行“tar-zxvfjdk-8u341-linux-x64.tar.gz-C/usr/lib"命令,解壓Java的TAR包。解壓之后,切換到解壓目錄,重命名jdk文件夾名稱為jdkl.8.0。執(zhí)行"vi~/.bashrc"命令,編輯用戶環(huán)境變量,在.bashrc文件最后添加配置如下:exportJAVA_HOME=/usr/lib/jdkl.8.0PATH=$PATH:$JAVA_HOME/bin執(zhí)行"source~/.bashrc"命令,使新配置的環(huán)境變量立即生效,并執(zhí)行"java-version"命令,驗證java安裝是否成功。(2)安裝Hadoop2.7.7首先,在Docker容器的存儲目錄中執(zhí)行"tar-zxvfhadoop-2.7.7.tar.gz-C/usr/local"命令,對Hadoop進(jìn)行解壓,并切換目錄為解壓目錄,重命名hadoop-2.7.7為hadoopo其次,執(zhí)行"vi~/.bashrc"命令,配置用戶環(huán)境變量,在文件最后添加配置如下:exportHAD00P_H0ME=/usr/local/hadoopPATH=$PATH:$HAD00P_H0ME/bin:$HAD00P_H0ME/sbin執(zhí)行“source~/.bashrc"命令,使新配置的環(huán)境變量立即生效。
(3)配置Hadoop執(zhí)行“cd/usr/local/hadoop/etc/hadoop"命令,切換到hadoop目錄中,執(zhí)行"vimhadoop-env.sh"命令。此時,vi編輯器處于"命令”模式,在英文輸入狀態(tài)下,按下并釋放"i"鍵,切換vi編輯器為"插入"模式,找到"#exportJAVA_H0ME=${JAVA_HOME},若有"#”,將注釋符號"#”去掉,并設(shè)置好川K路徑。(4)配置SSH免密登錄(5)驗證Hadoop單機(jī)模式是否安裝成功2.偽分布式模式的安裝與配置(1)創(chuàng)建有端口映射的docker容器(2)設(shè)置密碼,安裝川K、Hadoop以及相關(guān)軟件設(shè)置密碼,通過yum安裝openssh,openssh-clients,openssh-server,net-tools,whicho隨后,安裝JDK、Hadoop并配置環(huán)境變量(步驟詳見單機(jī)模式的安裝與配置)。(3)配置SSH免密登錄(3)Hadoop配置進(jìn)入/usr/local/hadoop/etc/hadoop中,酉己置core-site,xml、hdfs-site.xml、mapred-site.xml、yarn-site,xml文件(4)格式化HDFS切換到Hadoop的安裝目錄,執(zhí)行命令“./bin/hdfsnamenode-format”,格式化節(jié)點,如果在返回的信息中看到"Exitingwithstatus0",則表示執(zhí)行格式化成功。(5)驗證測試在任意目錄中,執(zhí)行命令"start-all.sh",啟動hadoop集群,操作命令如下。[root?masterhadoop]#start-all.sh
Hadoop平臺搭建與應(yīng)用教案NO.2教師姓名授課班級授課形式理實一體化授課時間年月日 第周授課時數(shù)6授課章節(jié)名稱項目2Hive環(huán)境搭建與基本操作教學(xué)目的(1)了解Hive產(chǎn)生的背景、Hive架構(gòu)。(2)識記HiveSQL常用語句。(3)學(xué)會Hive的安裝與配置。(4)學(xué)會Hive的基本操作。教學(xué)重點Hive的安裝與配置教學(xué)難點Hive的基本操作更新、補(bǔ)充、刪節(jié)內(nèi)容課外作業(yè)熟練Hive的安裝與配置教學(xué)過程 教學(xué)提示教學(xué)過程 教學(xué)提示項目2Hive環(huán)境搭建與基本操作任務(wù)2.1Hive的安裝與配置Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的SQL查詢功能,將類SQL語句轉(zhuǎn)換為MapReduce任務(wù),如圖27所示,并執(zhí)行此任務(wù)。HiveSQL- )Hive解釋、轉(zhuǎn)換為MapReduce*MapReduce運(yùn)行圖2-1將類SQL語句轉(zhuǎn)換為M叩Reduce任務(wù)Hive數(shù)據(jù)結(jié)構(gòu)Hive中所有的數(shù)據(jù)都存儲在HDFS中,Hive中包含以下數(shù)據(jù)結(jié)構(gòu)。Table:Hive中的Table和數(shù)據(jù)庫中的Table在概念上是類似的,每一個TabIe在Hive中都有一個相應(yīng)的目錄存儲數(shù)據(jù)。Partition(可選):在Hive中,表中的—1^Partition對應(yīng)于表中的—1^目錄,所有的Partition的數(shù)據(jù)都存儲在對應(yīng)的目錄中。Bucket(可選):Bucket對指定列計算Hash,Partition根據(jù)某個列的Hash值散列到不同的Bucket中,目的是進(jìn)行并行處理,每一個Bucket對應(yīng)一個文件。Hive架構(gòu)Hive架構(gòu)如圖2-2所示。Hadoop和MapReduce是Hive架構(gòu)的基礎(chǔ)。用戶接口主要有CLI客戶端、HiveServer客戶端、HWI客戶端和HUE客戶端(開源的ApacheHadoopUI系統(tǒng)),其中最常用的是CLI客戶端。在CLI客戶端啟動時,會同時啟動一個Hive副本。在Windows中,可通過JDBC連接HiveServer的圖形界面工具,包括SQuirreISQLClient、OracIeSQLDeveIoper及DbVisuaIizer。HWI通過瀏覽器訪問Hive,通過Web控制臺與Hadoop集群進(jìn)行交互來分析及處理數(shù)據(jù)。MetaStore用于存儲和管理Hive的元數(shù)據(jù),使用關(guān)系數(shù)據(jù)庫來保存元數(shù)據(jù)信息(MySQL、Derby等),Hive中的元數(shù)據(jù)包括表的名稱、表的列和分區(qū)及其屬性、表的屬性(是否為外部表等)、表的數(shù)據(jù)所在目錄等。Hive通過解釋器、編譯器和優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化到查詢計劃的生成。生成的查詢計劃存儲在HDFS中,隨后由MapReduce調(diào)用。大部分的查詢、計算由MapReduce來完成。Hive與傳統(tǒng)關(guān)系型數(shù)據(jù)庫的對比使用Hive的命令行接口很像操作關(guān)系型數(shù)據(jù)庫,但是Hive和關(guān)系型數(shù)據(jù)庫有很大的不同,具體如下。Hive和關(guān)系型數(shù)據(jù)庫存儲文件的系統(tǒng)不同,Hive使用的是Hadoop的HDFS(Hadoop的分布式文件系統(tǒng)),關(guān)系型數(shù)據(jù)庫使用的是服務(wù)器本地的文件系統(tǒng)。Hive使用的計算模型是MapReduce,而關(guān)系型數(shù)據(jù)庫使用的是自己設(shè)計的計算模型。(3)關(guān)系型數(shù)據(jù)庫都是為實時查詢的業(yè)務(wù)而設(shè)計的,而Hive是為海量數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘而設(shè)計的,實時性很差。因此,Hive的應(yīng)用場景和關(guān)系型數(shù)據(jù)庫有很大的不同。Hive架構(gòu)的基礎(chǔ)是Hadoop,因此很容易擴(kuò)展自己的存儲能力和計算能力,而關(guān)系型數(shù)據(jù)庫在此方面要差很多。Hive的執(zhí)行流程executeQuery:Hive界面包含命令行和WebUI,其將查詢發(fā)送到Driver(任意數(shù)據(jù)庫驅(qū)動程序,如JDBC、ODBC等)中執(zhí)行。getPlan:Driver根據(jù)查詢編譯器解析Query語句,驗證Query語句的語法、查詢計劃或者查詢條件。getMetaData:編譯器將元數(shù)據(jù)請求發(fā)送給Metastore(任意數(shù)據(jù)庫)。sendMetaData:Metastore將元數(shù)據(jù)作為響應(yīng)發(fā)送給編譯器。sendPlan:編譯器檢查要求并重新發(fā)送Driver的計劃。此時,查詢的解析和編譯完成。executePlan:Driver將執(zhí)行計劃發(fā)送到執(zhí)行引擎,在該過程中的執(zhí)行流程如下。fetchResuIts:Hive界面從Driver中提取結(jié)果。sendResults:執(zhí)行引擎發(fā)送合成值到Driver。fetchResult:Hive接口從執(zhí)行引擎提取結(jié)果。Hive工具中默認(rèn)使用的是Derby數(shù)據(jù)庫,該數(shù)據(jù)庫使用簡單,操作靈活,但是存在一定的局限性,Hive支持使用第三方數(shù)據(jù)庫(MySQL等),通過配置可以把MySQL集成到Hive工具中,MySQL功能更強(qiáng)大,企業(yè)應(yīng)用也更廣泛。.MySQL的安裝與配置(1)準(zhǔn)備MySQL安裝包,安裝依賴軟件在docker宿主機(jī)拷貝Mysql安裝包到容器內(nèi)。(2)安裝MySQL。創(chuàng)建simple目錄,并進(jìn)入安裝包所在目錄,通過"II"命令查看上一步拷貝到容器內(nèi)的安裝包。解壓mysql安裝包到"/simple"目錄,解壓后的目錄重命名為mysql(重命名操作是為了后續(xù)操作方便)。(3)配置環(huán)境變量,執(zhí)行命令"vim~/.bashrc”,在.bashrc文件最后增加配置如下。exportMYSQL_HOME=/simpIe/mysqIPATH=$PATH:$MYSQL_HOME/bin執(zhí)行命令"source~/.bashrc",使得環(huán)境變量立即生效。(4)用戶及權(quán)限相關(guān)配置添加mysqI組和mysqI用戶,執(zhí)行命令“groupaddmysqI”“useradd-r-gmysqImysqI”。進(jìn)入mysql所在的目錄,并更改其所屬的組和用戶。執(zhí)行命令"chgrp-RmysqI."和“chown-RmysqI.no執(zhí)行mysql_install_db腳本,對MySQL中的data目錄進(jìn)行初始化。注意,MySQL服務(wù)進(jìn)程mysqId運(yùn)行時會訪問data目錄,所以必須由啟動mysqId進(jìn)程的用戶(即之前設(shè)置的mysqI用戶)執(zhí)行此腳本,或者使用root用戶執(zhí)行此腳本。執(zhí)行命令時應(yīng)加上參數(shù)一user二mysqI,啟動過程中會生成密碼,將密碼復(fù)制并保存好,第一次登錄時需要用到。最后一條信息中的"tZYvmX:zD1)j"是登錄Mysql的初始密碼。在mysql目錄中,除了data目錄外,將其余目錄和文件均修改為root用戶所有,mysql用戶只需作為mysqI/data目錄中所有文件的所有者即可。(5)配置啟動文件為了再次啟動MySQL服務(wù)時,不需要切換到目錄bin,并通過./mysqId_safe-user二mysqI進(jìn)行啟動操作,對啟動文件進(jìn)行相應(yīng)的配置操作,以便使服務(wù)可以通過執(zhí)行u/etc/init.d/mysqI.serverstart”命令進(jìn)行啟動。進(jìn)入/etc/init.d目錄,編輯mysql文件。修改mysqI文件,在文件中修改2個目錄的位置,設(shè)置"basedir=/simple/mysqI"“datadir=/simpIe/mysqI/data”。啟動MySQL服務(wù)。執(zhí)行命令umysql-uroot-p",登錄MySQL,提示輸入密碼,將剛才復(fù)制的密碼粘貼到冒號后面,按"Enter"鍵,進(jìn)入MySQL命令行模式。進(jìn)入命令行模式后,為了方便登錄,需要修改密碼,這里執(zhí)行命令"setpasswordfor'root'?'IocaIhost'^password('123456');J,,將密碼修改為“123456”(也可以根據(jù)需要自行設(shè)定)。(6)任務(wù)測試重新啟動MySQL服務(wù)并進(jìn)行登錄(密碼使用"123456")。進(jìn)入MYSQL命令行后創(chuàng)建數(shù)據(jù)庫(提供給Hive使用)。如果登錄時忘記了密碼,則需要重新設(shè)定密碼。在mysql服務(wù)停止?fàn)顟B(tài)下,可以執(zhí)行命令“mysqId_safe—user二mysqI—skip-grant-tabIes—skip-networking&"跳過密碼驗證,之后打開一個新的窗口,此時可以免密進(jìn)入MySQL的命令行模式。免密登錄mysqlo在命令行中,使用"mysql"數(shù)據(jù)庫,執(zhí)行"UPDATEuserSETauthentication_string=PASSWORD('123456')whereUSER二’root';"命令,重置密碼,并執(zhí)行命令"flushprivileges"刷新權(quán)限。.基于HDFS和MySQL的Hive環(huán)境搭建(1)解壓Hive進(jìn)入存放安裝包的目錄,執(zhí)行命令"tar-zxvfapache-hive~1.2.1-bin.tar.gz-C/simple/”,把Hive安裝包解壓到/simple目錄中,執(zhí)行完解壓命令之后,在simple目錄中可以查看到解壓后的目錄uapache~hive~1.2.1-bin,J,修改目錄名稱為“hive1.2.1,JO(2)配置Hive解壓mysql-connector-java-5.1.40.tar.gz,進(jìn)入解壓目錄,拷貝驅(qū)動文件umysqI-connector-java-5.1.40-bin.jar,J到hivel.2.1目錄的lib目錄下。切換到目錄/simpIe/hive1.2.1/conf,編輯配置文件hive-env.sh、hive~site.xmlxhive-config.sho編輯環(huán)境變量~/.bashrco執(zhí)行命令"sourceV.bashrc",使配置的環(huán)境變量立即生效。隨后,執(zhí)行命令"start-alI.sh",啟動Hadoop服務(wù)后,執(zhí)行"./hive"命令。若正確進(jìn)入HiveShell環(huán)境,則表示Hive安裝配置成功。任務(wù)2.2Hive的應(yīng)用.創(chuàng)建表使用Hive創(chuàng)建表的語法格式如下。CREATE[TEMPORARY][EXTERNAL]TABLE[IFNOTEXISTS][db_name.]table_name[(col_namedata_type[COMMENTcol_comment],...)][COMMENTtable_comment][PARTITIONEDBY(col_namedata_type(COMMENTcol_comment],...)][CLUSTEREDBY(col_name,col_name,...)[SORTEDBY(col_name[ASC|DESC],...)]INTOnum_bucketsBUCKETS][SKEWEDBY(col_name,col_name,...)]ON((col_value,col_value,...),(col_value,col_value,...),...)[STOREDASDIRECTORIES][[ROWFORMATrow_format][STOREDASfile_format]|STOREDBY''[WITHSERDEPROPERTIES(...)]][LOCATIONhdfs_path][TBLPROPERTIES(property_name=property_value,...)][ASselect_statement];.修改表Hive中的修改表操作包括重命名表、添加列、更新列等。下面對Hive中的修改表操作進(jìn)行說明。〃重命名表操作ALTERTABLEtable_nameRENAMETOnew_table_name〃將emp表重命名為emp_newALTERTABLEempRENAMETOemp_new;〃添加/更新列操作ALTERTABLEtable_nameADD|REPLACECOLUMNS(col_namedata_type[COMMENTcol_comment],...)〃創(chuàng)建測試表createtablestudent(idint,ageint,namestring)rowformatdelimitedfieldsterminatedby*\t*;〃添加一列addressaltertablestudentaddcolumns(addressstring);〃更新所有的列altertablestudentreplacecolumns(idint,namestring);.查看Hive數(shù)據(jù)庫、表的相關(guān)信息
下面對查看Hive數(shù)據(jù)庫和表的相關(guān)信息的操作進(jìn)行說明。〃查看所有數(shù)據(jù)庫showdatabases;〃查看數(shù)據(jù)庫中的表showtables;〃查看表的所有分區(qū)信息showpartitionstable_name;〃查看Hive支持的所有函數(shù)showfunctions;〃查看表的信息descextendedt_name;〃查看更加詳細(xì)的表信息descformattedtable_name;4.使用LOAD將文本文件的數(shù)據(jù)加載到Hive表中LOAD語法的格式如下。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]LOAD操作只是單純的復(fù)制/移動操作,將數(shù)據(jù)文件移動到Hive表對應(yīng)的位置。fi1epath可以是相對路徑,也可以是絕對路徑。如果指定了LOCAL關(guān)鍵字,則LOAD命令會查找本地文件系統(tǒng)中的filepath;如果沒有指定LOCAL關(guān)鍵字,則根據(jù)INPATH中的URI查找文件,此處需包含模式的完整URI。如果使用了OVERWRITE關(guān)鍵字,則目標(biāo)表(或者分區(qū))中的內(nèi)容會被刪除,并將filepath指向的文件/目錄中的內(nèi)容添加到表/分區(qū)中。如果目標(biāo)表(分區(qū))已經(jīng)有一個文件,并且文件名和filepath中的文件名沖突,那么現(xiàn)有的文件會被新文件所覆蓋。下面通過實例說明LOAD的相關(guān)操作。5.使用INSERT語句將查詢結(jié)果插入到Hive表中INSERT語法的格式如下。INSERTOVERWRITETABLEtablenamel[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement為測試操作創(chuàng)建原始數(shù)據(jù)表如下。DROPTABLEorder_4_partition;CREATETABLEorder_4_partition(orderNumberSTRING,event_timeSTRING)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t';loaddatalocalinpath'/home/hadoop/data/order.txt'overwriteintotableorder_4_partition;insertoverwritetableorder_partitionpartition(event_month='2017-07')select*fromorder_4_partition;6.使用INSERT語句將Hive表中的數(shù)據(jù)導(dǎo)出到文件系統(tǒng)中使用INSERT語句將Hive表中的數(shù)據(jù)導(dǎo)出到文件系統(tǒng)中的語法格式如下。INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1SELECT...FROM...7.基本的SELECT查詢SELECT語法的格式如下。SELECT[ALL|DISTINCT]select_expr,select_expr,..FROMtable_reference[WHEREwhere_condition][GROUPBYcolJist[HAVINGcondition]][CLUSTERBYcolJist|[DISTRIBUTEBYcol」ist][SORTBY|ORDERBYcolJist]][LIMITnumber].Hive函數(shù)字符串長度函數(shù)為length,語法格式為length(stringA)。字符串反轉(zhuǎn)函數(shù)為reverse,語法格式為reverse(stringA)o字符串連接函數(shù)為concat,語法格式為concat(stringA,stringB…)。帶分隔符字符串連接函數(shù)為concat_ws,語法格式為concat_ws(stringSEP,stringA,stringB…)。字符串截取函數(shù)為substr、substring,語法格式為substr(stringA,intstart)\substring(stringA,intstart)o返回指定字符個數(shù)的字符串截取函數(shù)為substr,語法格式為substr(stringA,intstart,intIen)。字符串小寫字母轉(zhuǎn)換為大寫字母的函數(shù)為upper,語法格式為upper(stringA)。字符串大寫字母轉(zhuǎn)換為小寫字母的函數(shù)為lower,語法格式為lower(stringA)o刪除字符串兩側(cè)空格的函數(shù)為trim,語法格式為trim(stringA)。刪除字符串左側(cè)空格的函數(shù)為Itrim,語法格式為ltrim(stringA)。刪除字符串右側(cè)空格的函數(shù)為rtrim,語法格式為rtri右stringA)o正則表達(dá)式替換函數(shù)為regexp_replace,語法格式為regexp_repIace(stringA,stringB,C),即將字符串A中的符合正則表達(dá)式B的部分替換為C。正則表達(dá)式解析函數(shù)為regexp_extract,語法格式為regexp_extract(stringsubject,stringpattern,intindex),即將字符串subject按照正則表達(dá)式pattern的規(guī)則拆分,返回指定的index字符。URL解析函數(shù)為parse_urI,語法格式為parse_urI(stringurIString,stringpartToExtract[,stringkeyToExtract]),該函數(shù)返回URL中指定的部分。partToExtract的有效值為HOST、PATH、QUERY、REF、PROTOCOLxAUTHORITYXFILE和USERINFOoJSON解析函數(shù)為get_json_object,語法格式為get_json_object(stringjson_string,stringpath),用于解析字符串json_string,返回path指定的內(nèi)容;如果輸入的JSON字符串無效,那么返回NULL??崭褡址瘮?shù)為space,語法格式為space(intn)o重復(fù)字符串函數(shù)為repeat,語法格式為repeat(stringstr,intn)。首字符轉(zhuǎn)換為ASCII的函數(shù)為ascii,語法格式為ascii(stringstr),用于返回字符串str第一個字符的ASCIIo左補(bǔ)足函數(shù)為Ipad,語法格式為Ipad(stringstr,intlen,stringpad),用于將str用pad左補(bǔ)足到len位。右補(bǔ)足函數(shù)為rpad,語法格式為rpad(stringstr,intlen,stringpad),用于將str用pad右補(bǔ)足到len位。分割字符串函數(shù)為spIit,語法格式為split(stringstr,stringpat),用于按照pat字符串分割str,返回分割后的字符串?dāng)?shù)組。集合查找函數(shù)為find_in_set,語法格式為find_in_set(stringstr,stringstrList),返回str在strList中第一次出現(xiàn)的位置,strList是用逗號分割的字符串,如果沒有找str字符,則返回0。.分區(qū)表操作在Hive中,SELECT查詢一般會掃描整張表的內(nèi)容,該操作將會導(dǎo)致查詢性能的下降,同時,大部分查詢操作實際上只需要掃描表中部分?jǐn)?shù)據(jù),因此,為了解決這個問題,Hive在創(chuàng)建表時引入了partition概念。Hive中分區(qū)表指的是在創(chuàng)建表時指定的partition的分區(qū)空間。Hive可以將數(shù)據(jù)按照某列或者某些列進(jìn)行分區(qū)管理,目前互聯(lián)網(wǎng)應(yīng)用每天都要存儲大量的日志文件,其中存儲日志必然會產(chǎn)生日志日期的屬性,因此,在產(chǎn)生分區(qū)時,可以按照產(chǎn)生日志的日期列進(jìn)行劃分,把每天的日志當(dāng)作一個分區(qū)。Hive將數(shù)據(jù)組織成分區(qū),主要是為了提高數(shù)據(jù)的查詢速度。而存儲的每一條記錄到底存儲到哪個分區(qū)中是由用戶決定的,即用戶在加載數(shù)據(jù)的時候必須顯式地指定該部分?jǐn)?shù)據(jù)存儲到哪個分區(qū)中。假設(shè)在Hive創(chuàng)建的表中存在id、content、d_date、d_time4列,其創(chuàng)建分區(qū)表的操作如下。在表定義時創(chuàng)建單分區(qū)表,按數(shù)據(jù)產(chǎn)生的日期屬性進(jìn)行分區(qū)。在表定義時創(chuàng)建雙分區(qū)表,按數(shù)據(jù)產(chǎn)生的日期和時間屬性進(jìn)行分區(qū)。如果表已創(chuàng)建,則可以在此基礎(chǔ)上添加分區(qū),語法格式如下。ALTERTABLEtable_nameADDpartition_spec[LOCATION'location1']partition_spec[LOCATION'location2*]如果分區(qū)已經(jīng)存在,則可以對分區(qū)進(jìn)行刪除操作,語法格式如下。ALTERTABLEtable_nameDROPpartition_spec,partition_spec,...將數(shù)據(jù)加載到分區(qū)表中的語法的格式如下。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcoll=vall,partcol2=val2…)]查看分區(qū)操作語法的格式如下。showpartitionstable_name;.分桶操作Hive會根據(jù)列的哈希值進(jìn)行桶的組織。因此對于每一張表(Table)或者分區(qū),Hive可以進(jìn)一步組織成桶,也就是說,桶是更為細(xì)粒度的數(shù)據(jù)范圍劃分??梢哉f分區(qū)表是數(shù)據(jù)粗粒度的劃分,而分桶操作是數(shù)據(jù)細(xì)粒度的劃分。當(dāng)數(shù)據(jù)量較大時,為提高分析與計算速度,勢必需要采用多個Map和Reduce進(jìn)程來加快數(shù)據(jù)的處理。但是如果輸入文件只有一個,Map任務(wù)就只能啟動一個。此時,對數(shù)據(jù)進(jìn)行分桶操作將會是一個很好的選擇,即通過指定CLUSTERED的字段,將文件通過計算列的哈希值分別分割成多個小文件,從而增加Map任務(wù),以提高數(shù)據(jù)分析與計算的速度。向這種帶桶的表中導(dǎo)入數(shù)據(jù)有以下兩種方式。(1)將外部生成的數(shù)據(jù)導(dǎo)入到桶中。這種方式不會自動分桶,如果導(dǎo)入數(shù)據(jù)的表沒有進(jìn)行分桶操作,則需要對導(dǎo)入數(shù)據(jù)的表提前進(jìn)行分桶操作。LOADDATALOCALINPATH7home/hadoop/user.dafINTOTABLEt_user_buck;(2)向已創(chuàng)建的分桶表中插入數(shù)據(jù)。插入數(shù)據(jù)的表需要是已分桶且排序的表。執(zhí)行INSERT語句前不要忘記設(shè)置set
hive.enforce,bucketing=true,以強(qiáng)制采用多個Reduce進(jìn)行輸出。insertoverwritetablet_buckselectid,namefromt_buck_fromclusterby(id);分桶操作需要注意以下幾點。ORDERBY操作會對輸入進(jìn)行全局排序,只有一個Reducer,因此,當(dāng)輸入規(guī)模較大時,計算性能會降低。SORTBY操作不是全局排序,其在數(shù)據(jù)進(jìn)入Reducer前完成排序。因此,如果用SORTBY進(jìn)行排序,并且設(shè)置mapred.reduce.tasks>1,則SORTB丫只保證每個Reducer的輸出有序,不保證全局有序。DISTRIBUTEBY操作將根據(jù)指定的字段將數(shù)據(jù)分到不同的Reducer中,且分發(fā)算法是Hash算法。CLUSTERBY操作除了具有DISTRIBUTEBY操作的功能之外,還會對該字段進(jìn)行排序。創(chuàng)建分桶并不意味著LOAD操作導(dǎo)入的數(shù)據(jù)也是分桶的,因此,必須先進(jìn)行分桶操作,再進(jìn)行LOAD操作。Hadoop平臺搭建與應(yīng)用教案NO.3教師姓名授課班級授課形式理實一體化授課時間年月日 第周授課時數(shù)6授課章節(jié)名稱項目3ZooKeeper環(huán)境搭建與應(yīng)用
教學(xué)目的(1)了解ZooKeeper的功能。(2)識記ZooKeeper與Hadoop各組件的功能與聯(lián)系。(3)學(xué)會ZooKeeper集群的搭建與配置。(4)學(xué)會ZooKeeper節(jié)點管理的相關(guān)命令。教學(xué)重點ZooKeeper集群的搭建與酉己置教學(xué)難點ZooKeeper節(jié)點管理的相關(guān)命令更新、補(bǔ)充、刪節(jié)內(nèi)容課外作業(yè)熟練ZooKeeper集群的搭建與配置教學(xué)過程教學(xué)提示項目3ZooKeeper環(huán)境搭建與應(yīng)用任務(wù)3.1ZooKeeper的安裝與配置ZooKeeper是一個開源的分布式協(xié)調(diào)服務(wù),由雅虎公司創(chuàng)建,是GoogIeChubby的開源實現(xiàn)。分布式應(yīng)用程序可以基于ZooKeeper實現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master選舉、分布式鎖和分布式隊列等功能。在分布式環(huán)境中,協(xié)調(diào)和管理服務(wù)是一個復(fù)雜的過程。ZooKeeper通過其簡單的架構(gòu)和API解決了這個問題。ZooKeeper允許開發(fā)人員專注于核心應(yīng)用程序邏輯,而不必?fù)?dān)心應(yīng)用程序的分布式特性。1.分布式應(yīng)用在進(jìn)一步深入學(xué)習(xí)之前,先了解一下關(guān)于分布式應(yīng)用的優(yōu)點和面臨的問題,這有利于理解ZooKeeper的優(yōu)勢。分布式應(yīng)用具有很多優(yōu)點,諸如單個或幾個系統(tǒng)的故障不會使整個系統(tǒng)出現(xiàn)故障等。其可以在需要時提高系統(tǒng)性能,通過添加更多機(jī)器,在應(yīng)用程序配置中進(jìn)行微小的更改,而不用停止整個系統(tǒng)的執(zhí)行。這樣可以隱藏系統(tǒng)的復(fù)雜性,并將其顯示為單個實體/應(yīng)用程序。同時,分布式應(yīng)用也面臨著諸多挑戰(zhàn),諸如兩個或多個機(jī)器嘗試執(zhí)行特定任務(wù),共享資源只能在任意給定時間內(nèi)由單個機(jī)器修改而引發(fā)的競爭條件設(shè)定問題;可能引發(fā)兩個或多個操作無限期等待彼此完成操作的死鎖問題;數(shù)據(jù)操作的部分失敗導(dǎo)致數(shù)據(jù)的不一致問題。分布式應(yīng)用程序提供了很多好處,但它們也拋出了一些復(fù)雜和難以解決的挑戰(zhàn)。ZooKeeper框架提供了一個完整的機(jī)制來克服所有的挑戰(zhàn)。競爭條件設(shè)定和死鎖故障問題通過安全同步方法進(jìn)行規(guī)避。數(shù)據(jù)的不一致性通過ZooKeeper使用原子性解析來應(yīng)對。ZooKeeper是由集群(節(jié)點組)使用的一種服務(wù),用于在自身之間進(jìn)行協(xié)調(diào),并通過穩(wěn)健的同步技術(shù)維護(hù)共享數(shù)據(jù)。ZooKeeper本身是一個分布式應(yīng)用程序,為寫入分布式應(yīng)用程序提供服務(wù)。ZooKeeper提供的常見服務(wù)如下。(1)命名服務(wù):該服務(wù)按名稱標(biāo)識集群中的節(jié)點。它類似于DNS,但僅應(yīng)用于節(jié)點。(2)配置管理:該服務(wù)可以加入節(jié)點最近的和最新的系統(tǒng)配置信息。(3)集群管理:該服務(wù)實時地在集群和節(jié)點狀態(tài)中加入/離開節(jié)點。(4)選舉算法:該服務(wù)選舉一個節(jié)點作為協(xié)調(diào)目的的Leader。(5)鎖定和同步服務(wù):該服務(wù)在修改數(shù)據(jù)的同時鎖定數(shù)據(jù)。此機(jī)制可幫助用戶在連接其他分布式應(yīng)用程序(如ApacheHBase)時進(jìn)行自動故障恢復(fù)。(6)高度可靠的數(shù)據(jù)注冊表:其能保證在一個或幾個節(jié)點關(guān)閉時仍然獲得數(shù)據(jù)。ZooKeeper的基本概念ZooKeeper的架構(gòu)。ZooKeeper中的組件如表3-1所示。表3TZooKeeper中的組件部分描述Client(客戶端)客戶端是分布式應(yīng)用集群中的一個節(jié)點,從服務(wù)器訪問信息。對于特定的時間間隔,每個客戶端都向服務(wù)器發(fā)送消息以使服務(wù)器知道客戶端是活躍的。類似的,當(dāng)客戶端連接時,服務(wù)器發(fā)送確認(rèn)碼。如果連接的服務(wù)器沒有響應(yīng),則客戶端會自動將消息重定向到另一個服務(wù)器Server(服務(wù)器)服務(wù)器是ZooKeeper總體中的一個節(jié)點,為客戶端提供所有的服務(wù)。向客戶端發(fā)送確認(rèn)碼以告知服務(wù)器是活躍的EnsembIeZooKeeper的服務(wù)器組,形成EnsembIe所需的最小節(jié)點數(shù)為3Leader服務(wù)器節(jié)點,如果任意連接的節(jié)點失敗,則執(zhí)行自動恢復(fù)功能。Leader在服務(wù)啟動時被選舉Follower跟隨Leader指令的服務(wù)器節(jié)點(2)層次命名空間。圖3-3描述了用于內(nèi)存表示的ZooKeeper文件系統(tǒng)的樹結(jié)構(gòu),即ZooKeeper數(shù)據(jù)結(jié)構(gòu)。ZooKeeper節(jié)點稱為znode。每個znode由一個名稱標(biāo)識,并用路徑(/)分隔。在圖3-3中,有一個由"/"分隔的znode;在根目錄中有兩個邏輯命名空間:即config和workersoconfig命名空間用于集中式配置管理,workers命名空間用于命名。在config命名空間下,每個znode最多可存儲1MB的數(shù)據(jù)。這與UNIX文件系統(tǒng)相類似,此外父znode也可以存儲數(shù)據(jù)。這種結(jié)構(gòu)的主要目的是存儲同步數(shù)據(jù)并描述znode的元數(shù)據(jù)。此結(jié)構(gòu)稱為ZooKeeper數(shù)據(jù)模型。ZooKeeper數(shù)據(jù)模型中的每個znode都維護(hù)著一個stat結(jié)構(gòu)。一個stat僅提供一個znode的元數(shù)據(jù)。它由版本號、操作控制列表、時間戳和數(shù)據(jù)長度組成。①版本號:每個znode都有版本號,這意味著當(dāng)與znode相關(guān)聯(lián)的數(shù)據(jù)發(fā)生變化時,其對應(yīng)的版本號也會增加。當(dāng)多個ZooKeeper客戶端嘗試在同一znode上執(zhí)行操作時,版本號的使用就很重要了。②操作控制列表:其基本上是訪問znode的認(rèn)證機(jī)制,管理著所有znode讀取和寫入操作。③時間戳:時間戳表示創(chuàng)建和修改znode所經(jīng)過的時間。它通常以毫秒為單位。ZooKeeper從"事務(wù)ID"(zxid)標(biāo)示znode的每次更改。zxid是唯一的,并且為每個事務(wù)保留時間,以便可以輕松地確定從一個請求到另一個請求所經(jīng)過的時間。④數(shù)據(jù)長度:存儲在znode中的數(shù)據(jù)的總量是數(shù)據(jù)長度,最多可以存儲1MB的數(shù)據(jù)。znode的類型。znode被分為持久(persistent)節(jié)點、臨時(ephemeral)節(jié)點和順序(sequential)節(jié)點。①持久節(jié)點:即使在創(chuàng)建該特定znode的客戶端斷開連接后,持久節(jié)點仍然存在。默認(rèn)情況下,所有znode都是持久節(jié)點。②臨時節(jié)點:客戶端活躍時,臨時節(jié)點就是有效的。當(dāng)客戶端與ZooKeeper集群斷開連接時,臨時節(jié)點會自動刪除。因此,臨時節(jié)點不允許有子節(jié)點。如果臨時節(jié)點被刪除,則下一個合適的節(jié)點將填充其位置。臨時節(jié)點在Leader選舉中起到了重要作用。③順序節(jié)點:順序節(jié)點可以是持久的或臨時的。當(dāng)一個新的znode被創(chuàng)建為一個順序節(jié)點時,ZooKeeper將把一個10位的序列附加到原始名稱后以設(shè)置znode的路徑。例如,將具有路徑/myapp的znode創(chuàng)建為順序節(jié)點,則ZooKeeper會將路徑更改為/myapp0000000001,并將下一個序列號設(shè)置為0000000002。如果兩個順序節(jié)點是同時創(chuàng)建的,那么ZooKeeper將對每個znode使用不同的數(shù)字序列。順序節(jié)點在鎖定和同步中起到了重要作用。(4)會話。會話(Sessions)對于ZooKeeper的操作非常重要。會話中的請求按先入先出(FirstInFirstOut,FIFO)順序執(zhí)行。一旦客戶端連接到服務(wù)器,就建立會話并向客戶端分配會話IDo客戶端以特定的時間間隔發(fā)送心跳信號以保持會話有效。如果ZooKeeper集群在服務(wù)器開啟時設(shè)定的期間內(nèi)(會話超時),沒有從客戶端接收到心跳信號,則它會判定客戶端死機(jī)。會話超時通常以毫秒為單位。當(dāng)會話由于任何原因結(jié)束時,在該會話期間創(chuàng)建的臨時節(jié)點也會被刪除。(5)監(jiān)視。監(jiān)視(Watches)是一種簡單的機(jī)制,可以使客戶端收到關(guān)于ZooKeeper集群中的更改通知。客戶端可以在讀取特定znode時設(shè)置WatchesoWatches會向注冊的客戶端發(fā)送任何znode(客戶端注冊表)更改的通知。znode更改是指與znode相關(guān)的數(shù)據(jù)修改,或者znode的子項數(shù)據(jù)修改。其只觸發(fā)一次Watcheso如果客戶端想要再次通知,則必須通過另一個讀取操作來完成。當(dāng)連接會話過期時,客戶端將與服務(wù)器斷開連接,相關(guān)的Watches也將被刪除。ZooKeeper工作流ZooKeeper集群啟動后,它將等待客戶端連接??蛻舳藢⑦B接到ZooKeeper集群中的一個節(jié)點。它可以是Leader或Follower節(jié)點??蛻舳诉B接成功后,節(jié)點將向特定客戶端分配會話ID,并向該客戶端發(fā)送確認(rèn)信號。如果客戶端沒有收到確認(rèn)信號,則將嘗試連接ZooKeeper集群中的另一個節(jié)點。連接節(jié)點成功后,客戶端將以有規(guī)律的間隔向節(jié)點發(fā)送心跳信號,以確保連接不會丟失。如果客戶端想要讀取特定的znode,則其將會向具有znode路徑的節(jié)點發(fā)送讀取請求,相關(guān)節(jié)點會從自己的數(shù)據(jù)庫中查詢znode路徑,并返回信息給請求的znodeo因此,在ZooKeeper集合中,讀取速度很快。如果客戶端想要將數(shù)據(jù)存儲在ZooKeeper集合中,則會將znode路徑和數(shù)據(jù)發(fā)送到服務(wù)器中。連接的服務(wù)器將該請求轉(zhuǎn)發(fā)給Leader,Leader將向所有的Follower重新發(fā)出寫入請求。如果大部分節(jié)點成功響應(yīng),則寫入請求成功,否則,寫入請求失敗。ZooKeeper中各組件的工作流程描述如表3-2所示。表3-2ZooKeeper中各組件的工作流程描述組件描述寫入(write)寫入過程由Leader節(jié)點處理。Leader節(jié)點將寫入請求轉(zhuǎn)發(fā)到所有znode中,并等待znode的回復(fù)。如果有一半的znode回復(fù),則寫入過程完成讀取(read)讀取由特定連接的znode在內(nèi)部執(zhí)行,因此不需要與集群進(jìn)行交互復(fù)制數(shù)據(jù)庫(RepIicatedDatabase)它用于在ZooKeeper中存儲數(shù)據(jù)。每個znode都有自己的數(shù)據(jù)庫,每個znode在一致性的幫助下每次都有相同的數(shù)據(jù)LeaderLeader是負(fù)責(zé)處理寫入請求的znodeFollowerFollower從客戶端接收寫入請求,并將它們轉(zhuǎn)發(fā)到Leader節(jié)點請求處理器(RequestProcessor)只存在于Leader節(jié)點中。它管理來自Follower節(jié)點的寫入請求原子廣播(AtomicBroadcasts)負(fù)責(zé)廣播從Leader節(jié)點到Follower節(jié)點的變化ZooKeeperLeader選舉如何在ZooKeeper集合中選舉Leader節(jié)點呢?考慮一個集群中有"個節(jié)點,Leader選舉的過程如下。(1)所有節(jié)點創(chuàng)建具有相同路徑/app/leadejelection/guid—的順序、臨時節(jié)點。(2)ZooKeeper集合將附加一個10位序列到路徑中,創(chuàng)建的znode將是/app/leaderelection/guid_0000000001、/app/leaderelection/guid_0000000002等。(3)對于給定的實例,在znode中創(chuàng)建最小數(shù)字的節(jié)點成為Leader,而其他節(jié)點均為FoIIower。(4)每個Follower節(jié)點監(jiān)視下一個具有最小數(shù)字的znode。例如,創(chuàng)建的znode/app/1eadereIection/guid_0000000008節(jié)點將監(jiān)視znode/app/1eader_eIection/guid_0000000007,創(chuàng)建的znode/app/1eader_election/guid_0000000007節(jié)點將監(jiān)視znode/app/1eadereIection/guid_0000000006o(5)如果Leader關(guān)閉,則其相應(yīng)的znode會被刪除。(6)下一個在線Follower節(jié)點將通過監(jiān)視器獲得關(guān)于Leader移除的通知。(7)下一個在線Follower節(jié)點將檢查是否存在其他具有最小數(shù)字的znode。如果沒有,其將承擔(dān)Leader的角色;否則,其找到的創(chuàng)建的具有最小數(shù)字的znode節(jié)點將承擔(dān)Leader的角色。(8)類似的,其他Follower節(jié)點選舉創(chuàng)建的具有最小數(shù)字的znode節(jié)點作為LeaderoLeader選舉是一個復(fù)雜的過程,但ZooKeeper服務(wù)使它非常簡單。ZooKeeper的安裝ZooKeeper的安裝分為3種模式:單機(jī)模式、偽集群模式和集群模式。)ZooKeeper的單機(jī)模式安裝。在這種模式下,沒有ZooKeeper副本,如果ZooKeeper服務(wù)器出現(xiàn)故障,ZooKeeper服務(wù)將會停止。這種模式主要應(yīng)用在測試或Dem。情況中,在生產(chǎn)環(huán)境中一般不會采用。)ZooKeeper的偽集群模式安裝。偽集群模式就是在單機(jī)中模擬集群的ZooKeeper服務(wù)。在ZooKeeper的參數(shù)配置中,clientPort參數(shù)用來配置客戶端連接ZooKeeper的端口。偽集群模式是使用每個配置文檔模擬一臺機(jī)器,也就是說,需要在單臺機(jī)器中運(yùn)行多個ZooKeeper實例,但是必須保證各個配置文檔的cIientPort不沖突。)ZooKeeper的集群模式安裝。在這種模式下可以獲得可靠的ZooKeeper服務(wù),只要集群中的大多數(shù)ZooKeeper服務(wù)啟動了,那么總的ZooKeeper服務(wù)就是可用的。集群模式與偽集群模式配置最大的不同是,ZooKeeper實例分布在多臺機(jī)器上。ZooKeeper中的Watcher機(jī)制在ZooKeeper中,引入了Watcher■機(jī)制來實現(xiàn)分布式的通知功能。ZooKeeper允許客戶端向服務(wù)端注冊一個Watcher監(jiān)聽,當(dāng)服務(wù)器端的一些指定事件觸發(fā)了這個Watcher時,其會向指定客戶端發(fā)送一個事件通知,以便實現(xiàn)分布式的通知功能。ZooKeeper的Watcher機(jī)制主要包括客戶端線程、客戶端WatchManager和ZooKeeper服務(wù)器3部分。其具體工作流程如下:客戶端在向ZooKeeper服務(wù)器注冊Watcher的同時,會將Watcher對象存儲在客戶端的WatchManager中;當(dāng)ZooKeeper服務(wù)器端觸發(fā)Watcher事件后,會向客戶端發(fā)送通知,客戶端線程從WatchManager中取出對應(yīng)的Watcher對象來執(zhí)行回調(diào)邏輯。任務(wù)3.2ZooKeeperCLI操作ZooKeeper命令行界面(CommandLineIinterface,CLI)用于與ZooKeeper集合進(jìn)行交互。要執(zhí)行ZooKeeperCLI操作,首先需要進(jìn)入節(jié)點的zookeeper/bin目錄,執(zhí)行命令“./zkServer.shstart”,啟動ZooKeeper集群服務(wù);再執(zhí)行命令“./zkCIi.sh”,使客戶端連接ZooKeeper服務(wù)器。.創(chuàng)建znodes創(chuàng)建節(jié)點的語法格式為create[~s][-e]pathdataacl其中,"path"用于指定路徑,由于ZooKeeper是一個樹形結(jié)構(gòu),所以創(chuàng)建"path”就是創(chuàng)建"path"節(jié)點;"data"是節(jié)點對應(yīng)的值,節(jié)點可以保存少量的數(shù)據(jù);Js]用于指定創(chuàng)建的節(jié)點類型為有序節(jié)點;[f]用于指定創(chuàng)建的節(jié)點類型為臨時節(jié)點,默認(rèn)情況下,所有znode都是持久節(jié)點,當(dāng)會話過期或客戶端斷開連接時,臨時節(jié)點(f)將被自動刪除;"acl"用來進(jìn)行權(quán)限控制。.讀取節(jié)點
與讀取相關(guān)的命令有Is和getoIs命令可以列出ZooKeeper指定節(jié)點的所有子節(jié)點,只能查看指定節(jié)點的第一級的所有子節(jié)點;get命令可以獲取ZooKeeper指定節(jié)點的數(shù)據(jù)內(nèi)容和屬性信息。相關(guān)命令的語法格式分別為1spath[watch]、getpath[watch]x1s2path[watch]oIs2與Is不同的是,它可以查看到time、version等信息。訪問順序節(jié)點,必須輸入znode的完整路徑(注意順序節(jié)點的命名)。.設(shè)置數(shù)據(jù)設(shè)置指定znode的數(shù)據(jù)。完成此設(shè)置操作后,可以使用"get"命令檢查數(shù)據(jù)。其語法格式為setpathdata[version]o其中,data就是要更新的內(nèi)容,version表示數(shù)據(jù)版本。如果在"get"命令中分配了watch選項,則輸出信息中將包含以下類似內(nèi)容:“WatchedEventstate:SyncConnectedtype:NodeDataChanged^o.創(chuàng)建znode子節(jié)點創(chuàng)建子節(jié)點類似于創(chuàng)建新的znodeo其區(qū)別在于子節(jié)點znode的路徑需包含父路徑。其語法格式為create/parent_path/subnode_pathdata。.檢查狀態(tài)狀態(tài)描述的是znode的元數(shù)據(jù)。它包含時間戳、版本號、ACL、數(shù)據(jù)長度和子znode等屬性。其語法格式為stat/patho.移除znode移除操作可移除指定的znode及其所有子節(jié)點。其操作需要在znode可用的情況下進(jìn)行。其語法格式為rmr/patho.刪除znode刪除znode的語法格式為delete/path。此命令類似于"rmr"命令,但它只適用于沒有子節(jié)點的znodeoHadoop平臺搭建與應(yīng)用教案NO.4教師姓名授課班級授課形式理實一體化授課時間年月日 第周授課時數(shù)6授課章節(jié)名稱項目4HBase環(huán)境搭建與基本操作
教學(xué)目的(1)了解HBase的產(chǎn)生背景、HBase架構(gòu)。(2)識記HBase常用操作。(3)學(xué)會HBase的安裝與配置。(4)學(xué)會HBaseShell命令的使用。教學(xué)重點HBase的安裝與配置教學(xué)難點HBaseShell命令的使用更新、補(bǔ)充、刪節(jié)內(nèi)容課外作業(yè)熟練HBase的安裝與配置教學(xué)提示教學(xué)過程
教學(xué)提示項目4HBase環(huán)境搭建與基本操作任務(wù)4.1HBase的安裝與配置HBase是建立在Hadoop文件系統(tǒng)之上的分布式面向列的數(shù)據(jù)庫。它是一個開源項目,是可橫向擴(kuò)展的。其類似于谷歌的BigTable,可以快速隨機(jī)訪問海量結(jié)構(gòu)化數(shù)據(jù)。它利用了Hadoop文件系統(tǒng)提供的容錯能力,是Hadoop的生態(tài)系統(tǒng),可以直接或通過HBase存儲HDFS數(shù)據(jù)。使用HBase可在HDFS中隨機(jī)訪問數(shù)據(jù),HBase在Hadoop的文件系統(tǒng)之上,并提供了讀寫訪問。HBase作為面向列的數(shù)據(jù)庫運(yùn)行在HDFS上,HDFS缺乏隨機(jī)讀寫操作,兩者存在較大的區(qū)別。HBase和HDFS的對照如表4-1所示。表4-1HBase和HDFS的對照HDFSHBaseDFS是適用于存儲大容量文件的分布t文件系統(tǒng)HBase是建立在HDFS之上的數(shù)據(jù)庫DFS不支持快速單獨記錄查找HBase可在較大的表中進(jìn)行快速查找DFS提供了高延遲批量處理,沒有批M里概念HBase提供了數(shù)十億條記錄低延遲訪問單個行記錄(隨機(jī)存取功能DFS提供的數(shù)據(jù)只能順序訪問HBase內(nèi)部使用了哈希表且提供隨機(jī)接入,其可存儲索引,7對在HDFS文件中的數(shù)據(jù)進(jìn)行快速查找J1.HBase的存儲機(jī)制在HBase中,數(shù)據(jù)存儲在具有行和列的表中。這似乎與關(guān)系型數(shù)據(jù)庫類似,但其實并不類似。關(guān)系型數(shù)據(jù)庫通過行與列確定一個要查找的值,而在HBase中通過行鍵、列(列族:列修飾符)和時間戳來查找一個確定的值。故關(guān)系型數(shù)據(jù)庫的表中值的映射關(guān)系為二維的,而HBase表中值的映射關(guān)系是多維的。下面通過官網(wǎng)給出的例子來理解HBase表的存儲結(jié)構(gòu)。其中,HBase數(shù)據(jù)結(jié)構(gòu)如表4-2所示。表4-2HBase數(shù)據(jù)結(jié)構(gòu)RowKeyTimeStampcontentsanchorpeopIecnnsi.commy.Iook.cahtml"com.cnn.www"t9"cnn""com.cnn.www"t8"""com.cnn.www"t6"htmI...""com.cnn.www"t5"htmI...""com.cnn.www"t3"htmI..."表4-2描述的是一個名稱為webtable的表的部分?jǐn)?shù)據(jù)。(1)RowKey:表示一行數(shù)據(jù)com.cnn.www。(2)TimeStamp:表示表中每一個值對應(yīng)的版本。(3)列族:包含contents、anchor?和people3個列族。(4)列限ZE符:其中,contents列族有個列限/E符cnnsi.com;anchor列族有兩個列限/E符my.look,ca和html;people列族是仝列,即在HBase中沒有數(shù)據(jù)。(5)值:由{RowKey,TimeStamp,列族:列限定符}聯(lián)合確定的值。例如,值"cnn"由{com.cnn.www,t9,contents:cnnsi.com}聯(lián)合確定。下面通過概念視圖和物理視圖來進(jìn)一步講述HBase表的存儲。2.概念視圖在HBase中,從概念層面上講,表4-2中展現(xiàn)的是由一組稀疏的行組成的表,期望按列族(contentsVanchor和peopIe)物理存儲,并且可隨時將新的列限定符(、my.look,ca、html等)添加到現(xiàn)有的列族中。每一個值都對應(yīng)一?"個時間戳,每行RowKey中的值相同??梢詫⑦@樣的表想象成一個大的映射關(guān)系,通過行鍵、行鍵+時間戳或行鍵+列(列族:列修飾符),就可以定位指定的數(shù)據(jù)。由于HBase是稀疏存儲數(shù)據(jù)的,所以某些列可以是空白的??梢园堰@種關(guān)系用一個概念視圖來表示,如表4-3所示。表4-3HBase表的概念視圖RowKeyTimeStampCoIumnFamiIycontentsCoIumnFamilyanchor)om.cnn.wwwt9anchor:cnnsi.com="cnn"t8anchor:my.look.ca="cnn.com"t6contents:htmI="<htmI>..."t5contents:htmI="<htmI>..."t3contents:html="<htmI>..."在解析表4-3所示的數(shù)據(jù)模型前,先來熟悉以下幾個術(shù)語。(1)表格(Table):在表架構(gòu)中,需要預(yù)先聲明。(2)行鍵(RowLey):行鍵是數(shù)據(jù)行在表中的唯一標(biāo)志,并作為檢索記錄的主鍵。表4-3中,"com.cnn.www"就是行鍵的值。一個表中會有若干個行鍵,且行鍵的值不能重復(fù)。行鍵按字典順序排列,最低的順序先出現(xiàn)在表格中。按行鍵檢索一行數(shù)據(jù),可以有效地減少查詢特定行或指定行范圍的時間。在HBase中,訪問表中的行只有以下3種方式。①通過單個行鍵訪問。②按給定行鍵的范圍訪問。③進(jìn)行全表掃描。行鍵可以用任意字符串(字符串最大長度為64KB)表示并按照字典順序進(jìn)行存儲。對于經(jīng)常一起讀取的行,需要對行鍵的值進(jìn)行精心設(shè)計,以便它們放在一起存儲。(3)列族(ColumnFamily):列族和表格一樣需要在架構(gòu)表時被預(yù)先聲明,列族前綴必須由可輸出的字符組成。從物理上講,所有列族成員一起被存儲在文件系統(tǒng)中。ApacheHBase中的列限定符(Qualifier)被分組到列族中,不需要在架構(gòu)時定義,可以在表啟動并運(yùn)行時動態(tài)變換列。例如,表4-3中的contents和anchor就是列族,而它們對應(yīng)的列限定符(html、cnnsi.com、my.Iook.ca)在插入值時定義即可。(4)單元(CeII):-個{row,coIumn,version}元組精確地指定了HBase中的一?"^單元。(5)時間戳(TimeStamp):默認(rèn)取平臺時間,也可自定義時間,是一行列中指定的多個版本值中的某個值的版本標(biāo)志。例如,由{com.cnn.www,contents:html}確定3個值,這3個值可以被稱為值的3個版本,而這3個版本分別對應(yīng)的時間戳的值為t6、t5、t3o(6)值(VaIue):由{row,column,version}確定。例如,值cnn由{com.cnn.www,anchor:cnnsi.com,t9}確定。.物理視圖需要注意的是,表4-2中people列族在表4-3中并沒有體現(xiàn),原因是在HBase中沒有值的單元格并不占用內(nèi)存空間。HBase是按照列存儲的稀疏行/列矩陣,物理視圖實際上就是對概念視圖中的行進(jìn)行切割,并按照列族進(jìn)行存儲。表4-3所示的概念視圖在物理存儲的時候應(yīng)該表現(xiàn)的模式(即物理視圖)如表4-4所示。表4-4HBase表的物理視圖RowKeyTimeStampCoIumnFamiIyanchor"com.cnn.www"t9anchor:cnnsi.com="cnn"t8anchor:my.Iook.ca="cnn.com"t6"contents:htmI="<htmI>..
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 值班的管理制度
- 企業(yè)員工培訓(xùn)與績效提升制度
- 交通設(shè)施施工安全管理制度
- 2026年傳統(tǒng)文化與藝術(shù)文化遺產(chǎn)專家考試題目
- 2026年投資入門指南金融市場基礎(chǔ)知識筆試練習(xí)題
- 2026年國際漢語教師職業(yè)能力測試練習(xí)題
- 2026年網(wǎng)絡(luò)安全攻防技術(shù)考試題庫及答案詳解
- 2026年旅游行業(yè)從業(yè)者心理調(diào)適與應(yīng)對策略題
- 商超節(jié)日堆頭布置合同
- 2026年音樂療法體驗協(xié)議
- 綠化防寒合同范本
- 2025年中國礦產(chǎn)資源集團(tuán)所屬單位招聘筆試參考題庫附帶答案詳解(3卷)
- 煙草山東公司招聘考試真題2025
- 海爾管理會計案例分析
- 水果合同供貨合同范本
- 酒吧宿舍管理制度文本
- 數(shù)字化教學(xué)平臺的數(shù)據(jù)隱私保護(hù)策略
- TCD經(jīng)顱多普勒課件
- 2025年安徽歷年單招試題及答案
- 2025年考研英語真題試卷及答案
- 酒店治安安全管理制度范本
評論
0/150
提交評論