十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Mahout安装详细全过程
创新互联公司是一家从事企业网站建设、做网站、成都做网站、行业门户网站建设、网页设计制作的专业网站设计公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点上1000+。
1、jdk安装 2
2、SSH无密码验证配置 2
3、 Hadoop配置 3
4、Hadop使用 6
5、Maven安装 7
6、安装mahout 7
7、hadoop集群来执行聚类算法 8
8、其他 8
————————————————————
1、jdk安装
1.1、到官网下载相关的JDK
下载地址:
1.2、打开“终端”
输入:sh jdk-6u24-linux-i586.bin
1.3、设置JAVA_HOME环境系统变量
输入:
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、集群环境介绍
集群包含三个节点:1 个 namenode,2 个 datanode,节点之间局域网连接,可以相互 ping 通。节点 IP 地址分布如下:
Namenode: master@192.168.1.10
Datanode1: slave1 @192.168.1.20
Datanode2: slave2@192.168.1.21
三台节点上均是CentOS系统,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 协议,namenode 将使用SSH 协议启动 namenode和datanode 进程,伪分布式模式数据节点和名称节点均是本身,必须配置 SSH localhost无密码验证。
用root用户登录,在家目录下执行如下命令: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'. 创建/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节点下做如下配置:
[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 目录下,执行start-all.sh命令
启动完成后,可用jps命令查看hadoop进程是否启动完全。正常情况下应该有如下进程:
10910 NameNode
11431 Jps
11176 SecondaryNameNode
11053 DataNode
11254 JobTracker
11378 TaskTracker
我在搭建过程中,在此环节出现的问题最多,经常出现启动进程不完整的情况,要不是datanode无法正常启动,就是namenode或是TaskTracker启动异常。解决的方式如下:
1)在Linux下关闭防火墙:使用service iptables stop命令;
2)再次对namenode进行格式化:在/root/hadoop/bin 目录下执行hadoop namenode -format命令
3)对服务器进行重启
4)查看datanode或是namenode对应的日志文件,日志文件保存在/root/hadoop/logs目录下。
5)再次在/bin目录下用start-all.sh命令启动所有进程,通过以上的几个方法应该能解决进程启动不完全的问题了。
4.2.3 查看集群状态
在 bin目录下执行:hadoop dfsadmin -report
# hadoop dfsadmin –report
4.3 在WEB页面下查看Hadoop工作情况
打开IE浏览器输入部署Hadoop服务器的IP:
。
5、Hadop使用
一个测试例子wordcount:
计算输入文本中词语数量的程序。WordCount在Hadoop主目录下的java程序包hadoop-0.20.2-examples.jar 中,执行步骤如下:
在/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下执行:
# ./hadoop jar hadoop-0.20.2-examples.jar wordcount input output (提交作业,此处需注意input与output是一组任务,下次再执行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集群来执行聚类算法
8.1数据准备
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集群来执行推荐算法
分布式
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的创建和结束监视,也为远程监视工具提供了一个可以attach的接口
options
-nr 当一个存在的RMI Registry没有找到时,不尝试创建一个内部的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指定安全策略
创建安全策略文件,并命名为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以远程的方式监控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已经启动,不创建内部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进程 因为显示出进程数太多使用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程序是如何崩溃和在程序何处发生问题。
另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
l 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。
l 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。
命令格式
$jstack [ option ] pid
$jstack [ option ] executable core
$jstack [ option ] [server-id@]remote-hostname-or-IP
pid: java应用程序的进程号,一般可以通过jps来获得
executable:产生core dump的java可执行程序
core:打印出的core文件
remote-hostname-or-ip:远程debug服务器的名称或IP
server-id: 唯一id,假如一台主机上多个远程debug服务
最近在学习elasticsearch,我之前对这个还是个菜鸟经过2天的学习来记录下我自己关于Elasticsearch在Linux环境下的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进程的一些简单情况。