Hadoop+Mahout安装手记

最近一直捣鼓Mahout,终于在Hadoop下成功跑起来了。由于涉及的点比较多,这里先记录整理一下,做参考备忘使用。

一、操作系统

Ubuntu Desktop 13.04 (RaringRingtail)

官网地址:

http://releases.ubuntu.com/13.04/

国内镜像地址:

中科大  http://ubuntu1304.cdn.mirrors.ustc.edu.cn/ubuntu-releases/13.04/

网易  http://mirrors.163.com/ubuntu-releases/13.04/

二、需要安装的软件

编号

软件名称

版本

下载地址

1

Java

jdk-6u45-linux-i586.bin

http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html

2

SSH

1)openssh-client_6.1p1-4_i386.deb

2)openssh-server_6.1p1-4_i386.deb

3)ssh_6.1p1-4_all.deb

https://launchpad.net/ubuntu/+source/openssh/1:6.1p1-4/+build/4401534

3

Hadoop

hadoop-1.1.2.tar.gz

http://mirror.bjtu.edu.cn/apache/hadoop/common/hadoop-1.1.2/

4

Maven

Maven 3.0.5

http://maven.apache.org/download.cgi

5

Mahout

mahout-distribution-0.7-src.tar.gz

http://mirror.bjtu.edu.cn/apache/mahout/0.7/

三、安装过程

1、配置用户

    1) 为后续配置hadoop方便,添加hduser用户和hadoop组,并将hduser添加到hadoop组中。

        $sudo addgroup hadoop

        $sudo adduser–ingroup hadoop hduser

    2)修改该目录访问权限,然后使用hduser用户将上述软件拷贝到/usr/local目录下。

        $sudo chown 777/usr/local

    以下操作均使用hduser进行。

2、安装JAVA

    1) 在/usr/local目录下解压:

        $./jdk-6u45-linux-i586.bin

        此时java的安装路径为:/usr/local/jdk1.6.0_45;

    2) 配置hduser主目录下(hduser@ubuntu:~$)的.bashrc文件,在该文件的最后添加如下两行:

        exportJAVA_HOME=/usr/local/jdk1.6.0_45

        exportPATH=$PATH:$JAVA_HOME/bin

    4) 注销用户后重新登录,验证java安装是否正确:

        $java –version

    出现如下信息后说明安装正确,

java version "1.6.0_45"

Java(TM) SE Runtime Environment (build 1.6.0_45-b06)

Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode,sharing)

3、安装SSH

    1) 安装openssh-client_6.1p1-4_i386.deb:

        $sudo dpkg -iopenssh-client_6.1p1-4_i386.deb

    2) 安装openssh-server_6.1p1-4_i386.deb:

        $sudo dpkg -iopenssh-server_6.1p1-4_i386.deb

    3) 安装ssh_6.1p1-4_all.deb:

        $sudo dpkg -issh_6.1p1-4_all.deb

    4) 为hduser生成公用密钥

        $ssh-keygen –t rsa –P“”

    5) 发布密钥

        $cat~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

    6) 测试连接localhost

        $ssh localhost

        hduser@ubuntu:~$ sshlocalhost

The authenticity of host'localhost (127.0.0.1)' can't beestablished.

ECDSA key fingerprintis4d:90:91:c7:d4:20:55:5f:2a:53:62:78:c0:43:ef:d8.

Are you sure you want tocontinue connecting (yes/no)? 

        输入yes,即可实现无密码访问localhost,这是后来配置集群模式的基础。

4、安装Hadoop

    以下五步操作对单节点和集群是相同的,每台机器都需要操作。

    1) 在/usr/local目录下解压

       $sudo tarxvzfhadoop-1.1.2.tar.gz

    2) 为方便管理,修改目录名

       $mv hadoop-1.1.2hadoop

    3) 更新.bashrc文件,在该文件的最后添加如下两行:

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

    4) 配置/usr/local/hadoop/conf/hadoop-env.sh文件

       将文件中下面行进行修改,

        #exportJAVA_HOME=/usr/lib/j2sdk1.5-sun

        修改为,

        exportJAVA_HOME=/usr/local/jdk1.6.0_45

    5) 为hadoop建立临时工作目录,赋予hduser的权限

       $sudo mkdir–p/app/hadoop/tmp

       $sudochownhduser:hadoop /app/hadoop/tmp

    以下的步骤区分单节点和集群,为调试方便,先配置单节点,单节点成功后再修改为集群方式。

4.1 单节点安装

    下面文件都在/usr/local/hadoop/conf目录。

1) 配置core-site.xml

<configuration>

 <property>

   <name>hadoop.tmp.dir</name>

   <value>/app/hadoop/tmp</value>

 </property>

 <property>

   <name>fs.default.name</name>

   <value>hdfs://localhost:54310</value>

 </property>

</configuration>

2) 配置mapred-site.xml

