Mahout安裝詳細全過程
創(chuàng)新互聯(lián)公司是一家從事企業(yè)網(wǎng)站建設、做網(wǎng)站、成都做網(wǎng)站、行業(yè)門戶網(wǎng)站建設、網(wǎng)頁設計制作的專業(yè)網(wǎng)站設計公司,擁有經(jīng)驗豐富的網(wǎng)站建設工程師和網(wǎng)頁設計人員,具備各種規(guī)模與類型網(wǎng)站建設的實力,在網(wǎng)站建設領域樹立了自己獨特的設計風格。自公司成立以來曾獨立設計制作的站點上1000+。
1、jdk安裝 2
2、SSH無密碼驗證配置 2
3、 Hadoop配置 3
4、Hadop使用 6
5、Maven安裝 7
6、安裝mahout 7
7、hadoop集群來執(zhí)行聚類算法 8
8、其他 8
————————————————————
1、jdk安裝
1.1、到官網(wǎng)下載相關的JDK
下載地址:
1.2、打開“終端”
輸入:sh jdk-6u24-linux-i586.bin
1.3、設置JAVA_HOME環(huán)境系統(tǒng)變量
輸入:
vi /etc/environment
在文件中添加:
export JAVA_HOME=/root/jdk1.6.0_24
export JRE_Home=/root/jdk1.6.0_24/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
同樣,修改第二個文件。輸入:
vi /etc/profile
在umask 022之前添加以下語句:
export JAVA_HOME=/root/jdk1.6.0_24
export JRE_Home=/root/jdk1.6.0_24/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
1.4、注銷用戶,檢測JDK版本。
輸入:
java -version
2、集群環(huán)境介紹
集群包含三個節(jié)點:1 個 namenode,2 個 datanode,節(jié)點之間局域網(wǎng)連接,可以相互 ping 通。節(jié)點 IP 地址分布如下:
Namenode: master@192.168.1.10
Datanode1: slave1 @192.168.1.20
Datanode2: slave2@192.168.1.21
三臺節(jié)點上均是CentOS系統(tǒng),Hadoop在/root/hadoop/目錄下。
在/etc/hosts上添加主機名和相應的IP地址:
192.168.1.10 master
192.168.1.20 slave1
192.168.1.21 slave2
3、SSH無密碼驗證配置
2.1 Hadoop 需要使用SSH 協(xié)議,namenode 將使用SSH 協(xié)議啟動 namenode和datanode 進程,偽分布式模式數(shù)據(jù)節(jié)點和名稱節(jié)點均是本身,必須配置 SSH localhost無密碼驗證。
用root用戶登錄,在家目錄下執(zhí)行如下命令:ssh-keygen -t rsa
[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 按回車默認路徑
Created directory '/root/.ssh'. 創(chuàng)建/root/.ssh目錄
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master
通過以上命令將在/root/.ssh/ 目錄下生成id_rsa私鑰和id_rsa.pub公鑰。進入/root/.ssh目錄在namenode節(jié)點下做如下配置:
[root@master .ssh]# cat id_rsa.pub authorized_keys
[root@master .ssh]# scp authorized_keys 192.168.1.20:/root/.ssh/
[root@master .ssh]# scp authorized_keys 192.168.1.21:/root/.ssh/
配置完畢,可通過ssh 本機IP 測試是否需要密碼登錄。
2.2 和namenode無密碼登錄所有Datanode原理一樣,把Datanode的公鑰復制到
Namenode的.ssh目錄下。
[root@slave1 .ssh]# scp authorized_keys1 192.168.1.10:/root /.ssh
[root@ slave2.ssh]# scp authorized_keys2 192.168.1.10:/root /.ssh
將剛傳過來的authorized_keys1、2加入到authorized_keys
[root@ master.ssh]# cat authorized_keys1 authorized_keys
[root@ master.ssh]# cat authorized_keys2 authorized_keys
這樣也能在Datanode上關閉和啟動Hadoop服務。
4、 Hadoop配置
下載 hadoop-0.20.2.tar.gz, 進行解壓。
tar zxvf hadoop-0.20.2.tar.gz
修改/etc/profile,加入如下:
# set hadoop path
export HADOOP_HOME=/root/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
4.1、進入hadoop/conf, 配置Hadoop配置文件
4.1.1 配置hadoop-env.sh文件
添加 # set java environment
export JAVA_HOME=/root/jdk1.6.0_24
編輯后保存退出。
4.1.2 配置core-site.xml
# vi core-site.xml
?xml version="1.0"?
?xml-stylesheet type="text/xsl" href="configuration.xsl"?
!-- Put site-specific property overrides in this file. --
configuration
property
namefs.default.name/name
valuehdfs://192.168.1.10:9000//value
/property
property
namehadoop.tmp.dir/name
value/root/hadoop/hadooptmp/value
/property
/configuration
4.1.3 配置hdfs-site.xml
# vi hdfs-site.xml
?xml version="1.0"?
?xml-stylesheet type="text/xsl" href="configuration.xsl"?
!-- Put site-specific property overrides in this file. --
configuration
property
namedfs.name.dir/name
value/root/hadoop/hdfs/name/value
/property
property
namedfs.data.dir/name
value/root/hadoop/hdfs/data/value
/property
property
namedfs.replication/name
value3/value
/property
/configuration
4.1.4 配置mapred-site.xml
# vi mapred-site.xml
?xml version="1.0"?
?xml-stylesheet type="text/xsl" href="configuration.xsl"?
!-- Put site-specific property overrides in this file. --
configuration
property
namemapred.job.tracker/name
value192.168.1.10:9001/value
/property
property
namemapred.local.dir/name
value/root/hadoop/mapred/local/value
/property
property
namemapred.system.dir/name
value/tmp/hadoop/mapred/system/value
/property
/configuration
4.1.5 配置masters
# vi masters
192.168.1.10
4.1.6 配置slaves
# vi slaves
192.168.1.20
192.168.1.21
4.2、 Hadoop啟動
4.2.1 進入 /root/hadoop/bin目錄下,格式化namenode
# ./hadoop namenode –format
4.2.2 啟動hadoop所有進程
在/root/hadoop/bin 目錄下,執(zhí)行start-all.sh命令
啟動完成后,可用jps命令查看hadoop進程是否啟動完全。正常情況下應該有如下進程:
10910 NameNode
11431 Jps
11176 SecondaryNameNode
11053 DataNode
11254 JobTracker
11378 TaskTracker
我在搭建過程中,在此環(huán)節(jié)出現(xiàn)的問題最多,經(jīng)常出現(xiàn)啟動進程不完整的情況,要不是datanode無法正常啟動,就是namenode或是TaskTracker啟動異常。解決的方式如下:
1)在Linux下關閉防火墻:使用service iptables stop命令;
2)再次對namenode進行格式化:在/root/hadoop/bin 目錄下執(zhí)行hadoop namenode -format命令
3)對服務器進行重啟
4)查看datanode或是namenode對應的日志文件,日志文件保存在/root/hadoop/logs目錄下。
5)再次在/bin目錄下用start-all.sh命令啟動所有進程,通過以上的幾個方法應該能解決進程啟動不完全的問題了。
4.2.3 查看集群狀態(tài)
在 bin目錄下執(zhí)行:hadoop dfsadmin -report
# hadoop dfsadmin –report
4.3 在WEB頁面下查看Hadoop工作情況
打開IE瀏覽器輸入部署Hadoop服務器的IP:
。
5、Hadop使用
一個測試例子wordcount:
計算輸入文本中詞語數(shù)量的程序。WordCount在Hadoop主目錄下的java程序包hadoop-0.20.2-examples.jar 中,執(zhí)行步驟如下:
在/root/hadoop/bin/目錄下進行如下操作:
./hadoop fs -mkdir input(新建目錄名稱,可任意命名)
mkdir /root/a/
vi /root/a/a.txt
寫入hello world hello
# hadoop fs -copyFromLocal /root/a/ input
在/root/hadoop/bin下執(zhí)行:
# ./hadoop jar hadoop-0.20.2-examples.jar wordcount input output (提交作業(yè),此處需注意input與output是一組任務,下次再執(zhí)行wordcount程序,還要新建目錄intput1與output1不能跟input與output重名)
6、Maven安裝
6.1下載Maven
解壓tar vxzf apache-maven-3.0.2-bin.tar.gz
mv apache-maven-3.0.2 /root/maven
6.2 vi ~/.bashrc
添加如下兩行
export M3_HOME=/root/maven
export PATH=${M3_HOME}/bin:${PATH}
6.3 先logout,之后再login
查看maven版本,看是否安裝成功
mvn -version
7、安裝mahout
安裝方法見:
8、hadoop集群來執(zhí)行聚類算法
8.1數(shù)據(jù)準備
cd /root/hadoop
wget
8.2 ./hadoop fs -mkdir testdata
./hadoop fs -put synthetic_control.data testdata
./hadoop fs -lsr testdata
bin/hadoop jar /root/mahout/mahout-examples-0.4-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
8.3查看一下結果吧
bin/mahout vectordump --seqFile /user/root/output/data/part-r-00000
這個直接把結果顯示在控制臺上。
9、hadoop集群來執(zhí)行推薦算法
分布式
bin/hadoop jar /root/trunk/mahout-distribution-0.4/mahout-core-0.4-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.map.tasks=3 -Dmapred.reduce.tasks=3 -Dmapred.input.dir=testdata/100wan.txt -Dmapred.output.dir=output2
偽分布式
bin/hadoop jar /root/trunk/mahout-distribution-0.4/mahout-core-0.4-job.jar org.apache.mahout.cf.taste.hadoop.pseudo.RecommenderJob --recommenderClassName org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender -Dmapred.input.dir=testdata/10wan.dat -Dmapred.output.dir=output_w10wan
10、其他
離開安全模式:hadoop dfsadmin -safemode leave
此命令是一個RMI Server應用程序,提供了對JVM的創(chuàng)建和結束監(jiān)視,也為遠程監(jiān)視工具提供了一個可以attach的接口
options
-nr 當一個存在的RMI Registry沒有找到時,不嘗試創(chuàng)建一個內部的RMI Registry
-p port 端口號,默認為1099
-n rminame 默認為JStatRemoteHost;如果多個jstatd服務開始在同一臺主機上,rminame唯一確定一個jstatd服務
-J jvm選項
jstatd
會報如下錯誤:
Could not create remote object access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.System.setProperty(System.java:727) at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)
這是因為沒有給jstatd指定安全策略
創(chuàng)建安全策略文件,并命名為jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
再次啟動
C:\Program Files\Java\jdk1.6.0_16\binjstatd -J-Djava.security.policy=jstatd.all.policy
利用jps查看正在運行的java命令
jps
C:\Documents and Settings\lulujps
4892 Bootstrap
1296 Jstatd
4484 Jps
3332 org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
此時就可以使用jvisualvm.exe以遠程的方式監(jiān)控JVM相關信息了。
更多例子
(1)使用內部RMI Registry
jstatd -J-Djava.security.policy=all.policy (默認端口為1099)
(2)使用外部RMI Registry
a)使用默認值
rmiregistry
jstatd -J-Djava.security.policy=all.policy
b)使用2020端口
rmiregistry 2020
jstatd -J-Djava.security.policy=all.policy -p 2020
c)使用2020端口,使用rminame
rmiregistry 2020
jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName
(3)RMI Registry已經(jīng)啟動,不創(chuàng)建內部RMI Registry
jstatd -J-Djava.security.policy=all.policy -nr
(4)RMI日志能力
jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true
一般kill進程是這樣的:
比如你要殺掉top進程,
ps?-ef|grep?top?查看top進程?因為顯示出進程數(shù)太多使用grep過濾,
kill?-9?殺掉top進程?,
ps?-ef|grep?top查看top進程有沒殺掉,如圖已殺掉
jstack用于打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息。
如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式:jstack [-l] pid
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題。
另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現(xiàn)在運行的java程序呈現(xiàn)hung的狀態(tài),jstack是非常有用的。
l 不同的 JAVA虛機的線程 DUMP的創(chuàng)建方法和文件格式是不一樣的,不同的 JVM版本, dump信息也有差別。
l 在實際運行中,往往一次 dump的信息,還不足以確認問題。建議產(chǎn)生三次 dump信息,如果每次 dump都指向同一個問題,我們才確定問題的典型性。
命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
pid: java應用程序的進程號,一般可以通過jps來獲得
executable:產(chǎn)生core dump的java可執(zhí)行程序
core:打印出的core文件
remote-hostname-or-ip:遠程debug服務器的名稱或IP
server-id: 唯一id,假如一臺主機上多個遠程debug服務
最近在學習elasticsearch,我之前對這個還是個菜鳥經(jīng)過2天的學習來記錄下我自己關于Elasticsearch在Linux環(huán)境下的2種啟動和停止方式:
第一種:
1、前臺運行:
運行結果
2、ctrl+c停止運行
停止后:
第二種:后端運行
1、后端運行的命令
bin/elasticsearch -d
結果
2、查看elasticsearch被那個端口占用和停止
2-1、采用jps命令查看
2-2、采用kill -9 端口來停止運行
所以:
若是es的前臺運行,則用ctrl + c來停止。
若是es的后臺運行,則用kill -9 進程號來停止。
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一個顯示當前所有java進程pid的命令,簡單實用,非常適合在linux/unix平臺上簡單察看當前java進程的一些簡單情況。