Oozie、Flume、Mahout配置與應用



-------------------------Oozie--------------------
【1、部署】    
1)部署Oozie服務端
[root@cMaster~]#sudo yum install oozie    #cMaster上以root權限執行,部署Oozie服務端
2)部署Oozie客戶端
[root@iClient~]f#sudo yum install oozie-client

【2、配置文件】
3)修改/etc/oozie/conf/oozie-env.sh文件
#export CATALINA_BASE=/var/lib/oozie/tomcat-deployment
export CATALINA_BASE=/usr/lib/oozie/oozie-server
# export OOZIE_CONFIG_FILE=oozie-site.xml
export OOZIE_CONFIG=/etc/oozie/conf
# export OOZIE_LOG=${OOZIE_HOME}/logs
export OOZIE_LOG=/var/log/oozie

4)追加/etc/hadoop/conf/core-site.xml內容:
<property><name>hadoop.proxyuser.oozie.groups</name><value>*</value></property>
<property><name>hadoop.proxyuser.oozie.hosts</name><value>*</value></property>    
【3、數據庫與jar配置】    
重啓Hadoop集羣,並建庫
$for x in `cd/etc/init.d;Is hadoop-*`;do service $x restart;done;    #`爲英文輸入狀態下 ,esc鍵下面那個【警告:不建議使用】除了iCleint外,其餘機器都要執行4)建立Oozie數據庫模式
[root@cMaster~]#sudo -u oozie /usr/lib/oozie/bin/ooziedb.sh create -run    #僅cMaster執行

[root@cMaster ~]#mkdir /tmp/ooziesharelib
[root@cMaster~]#cd /tmp/ooziesharelib
[root@cMaster~]# tar xzf /usr/lib/oozie/oozie-sharelib-yarn.tar.gz    #【重要】此處oozie-sharelib-yarn.tar.gz有可能爲/usr/lib/oozie/下文件夾,將其複製進/tmp/ooziesharelib便可
【4、啓動服務】
[root@cMaster~]#sudo service oozie start


應用是這裏注意一點:oozie job -oozie http://cMaster:11000/oozie  -config  【/usr/share/doc/oozie-4.0.0+cdh5.0.0+54/examples/apps/map-reduce/job.properties   爲本地路徑】  -run
      oozie job -oozie http://cMaster:11000/oozie  -config  job.properties  -run
HDFS 路徑:/user/【用戶名】root/examples/apps/map-reduce/    下存在job.properties等文件,即/user/【用戶名】root/examples/apps/map-reduce/被寫死
本地路徑:(相對路徑)進入本地job.properties等文件目錄下,如:
    進入  /usr/share/doc/oozie-4.0.0+cdh5.0.0+54/examples/apps/map-reduce/    目錄下job.properties存在的地方
——————————————————————如下冗餘————————————————————

Oozie部署 [21] Oozie至關於Hadoop的一個客戶端,所以集羣中只有一臺機器部署Oozie server端即 可,
    因爲能夠有任意多個客戶端鏈接Oozie,故每一個客戶端上都須部署Oozie client,
    本節 選擇在cMaster上部署Oozie server,在iClient上部署Oozie client。 
1)部署Oozie服務端
[root@cMaster~]#sudo yum install oozie    #cMaster上以root權限執行,部署Oozie服務端
2)部署Oozie客戶端
[root@iClient~]f#sudo yum install oozie-client
3)配置Oozie 修改/etc/oozie/conf/oozie-env.sh中的CATALINA_BASE屬性值,註釋原值並指定新 值,
    當此值指向oozie-server-0.20代表Oozie支持MRv1,指向oozie-server表示支持Yarn。
    注 意cMaster、iClient都要配置,並保持一致。
#export CATALINA_BASE=/usr/lib/oozie/oozie-server-0.20
export CATALINABASE=/usr/lib/oozie/oozie-server
在/etc/hadoop/conf/core-site.xml文檔裏configuration標籤間加入以下內容。
    注意,6臺機器都要更新這個配置,而且配置此屬性後,
    必定要重啓集羣中全部Hadoop服務,此屬性值才能生效。
<property><name>hadoop.proxyuser.oozie.groups</name><value>*</value></property>
<property><name>hadoop.proxyuser.oozie.hosts</name><value>*</value></property>