<configuration>

 <property>

   <name>mapred.job.tracker</name>

   <value>localhost:54311</value>

 </property>

</configuration>

3) 配置hdfs-site.xml

<configuration>

 <property>

   <name>dfs.replication</name>

   <value>1</value>

 </property>

</configuration>

4) 格式化HDFS

$hadoopnamenode–format

终端输出信息如下所示:

13/05/0218:01:43INFO namenode.NameNode: STARTUP_MSG:

/************************************************************

STARTUP_MSG:StartingNameNode

STARTUP_MSG:  host = ubuntu/127.0.1.1

STARTUP_MSG:  args = [–format]

STARTUP_MSG:  version = 1.1.2

STARTUP_MSG:  build =https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r1440782;compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013

************************************************************/

Usage:javaNameNode [-format [-force ] [-nonInteractive]] | [-upgrade] | [-rollback] |[-finalize]| [-importCheckpoint] | [-recover [ -force ] ]

13/05/0218:01:43INFO namenode.NameNode: SHUTDOWN_MSG:

/************************************************************

SHUTDOWN_MSG:Shuttingdown NameNode at ubuntu/127.0.1.1

************************************************************/

5) 启动hadoop

$start-all.sh

6) 查看hadoop状态

方法1:使用jps命令,终端输出信息如下所示,注意不能缺项。

$jps

7554NameNode

7759DataNode

8317Jps

8049JobTracker

8251TaskTracker

7968SecondaryNameNode

方法2:使用浏览器

查看namenode状态:http://localhost:50070

查看JobTracker状态:http://localhost:50030

查看TaskTracker状态:http://localhost:50060

7) 在/usr/local/hadoop/下运行一个简单的MapReduce任务

$bin/hadoopfs -put conf input

$bin/hadoopjarhadoop-examples-*.jar grep input output 'dfs[a-z.]+’

查看运行结果:

$bin/hadoop fs -get output output

