標籤:des style blog http java color
軟體版本:
windows7: Tomcat7、JDK7、Spring4.0.2、Struts2.3、Hibernate4.3、myeclipse10.0、easyui;Linux(centos6.5):Hadoop2.4、Mahout1.0、JDK7;
使用Web工程調用Mahout的相關演算法,提供監控,查看任務的執行狀態。
自建Web項目,項目首頁如下:
1. 準備項目可以在http://download.csdn.net/detail/fansy1990/7600427(第一部分)、http://download.csdn.net/detail/fansy1990/7600463(第二部分)、http://download.csdn.net/detail/fansy1990/7600489(第三部分)下載。Hadoop使用官網提供的2.4版本,直接下載即可,然後配置(配置這裡不再贅述)、啟動各個服務,使用jps,可以看到下面的服務:
[[email protected] data]# jps6033 NodeManager5543 NameNode5629 DataNode5942 ResourceManager41611 Jps5800 SecondaryNameNode6412 JobHistoryServer
1.1 Hadoop包可以使用eclipse建立一個java項目,然後匯入Hadoop的包,測試是否可以串連叢集,匯入的包如下:修改紅色框裡面的mapred-default.xml、yarn-default.xml中的如下配置(node33是偽分布式Hadoop叢集機器的機器名):mapred-default.xml:
<property> <name>mapreduce.jobhistory.address</name> <value>node33:10020</value> <description>MapReduce JobHistory Server IPC host:port</description></property>
yarn-default.xml:
<name>yarn.application.classpath</name> <value>$HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/share/hadoop/common/*, $HADOOP_COMMON_HOME/share/hadoop/common/lib/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/*, $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*, $HADOOP_YARN_HOME/share/hadoop/yarn/*, $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*</value>
<name>yarn.resourcemanager.hostname</name> <value>node33</value>
注意classpath的路徑是叢集的相應路徑;還有是建立YARNRunner檔案,參考:http://blog.csdn.net/fansy1990/article/details/27526167。首先這樣測試,看是否可以串連叢集(直接運行一個MR任務,看是否執行),如果不行,肯定是有地方沒有設定對。1.2 Mahout包 匯入Mahout的包,Mahout的包擷取採用官網提供的方式,自行使用git下載,編譯得到,參考:http://mahout.apache.org/developers/buildingmahout.html(注意選擇使用Hadoop2的方式,由於這裡使用的是2.4 ,所以
mvn -Dhadoop2.version=2.4.1 -DskipTests clean install
)匯入的包有:建立檔案進行測試,看調用Mahout的演算法包是否可以正常運行,並不會報不相容JobContext和Job不相容的錯誤,如果報錯,說明編譯有問題(可以下載lz編譯好的)
2.設定項目可以在 http://download.csdn.net/detail/fansy1990/7600427(第一部分)、http://download.csdn.net/detail/fansy1990/7600463(第二部分)、http://download.csdn.net/detail/fansy1990/7600489(第三部分)下載,下載後需要配置:2.1 Hadoop相關配置(1)在1.準備中的把對應的node33改為自己的機器名;(2)去掉工程中WebRoot/lib/mahout-*-job.jar 中去掉javax.servlet 和javax.el目錄(不然無法啟動Tomcat,如果是自己編譯的話,如果是下載的則不用,已經去掉了);
(3)修改工程中src/com/fz/util/HadoopUtils檔案中的node33以及連接埠號碼改為自己的叢集機器名/IP和連接埠;(4)把工程src目錄的所有檔案打jar包上傳到雲平台mapreduce目錄下(否則會報類找不到的錯誤,lib目錄下面的mh2.1.jar);2.2 資料庫相關配置修改工程中Configuration/db.properties檔案中資料庫相應配置(資料庫暫時沒有使用到);2.3 Tomcat部署tomcat部署使用設定檔的方式:
<Context path ="/mh" docBase ="D:\workspase\hadoop_hbase\MahoutAlgorithmPlatform2.1\WebRoot" privileged ="true" reloadable ="false" > </Context>
項目部署名使用mn。3. 功能功能主要包括四個方面:叢集配置、叢集演算法監控、Hadoop模組、Mahout模組,data目錄提供測試資料;3.1 叢集配置模組啟動工程,開啟瀏覽器訪問http://localhost:8080/mh ,即可訪問項目,首頁看到的即是叢集配置。這裡需要說明的是在src/com/fz/util/HadoopUtils中不一定要修改,可以在叢集配置頁面中進行配置亦可;驗證叢集是否可以串連的代碼:
public int checkConnection(String fsStr,String rm) throws IOException{Configuration conf = new Configuration();conf.set("fs.defaultFS", fsStr);conf.set("yarn.resourcemanager.address", rm);conf.set("mapreduce.framework.name", "yarn"); FileSystem fs = FileSystem.get(conf);boolean fsOnline=fs.exists(new Path("/"));if(!fsOnline){return 1;}JobClient jc = new JobClient(conf);ClusterStatus cs = jc.getClusterStatus();if(!"RUNNING".equals(cs.getJobTrackerStatus().toString())){return 0;}// 叢集驗證成功HadoopUtils.setConf(conf);HadoopUtils.setFs(fs);// 通過判斷Hadoop.getConf()是否為null來確定是否已經配置過叢集return 3;}主要通過兩個方面:1、檢查HDFS檔案;2、檢查叢集狀態是否是running;配置完成後,點擊驗證,如果驗證成功,即可提示驗證成功:
3.2叢集演算法監控模組在叢集配置中,點擊驗證成功後,就會在任務監控頁面不停的發送訊息,擷取叢集任務啟動並執行狀態(間隔1.2秒,Ajax方式);當沒有任務啟動並執行時候,擷取任務運行狀態,會直接返回null。在Mahout模組或者Hadoop模組運行MR任務的時候,如果任務成功提交,那麼首先會根據此次提交啟動並執行MR任務的個數初始化任務資訊類。初始化,做的工作就是找到當前已經啟動並執行任務的ID,然後初始化接下來要運行任務的ID,如下代碼:
public static void initialCurrentJobs(int nextJobNum) throws IOException{/*if(list!=null&&list.size()==10){list.clear();}*/list.clear(); // 清空上次遺留JobStatus[] jbs=getJc().getAllJobs();JobID jID = findLastJob(jbs).getJobID();if(jID==null){// the first time start the cluster , will be fixed next time // TODO fix the buglog.info("The cluster is started before and not running any job !!!");}log.info("The last job id is :{}", jID.toString());for(int i=1;i<=nextJobNum;i++){CurrentJobInfo cj = new CurrentJobInfo();cj.setJobId(new JobID(jID.getJtIdentifier(),jID.getId()+i));list.add(cj);}}這裡需要注意的是,如果叢集是第一次啟動,且沒有運行MR任務的話,那麼擷取的任務ID為空白,無法初始化(這個在下個版本修複); 擷取當前運行任務的代碼如下:
public static List<CurrentJobInfo> getCurrentJobs() throws IOException{for(int i=0;i<list.size();i++){CurrentJobInfo iJob = list.get(i);RunningJob runningJob =findGivenJob(iJob.getJobId().toString());if(runningJob==null){break;}if(i==list.size()-1){ // 放在設定的前面finished=runningJob.isComplete();}iJob.setJobName(runningJob.getJobName());iJob.setJobIdStr(runningJob.getJobStatus().getJobID().toString());iJob.setMapProgress(Utils.toPercent(runningJob.mapProgress(),2));iJob.setRedProgress(Utils.toPercent(runningJob.reduceProgress(), 2));iJob.setState(JobStatus.getJobRunState(runningJob.getJobState())); // 有時map和reduce都到1時,此值仍是Running,需處理}return list;}擷取到任務資訊後,在任務監控介面就可以監控到任務的運行狀態。
3.3 Hadoop模組Hadoop模組目前包括5個小功能:上傳、下載、讀取、讀取聚類中心點、文本轉換為序列向量檔案。3.3.1 上傳、下載上傳下載都使用FileSystem的方法,分別是copyFromLocal 和copyToLocal 。介面只有兩個參數:
3.3.2 讀取、讀取聚類中心點讀取是按照每行資料來讀取的,可以選擇讀取的行數;讀取聚類中心,則是直接讀取序列檔案;讀取聚類中心向量代碼如下:
/** * 讀取聚類中心向量 * @param conf * @param centerPathDir * @return * @throws IOException */public static String readCenter(Configuration conf,String centerPathDir) throws IOException{StringBuffer buff = new StringBuffer();Path input = new Path(centerPathDir, "part-*");if(!HadoopUtils.getFs().exists(input)){return input+" not exist ,please check the input";}for(ClusterWritable cl:new SequenceFileDirValueIterable<ClusterWritable>(input, PathType.GLOB, conf)){buff.append(cl.getValue().asFormatString(null)).append("\n");}return buff.toString();}
3.3.3文本轉換為序列向量這個功能點是一個MR任務,提交任務後,可以在任務監控模組看到任務監控。主要的功能是把文字檔轉換為序列向量,為聚類提供輸入資料。需設定文本分隔字元:
監控資訊:
3.4 Mahout模組Mahout演算法模組主要是調用Mahout演算法庫中相關演算法,然後監控演算法運行狀態;3.4.1 聚類演算法聚類演算法暫時使用kmeans演算法,提供演算法相關參數(資料在data目錄的wine_kmeans.txt):
這裡提交任務使用多線程提交,這樣可以方便監控;
3.4.2 分類演算法分類演算法暫時使用隨機森林演算法(資料在data/galss.txt);分為兩個部分,建樹、測試;建樹使用MR演算法,測試使用單機模式;建樹輸出模型路徑使用相對路徑,使用絕對路徑會報錯!
點擊確定,開啟任務監控頁面,查看任務提交情況:
測試隨機森林,可以看到隨機森林的參數以及測試資料的正確率和模糊矩陣;
3.4.3 推薦演算法推薦演算法使用item的RecommenderJob,設定參數,提交任務:
點擊確定,成功提交任務後,可以查看監控:
3.5 協助模組在首頁的右邊,可以看到三個協助頁面,可以擷取不同模組的協助資訊。
分享,成長,快樂
轉載請註明blog地址:http://blog.csdn.net/fansy1990