下面是重啓Hadoop集羣的命令:
$for x in 'cd/etc/init.d;Is hadoop-*';do service $x restart;done;    #除了iCleint外,其餘機器都要執行4)建立Oozie數據庫模式
[root@cMaster~]#sudo -u oozie /usr/lib/oozie/bin/ooziedb.sh create -run    #僅cMaster執行

5)配置Oozie Web頁面
[root@cMaster ~]#cd /var/lib/oozie/
[root@cMaster oozie]# sudo -u oozie wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip
[root@cMaster oozie]# sudo -u oozie unzip ext-2.2.zip

6)將Oozie經常使用Jar包導入HDFS
[root@cMaster~]# sudo -u hdfs hdfs dfs -mkdir /user/oozie
[root@cMaster~]#sudo -u hdfs hdfs dfs -chown oozie:oozie /user/oozie
[root@cMaster ~]#mkdir /tmp/ooziesharelib
[root@cMaster~]#cd /tmp/ooziesharelib
[root@cMaster~]# tar xzf /usr/lib/oozie/oozie-sharelib-yarn.tar.gz
[root@cMaster~]# sudo -u oozie hdfs dfs -put share /user/oozie/share

7)開啓Oozie服務
[root@cMaster~]#sudo service oozie start

8)查看Oozie服務
    當成功部署並在cMaster上開啓Oozie服務後,若是配置了ext-2.2,
    在iClient上的瀏覽器中打開「cmaster:11000」將顯示Oozie Web界面,
    也可使用下述命令查看Oozie工做狀態。
[root@iClient~]#oozie admin -oozie http://cMaster:11000/oozie -status




------------------------應用------
2.0ozie訪問接口
    Oozie最經常使用的是命令行接口,它的Web接口只能夠看到Oozie託管的任務,不能夠配置做業。
【例6-6】按要求完成問題:
    ①進入Oozie客戶端,查看經常使用命令。
    ②運行Oozie MR示例程序。
    ③運行OoziePig、Hive等示例。
    ④編寫workflow.xml,完成一次WordCount。
    ⑤編寫workflow.xml,完成兩次WordCount,且第一個WC的輸出爲第二個WC的輸入。

解答:對於問題①,在iClient上執行下述命令便可,用戶能夠是root或joe。
[root@iClient~]#sudo-u joe oozie help        #查看全部Oozie命令

對於問題②,首先解壓Oozie示例iar包,接着修改示例配置中的地址信息,最後上傳至集羣執行便可,讀者按下述流程執行便可。
[root@iClient~]#cd /usr/share/doc/oozie-4.0.0+cdh5.0.0+54
[root@iClient oozie-4.0.0+cdh5.0.0+54]# tar-zxvf oozie-examples.tar.gz

編輯examples/apps/map-reduce/job.properties,將以下兩行:
    nameNode=hdfs://localhost:8020
    job Tracker=localhost:8021替換成集羣如今配置的地址與端口:
nameNode=hdfs://cMaster:8020
job Tracker=cMaster:8032

接着將examples上傳至HDFS,使用oozie命令執行便可:
[root@iClient oozie-4.0.0+cdh5.0.0+54]#sudo -u joe hdfs dfs-put examples examples
[root@iClient oozie-4.0.0+cdh5.0.0+54]#cd
[root@iClient ~]#sudo -u joe oozie job -oozie http://cMaster:11000/oozie  -config  /usr/share/doc/oozie-
4.0.0+cdh5.0.0+54/examples/apps/map-reduce/job.properties  -run

    問題③其實和②是同樣的,讀者可按上述過程使用oozie執行Pig或Hive等的示例腳本。
    切記修改相應配置(如examples/apps/pig/job.properties)後,再上傳至集羣,
    執行時也要定位到相應路徑(如sudo-u joe oozie....../apps/pig/joe.properties-run)。
對於問題④,讀者可參考「examples/apps/map-reduce/workflow.xml」,
    其對應jar包在「examples/apps/map-reduce/lib」下,
    其下的DemoMapper.class和DemoReducer.class就是WordCount的代碼,
    對應的源代碼在「examples/src」下,可按以下步驟完成此問題。

(1)編輯文件「examples/apps/map-reduce/workflow.xml」,找到下述內容:
    <property>
    <name>mapred.mapper.class</name><value>org.apache.oozie.example.SampleMapper</value>
    </property>
    <property>
    <name>mapred.reducer.class</name><value>org.apache.oozie.example.SampleReducer</value>
    </property>