$catoutput/*

终端输出信息如下:

cat:output/_logs:Is a directory

1  dfs.replication

1  dfs.server.namenode.

1  dfsadmin

4.2 多节点安装

    1) 节点信息:2个节点,其中一个节点为master,另一个节点为slave,master节点的IP地址是:192.168.233.132,slave节点的IP地址是:192.168.233.135。

    2)配置各节点主机信息

    修改每个节点的主机信息,在/etc/hosts文件中增添如下两行:

    192.168.233.132master

    192.168.233.135 slave

    3)将master节点ssh公钥向slave节点发布

    $ssh-copy-id -i$HOME/.ssh/id_rsa.pubhduser@slave

    发布后使用ssh slave命令确认一下从master向slave连接不需要输入用户名和密码。

    4) 配置master节点的conf/masters文件

    该文件指定启动SecondaryNameNode的节点。另外,运行start-dfs.sh脚本的节点是namenode节点,运行start-mapred.sh脚本的节点是jobtracker节点,运行start-all.sh的节点是namenode和jobtracker节点。

    此处将master设置为启动SecondaryNameNode的节点,即在conf/masters文件中添加如下行:

    master

    5) 配置master节点的conf/slaves文件

    各slave节点只作为DataNodes和TaskTrackers,该文件为start-dfs.sh所使用,通过该文件管理其中所有的slave节点。

    此处指定master节点和slave节点都作为HadoopSlaves,即在conf/slaves文件中添加如下行:

    master

    slave

   6) 在各节点上配置如下三个文件,core-site.xml, mapred-site.xml, hdfs-site.xml

     #core-site.xml,指定namenode

     <configuration>

       <property>

         <name>hadoop.tmp.dir</name>

         <value>/app/hadoop/tmp</value>

       </property>

       <property>

         <name>fs.default.name</name>

         <!—注意此处,由localhost改为master -->

         <value>hdfs://master:54310</value>

       </property>

     </configuration> 

    #mapred-site.xml指定jobtracker

    <configuration>

      <property>

      <name>mapred.job.tracker</name>

      <!—注意此处,由localhost改为master-->

      <value>master:54311</value>

      </property>

   </configuration>

   #hdfs-site.xml

   <configuration>

     <property>

     <name>dfs.replication</name>

     <!—注意此处,因为有两个slave节点,所以由1改为2 -->

     <value>2</value>

     </property>

   </configuration>

 7) 格式化HDFS

 在格式化之前,先将/app/hadoop/tmp目录下所有内容删除。

   $rm–rf /app/hadoop/tmp/*

   $hadoopnamenode –format

 

8) 启动/停止集群
启动,在master节点上运行下面两个命令:
$start-dfs.sh//该命令启动namenode,以及conf/slaves文件指定的DataNode。
$start-mapred.sh//该命令启动jobtracker,以及conf/slaves文件指定的tasktracker。
在master节点上使用jps命令查看,相似内容如下,
11273 JobTracker
10920 DataNode
10715 NameNode
11128 SecondaryNameNode
11600 Jps
11481 TaskTracker
在slave节点上使用jps查看,相似内容如下,
7951 Jps
7879 TaskTracker
7543 DataNode
如果缺少NameNode,DataNode,SecondaryNameNode,JobTracker,TaskTracker中的某一项,说明hadoop没有正确启动,可以到hadoop/logs目录下查看相应的log文件查找原因。

停止,停止的顺序与启动的顺序相反,即,
$stop-mapred.sh
$stop-dfs.sh

5、安装Maven

  1) 解压

$tar zxvfapache-maven-3.0.5.tar.gz

  2) 修改.bashrc文件

exportM3_HOME=/usr/local/apache-maven-3.0.5

exportPATH=$M3_HOME/bin:$PATH

3) 以hduser用户重新登录,查看是否安装成功

$mvn--version

终端提示信息如下:

ApacheMaven 3.0.5(r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 05:51:28-0800)

Mavenhome: /usr/local/apache-maven-3.0.5

Java version:1.6.0_45, vendor: Sun Microsystems Inc.

Javahome: /usr/local/jdk1.6.0_45/jre

Defaultlocale: en_US, platform encoding: UTF-8

OSname: "linux", version:"3.8.0-19-generic", arch:"i386", family: "unix"

6、安装Mahout

    1)获取最新版代码,保存至/usr/local/目录下

       $svn co http://svn.apache.org/repos/asf/mahout/trunk

       $mv trunkmahout

    2) 在/usr/local/mahout目录下执行,

       $mvn cleaninstall-DskipTests=true

    3) 在/usr/local/mahout/core目录下执行

       $mvn compile

       $mvn install

    4) 在/usr/local/mahout/example目录下执行

       $mvn compile

    5) 修改~/.bashrc文件,增加下面内容

       exportMAHOUT_HOME=/usr/local/mahout

      exportPATH=$PATH:$MAHOUT_HOME/bin

四、运行Mahout实例

    1)这里使用Mahout自带的Clustering of Synthetic controldata 实例;

    2)下载synthetic_control.data文件,保存至$MAHOUT_HOME目录下;

http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data

       注意检查文件大小,正确值为288374Bytes。

    3) 在master节点上启动hadoop,启动后注意使用jps查看一下

        $start-all.sh

    4) 在HDFS中建立testdata目录

        $hadoop fs -mkdirtestdata

    5) 将本地的synthetic_control.data文件拷贝到HDFS的testdata目录下

        $hadoopfs -put$MAHOUT_HOME/synthetic_control.data testdata 

    6) 运行mahoutjob

       $mahoutorg.apache.mahout.clustering.syntheticcontrol.kmeans.Job

    7) 查看运行结果

        $hadoop fs -getoutput$MAHOUT_HOME/examples

        $cd$MAHOUT_HOME/examples/output

        $ls

终端上有如下信息说明结果正确。

clusteredPoints  clusters-10-final clusters-4 clusters-7  data

clusters-0      clusters-2         clusters-5 clusters-8 _policy

clusters-1      clusters-3         clusters-6 clusters-9

五、Q&A

    Q1) ssh: connectto host localhost port22: Connection refused

    A1) ssh没有正确安装,按照上述步骤重新安装。

    Q2) hduser is notin the sudoersfile.  This incident willbe reported.

    A2) 使用root用户,修改/etc/sudoers文件属性:chomod u+w /etc/sudoers,然后在该文件中添加如下内容:hduser  ALL=(ALL:ALL) ALL,保存文件后,将文件属性改回:chomod u-w /etc/sudoers。

    Q3)org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException:Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data:namenode namespaceID =182065604; datanode namespaceID = 1620713375

    A3) 每次namenodeformat会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp下的所有内容。

    Q4) NameNode is insafe mode

    A4) 使用下面的命令解除:hadoopdfsadmin -safemode leave

Q5) Warning: $HADOOP_HOME isdeprecated.

    A5) 将exportHADOOP_HOME_WARN_SUPPRESS=TRUE添加到每个节点的/etc/hadoop/hadoop-env.sh配置文件中。

    Q6)org.apache.mahout.math.CardinalityException:My cardinality is: 0, but the otheris: 60

    A6) 输入数据文件不完整,重新下载确认文件大小。

参考文献:

1、在ubuntu中配置SSH(解决connectto host localhost port 22:Connection refused问题) http://blog.csdn.net/feliciafay/article/details/6561414

2、解决ssh的"Writefailed: Broken pipe"问题,http://www.cnblogs.com/dudu/archive/2013/02/07/ssh-write-failed-broken-pipe.html

3、http://hadoop.apache.org/docs/r1.1.2/single_node_setup.html#PseudoDistributed

4、https://cwiki.apache.org/confluence/display/MAHOUT/BuildingMahout

5、https://cwiki.apache.org/confluence/display/MAHOUT/Clustering+of+synthetic+control+data

6、http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/

7、http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/

 

 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值