將其替換成:
<property>
<name>mapred.mapper.class</name><value>org.apache.oozie.example.DemoMapper</value>
</property>
<property>
<name>mapred.reducer.class</name><value>org.apache.oozie.example.DemoReducer</value>
</property>
<property><name>mapred.output.key.class</name><value>org.apache.hadoop.io.Text</value></property>
<property>
<name>mapred.output.value.class</name><value>org.apache.hadoop.io.IntWritable</value>
</property>2)接着將原來HDFS裏examples文件刪除,按問題②的解答,
    上傳執行便可,這裏只給出刪除原examples的命令,上傳和執行命令和問題②解答同樣。
[root@iClient~]#sudo -u joe hdfs dfs -rm -r -f  examples    #刪除HDFS原examples文件

(3)接着將examples上傳至HDFS,使用oozie命令執行便可:
[root@iClient oozie-4.0.0+cdh5.0.0+54]#sudo -u joe hdfs dfs-put examples examples
[root@iClient oozie-4.0.0+cdh5.0.0+54]#cd
[root@iClient ~]#sudo -u joe oozie job -oozie http://cMaster:11000/oozie  -config  /usr/share/doc/oozie-
4.0.0+cdh5.0.0+54/examples/apps/map-reduce/job.properties  -run

****問題⑤是業務邏輯中最常遇到的情形,好比你的數據處理流 是:
    「M1」→「R1」→「Java1」→「Pig1」→「Hive1」→「M2」→「R2」→「Java2」
    ,單獨寫出各種或 腳本後,寫出此邏輯對應的workflow.xml便可。
    限於篇幅,下面只給出workflow.xml框 架,請讀者自行解決問題④。

    <workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
    <start to="mr-node"/>
    <action name="mr-node">
    <map-reduce>第一個wordcount配置</map-reduce>
    <ok to="mr-wc2"/><error to="fail"/>
    </action>
    <action name="mr-wc2">
    <map-reduce>第二個wordcount 配置</map-reduce>
    <ok to="end"/><error to="fail"/>
    </action>
    <kill name="fail">
    <message>Map/Reduce failed error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
    </workflow-app>






















——————————————————————————Flume——————————————————————
1.Flume部署 [21] 集羣中只有一臺機器部署Flume就能夠接收數據了,
    此外下面的例題中還要有一臺機 器作爲數據源,負責向Hadoop集羣發送數據,
    故須在cMaster與iClient上部署Flume。 
(1)部署Flume接收端
[root@cMaster~]#sudo yum install flume-ng-agent    #在cMaster上部署Flume

(2)部署Flume發送端
[root@iClient~]#sudo yum install flume-ng-agent    #在iClient上部署Flume



---------------應用
2.Flume訪問接口 Flume提供了命令行接口和程序接口,但Flume使用方式比較特別,
    不管是命令行還 是程序接口,都必須使用Flume配置文檔,
    這也是Flume架構思想之一——配置型工具。 
【例6-7】按要求完成問題:
    ①進入Flume命令行,查看經常使用命令。
    ②要求發送端 iClient使用telnet向cMaster發送數據,而接收端cMaster開啓44444端口接收數據,
        並將收到 的數據顯示於命令行。
    ③要求發送端iClient將本地文件「/home/joe/source.txt」發往接收端 cMaster,
        而接收端cMaster將這些數據存入HDFS。
    ④根據問題③,接收端cMaster開啓接 收數據的Flume服務,既然此服務能接收iClient發來的數據,
        它必然也能夠接收iHacker機 器(黑客)發來的數據,問如何儘可能減小端口攻擊,並保證數據安全。 
解答:對於問題①,直接在iClient上執行以下命令便可
[root@iClient~]#flume-ng        #查看Flume經常使用命令


對於問題②,首先須要在cMaster上按要求配置並開啓Flume(做爲接收進程被動接收 數據),
    接着在iClient上使用telnet向cMaster發送數據,具體過程參見以下幾步。 
    在cMaster上以root權限,新建文件「/etc/flume/conf/flume.conf」,
    並填入以下內容:接 着在cMaster上使用此配置之前臺方式開啓Flume服務
-----------------------------------------------------------------------------------------------
#命令此處agent名爲al,並命名此al的sources爲rl,channels爲cl,sinks爲kl 
a1.sources=r1
a1.channels=c1
a1.sinks=k1

#定義sources相關屬性:即此sources在cMaster 上開啓44444端口接收以netcat協議發來的數據
a1.sources.r1.type=netcat 
a1.sources.r1.bind=cMaster 
a1.sources.r1.port=44444

#定義channels及其相關屬性,此處指定這次服務使用memory 暫存數據
a1.channels.c1.type=memory 
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

#定義此sink爲logger類型sink:即指定sink直接將收到的數據輸出到控制檯
a1.sinks.k1.type=logger

#將sources關聯到channels,channels 關聯到sinks上
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
---------------------------------------------------------------------------------------------
[root@cMaster~]#flume-ng agent -c  /etc/flume-ng/  -f  /etc/flume-ng/conf/flume.conf -n a1

此時,接收端cMaster已經配置好並開啓了,接下來須要開啓發送端,在iClient上執行:
[root@iClient~]# telnet cMaster 44444







    此時向此命令行裏隨意輸入數據並回車,telnet會將這些數據發往cMaster,再次回到 cMaster上執行命令的那個終端,
    會發現剛纔在iClient裏輸入的數據發送到了cMaster的終 端裏。若是想退出iClient終端裏的telnet,
    按Ctrl+]組合鍵(即同時按住Ctrl鍵和]鍵),回 到telnet後輸入「quit」命令回車便可,
    至於退出cMaster上的Flume,直接按Ctrl+C組合鍵。
 問題③的回答步驟較多。 首先,在cMaster上新建文件「/etc/flume-ng/conf/flume.conf.hdfs」,並填入以下內容
-----------------------------------------------------------------------------------------------
#命令此處agent名爲al,並命名此al的sources爲rl,channels爲c1,sinks爲k1
a1.sources=r1
a1.sinks=k1
a1.channels=c1

#定義sources類型及其相關屬性
#即此sources爲avro類型,且其在cMaster上開啓4141端口接收avro協議發來的數據
a1.sources.r1.type=avro 
a1.sources.r1.bind=cMaster 
a1.sources.r1.port=4141

#定義channels類型其實相關屬性,此處指定這次服務使用memory 暫存數據
a1.channels.c1.type=memory

#定義此sink爲HDFS類型的sink,且此sink將接收的數據以文本方式存入HDFS指定目錄
a1.sinks.k1.type=hdfs 
a1.sinks.k1.hdfs.path=/user/joe/flume/cstorArchive 
a1.sinks.k1.hdfs.file Type=DataStream

#將sources關聯到channels,channels 關聯到sinks上
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
-----------------------------------------------------------------------------------------------

接着,在iClient上新建文件「/root/businessLog」,並填入以下內容:
--------------------------------------
ccccccccccccccccccccc
ssssssssssssssssssssssss
tttttttttttttttttttttttttttttttttt
oooooooooooooooooo
rrrrrrrrrrrrrrrrrrrrrrrrrrrrr
--------------------------------------






iClient上還要新建文件「/etc/flume-ng/conf/flume.conf.exce」,並填入以下內容:
-----------------------------------------------------------------------------------------------
#命令此處agent名爲al,並命名此al的sources爲rl,channels爲c1,sinks爲k1
a1.sources=r1
a1.channels=c1
a1.sinks=k1

#定義sources類型及其相關屬性,此sources爲exce類型
#其使用Linux cat 命令讀取文件/root/businessLog,接着將讀取到的內容寫入channel 
a1.sources.r1.type=exec
a1.sources.r1.command=cat /root/businessLog

#定義channels及其相關屬性,此處指定這次服務使用memory 暫存數據
a1.channels.c1.type=memory

#定義此sink爲avro類型sink,即其用avro協議將channel裏的數據發往cMaster的4141端口
a1.sinks.k1.type=avro 
a1.sinks.k1.hostname=cMaster 
a1.sinks.k1.port=4141

#將sources關聯到channels,channels 關聯到sinks上
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
-----------------------------------------------------------------------------------------------


至此,發送端iClient和接收端cMaster的Flume都已配置完成。如今須要作的是在 HDFS裏新建目錄,
    並分別開啓接收端Flume服務和發送端Flume服務,步驟以下。 在cMaster上開啓Flume,
    其中「flume-ng…a1」命令表示使用flume.conf.hdfs配置啓動 Flume,
    參數a1便是配置文件裏第一行定義的那個a1
[root@cMaster ~]#sudo -u joe hdfs dfs      -mkdir flume    #HDFS裏新建目錄/user/joe/flume
[root@cMaster ~]#sudo -u joe flume-ng agent -c  /etc/flume-ng/  -f  /etc/flume-ng/conf/flume.conf.hdfs -n a1

最後,在iClient上開啓發送進程,與上一條命令相似,這裏的a1,即flume.conf.exce 定義的a1:
[root@iClient~]#flume-ng agent -c/etc/flume-ng/ -f /etc/flume-ng/conf/flume.conf.exce -n a1

    此時,用戶在iClient端口裏打開「cMaster:50070」,依次進入目 錄「/user/joe/flume/cstorArchive」,
    將會查看到從iClient上傳送過來的文件。 










—————————————————————————— Mahout——————————————————————
1.Mahout部署 [21] 做爲Hadoop的一個客戶端,Mahout只要在集羣中或集羣外某臺客戶機上部署便可, 
    實驗中選擇在iClient上部署Mahout
[root@iClient ~]# sudo yum install mahout

2.Mahout訪問接口 Mahout提供了程序和命令行接口,
    經過參考Mahout已有的大量機器學習算法,程序 員也可實現將某算法並行化。 
【例6-8】要求以joe用戶運行Mahout示例程序naivebayes,實現下載數據,創建學習 器,訓練學習器,
    最後使用測試數據針對此學習器進行性能測試。
-------------------------------------------------------------------------
#!/bin/sh
#新建本地目錄,新建HDFS目錄
mkdir -p /tmp/mahout/20news-bydate /tmp/mahout/20news-all&&hdfs dfs -mkdir mahout

#下載訓練和測試數據集
curl http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz\  -o /tmp/mahout/20news-bydate.tar.gz

#將數據集解壓、合併,並上傳至HDFS 
cd /tmp/mahout/20news-bydate&&tar xzf /tmp/mahout/20news-bydate.tar.gz&&cd 
cp -R /tmp/mahout/20news-bydate/*/*/tmp/mahout/20news-all 
hdfs dfs -put /tmp/mahout/20news-all mahout/20news-all

#使用工具類seqdirectory 將文本數據轉換成二進制數據
mahout seqdirectory -i mahout/20news-all -o mahout/20news-seq -ow
-------------------------------------------------------------------------


解:首先須下載訓練數據集和測試數據,接着運行訓練MR和測試MR,可是,
    Mahout裏的算法要求輸入格式爲Value和向量格式的二進制數據,故中間還須加一些步 驟,
    將數據轉換成要求格式的數據,下面的腳本naivebayes.sh能夠完成這些動做
-------------------------------------------------------------------------
#使用工具類seq2sparse將二進制數據轉換成算法能處理的矩陣類型二進制數據
mahout seq2sparse -i mahout/20news-seq -o mahout/20news-vectors -lnorm -nv -wt  tfidf

#將總數據隨機分紅兩部分,第一部分約佔總數據80%,用來訓練模型
#剩下的約20%做爲測試數據,用來測試模型
mahout split -i mahout/20news-vectors/fidf-vectors --trainingOutput mahout/20news-train-vectors\
--testOutput mahout/20news-test-vectors\
--randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential

#訓練Naive Bayes模型
mahout trainnb -i mahout/20news-train-vectors  -e1 -o mahout/model -li mahout/labelindex -ow
#使用訓練數據集對模型進行自我測試(可能會產生過擬合)
mahout testnb -i mahout/20news-train-vectors -m mahout/model -l mahout/labelindex\
-ow -o mahout/20news-testing
#使用測試數據對模型進行測試
mahout testnb -i mahout/20news-test-vectors -m mahout/model -I mahout/labelindex\
-ow -o mahout/20news-testing
-------------------------------------------------------------------------




限於篇幅,腳本寫得簡陋,執行時,切記須在iClient上,以joe用戶身份執行,且只能 執行一次。
    再次執行時,先將全部數據所有刪除,執行方式以下
[root@iClient~]# cp naivebayes.sh /home/joe
[root@iClient~]# chown joe.joe naivebayes.sh
[root@iClient~]# sudo -u joe chmod +x naivebayes.sh
[root@iClient~]# sudo -u joe sh naivebayes.sh


腳本執行時,用戶能夠打開Web界面「cMaster:8088」,
    查看正在執行的Mahout任 務;還能夠經過Web界面「cMaster:50070」,
    定位到「/user/joe/mahout/」查看目錄變化
相關文章
相關標籤/搜索