转载 hadoop 伪分布安装

时间:2022-10-25 09:20:21

一. 概要
       经过几天的调试,终于在Linux Cent OS
5.5下成功搭建Hadoop测试环境。本次测试在一台服务器上进行伪分布式搭建。Hadoop 伪分布式模式是在单机上模拟 Hadoop
分布式,单机上的分布式并不是真正的伪分布式,而是使用线程模拟分布式。Hadoop
本身是无法区分伪分布式和分布式的,两种配置也很相似,唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均是一个机器。虽然Hadoop的
安装步骤并不复杂,但是我在安装期间还是遇到了很多琐碎的问题,现将自己搭建Hadoop的详细过程和遇到的问题记录下来。完全分布式就是一个
hadoop集群,有n台机器组成,一般组织方式是:一台机器作为master,上面 运行   
namenode和jobtracker,另外的机器作为slave,上面运行datanode和tasktracker,至于
secondaryname,可以运行在master上,也可以运行在另外一台机器上。secondaryname
是namenode的一个备份里面同样保存了名字空间,和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过
secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。

二. 环境搭建

      搭建测试环境所需的软件包括:jdk1.6.0_20、hadoop-0.20.2.tar.gz。测试服务器操作系统Linux Cent OS 5.5。

网上说使用专门的用户hadoop操作,但是这里我是完全使用的root,方便而已。

总体的流程如下:

    1、实现linux的ssh无密码验证配置.

    2、在linux下安装jdk,并配好环境变量

    3、修改linux的机器名,并配置 /etc/hosts

    4、在windows下下载hadoop 0.20.0,并修改hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,masters,slaves文件的配置

    5、把修改好的hadoop整个文件夹传到linux下

    6、把hadoop的bin加入到环境变量

    7、格式化hadoop,启动hadoop

    8、验证是否启动,并执行wordcount

具体如下:

转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 1.  SSH无密码验证配置

     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

配置完毕,可通过ssh 本机IP 测试是否需要密码登录。

原理:

Hadoop需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,(datanode向
namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解)。许多教程上介绍Hadoop集群配置时只说明了
namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到
namenode,Hadoop集群才能正常启动(也许这不是必须的)

以namenode到datanode为例子:Namenode作为客户端,要实现无密码
公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。
当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给
namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许
namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上

转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 2. JDK安装及Java环境变量的配置

2.1 JDK安装

     root 用户登陆,新建文件夹 /usr/program ,下载 JDK 安装包

jdk-6u13-linux-i586.bin,复制到目录/usr/ program 下,在命令行进入该目录,执行命令“./ jdk-6u20-linux-i586.bin”,命令运行完毕,将在目录下生成文件夹jdk1.6.0_20,安装完毕。

2.2 java环境变量配置

        root 用户登陆,命令行中执行命令“vi /etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile 这个文件很重要,后面 Hadoop 的配置还会用到)。

# set java environment

   export JAVA_HOME=/usr/program/jdk1.6.0_20

   export JRE_HOME=/usr/program/jdk1.6.0_20/jre

   export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

   export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

在vi编辑器增加以上内容后保存退出,并执行以下命令使配置生效

    chmod +x  /etc/profile ;增加执行权限

    source  /etc/profile ;

配置完毕后,在命令行中输入java -version,如出现下列信息说明java环境安装成功。

java version "1.6.0_20"

Java(TM) SE Runtime Environment (build 1.6.0_20-b02)

Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)

再有就是修改linux的机器名

最好修改机器名为其ip地址,要不后来hdfs上传put文件的时候可能会出现无法连接的错误。

命令:

hostname ip

重启无效

转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 2. Hadoop配置

   下载 hadoop-0.20.2.tar.gz,将其解压到/usr/local/hadoop 目录下,解压后目录形式是/usr/local/hadoop/hadoop-0.20.2。使用如下命令:

  tar zxvf  hadoop-0.19.1.tar.gz 进行hadoop压缩文件解压。

2.1   进入/usr/local/hadoop/hadoop-0.20.2/conf, 配置Hadoop配置文件

2.1.1 配置hadoop-env.sh文件

添加 # set java environment

             export JAVA_HOME=/usr/program/jdk1.6.0_20

编辑后保存退出。

2.1.2 配置core-site.xml

  1. [root@master conf]# vi core-site.xml
  2. <?xml version="1.0"?>
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  4. <!-- Put site-specific property overrides in this file. -->
  5. <configuration>
  6. <property>
  7. <name>fs.default.name</name>
  8. <value>hdfs://202.173.253.36:9000/</value>
  9. 默认的namenode的端口为8020
  10. </property>
  11. <property>
  12. <name>hadoop.tmp.dir</name>
  13. <value>/usr/local/hadoop/hadooptmp</value>
  14. </property>
  15. </configuration>

2.1.3 配置hdfs-site.xml

  1. [root@master conf]# vi  hdfs-site.xml
  2. <?xml version="1.0"?>
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  4. <!-- Put site-specific property overrides in this file. -->
  5. <configuration>
  6. <property>
  7. <name>dfs.name.dir</name>
  8. <value>/usr/local/hadoop/hdfs/name</value>
  9. </property>
  10. <property>
  11. <name>dfs.data.dir</name>
  12. <value>/usr/local/hadoop/hdfs/data</value>
  13. </property>
  14. <property>
  15. <name>dfs.replication</name>
  16. <value>1</value>
  17. </property>
  18. </configuration>

2.1.4 配置mapred-site.xml

  1. [root@master conf]# vi mapred-site.xml
  2. <?xml version="1.0"?>
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  4. <!-- Put site-specific property overrides in this file. -->
  5. <configuration>
  6. <property>
  7. <name>mapred.job.tracker</name>
  8. <value>202.173.253.36:9001</value>
  9. </property>
  10. <property>
  11. <name>mapred.local.dir</name>
  12. <value>/usr/local/hadoop/mapred/local</value>
  13. </property>
  14. <property>
  15. <name>mapred.system.dir</name>
  16. <value>/tmp/hadoop/mapred/system</value>
  17. </property>
  18. </configuration>

1、其实core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,

mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置,

2、hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,
还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是
${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是
${hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根
目录。我设置的是 /usr/local/hadoop/hadooptmp,当然这个目录必须是存在的。

3、fs.default.name,这个是设置namenode位于哪个机器上,端口号是什么
hdfs://192.168.133.128:9000,格式一定要这样写,网上很多资料说ip地址写localhost也行,笔者建议最好写ip,因
为后期讲到windows下 eclipse连接hadoop 的时候,如果写localhost,就会连接不到。

4、mapred.job.tracker,这个是设置jobtracker位于哪个机器上,端口号是什么,192.168.133.128:9001,格式和上一个不一样,这个也必须这样写,同样localhost和ip的分别和上述一样

5、dfs.replication,这个是设置数据块的复制次数,默认是3,因为笔者这里就一台机器,所以只能存在一份,就改成了1

2.1.5 配置masters文件和slaves文件

[root@master conf]# vi masters

202.173.253.36

[root@master conf]# vi slaves

202.173.253.36

注:因为在伪分布模式下,作为master的namenode与作为slave的datanode是同一台服务器,所以配置文件中的ip是一样的。

2.1.6 编辑主机名

[root@master ~]# vi /etc/hosts

# Do not remove the following line, or various programs

that require network functionality will fail.

127.0.0.1                      localhost

202.173.253.36            master

202.173.253.36            slave

注:因为是在伪分布模式下,所以master与slave是一台机

2.2 Hadoop启动

2.2.1 进入 /usr/local/hadoop/hadoop-0.20.2/bin目录下,格式化namenode

[root@master bin]# hadoop namenode -format

10/07/19 10:46:41 INFO namenode.NameNode: STARTUP_MSG:

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

STARTUP_MSG: Starting NameNode

STARTUP_MSG:   host = master/202.173.253.36

STARTUP_MSG:   args = [-format]

STARTUP_MSG:   version = 0.20.2

STARTUP_MSG:   build =
https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r
911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010

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

Re-format filesystem in /usr/local/hadoop/hdfs/name ? (Y or N) Y

10/07/19 10:46:43 INFO namenode.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel

10/07/19 10:46:43 INFO namenode.FSNamesystem: supergroup=supergroup

10/07/19 10:46:43 INFO namenode.FSNamesystem: isPermissionEnabled=true

10/07/19 10:46:43 INFO common.Storage: Image file of size 94 saved in 0 seconds.

10/07/19 10:46:43 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/name has been successfully formatted.

10/07/19 10:46:43 INFO namenode.NameNode: SHUTDOWN_MSG:

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

SHUTDOWN_MSG: Shutting down NameNode at master/202.173.253.36

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

2.2.2 启动hadoop所有进程

在/usr/local/hadoop/hadoop-0.20.2/bin 目录下,执行start-all.sh命令

启动完成后,可用jps命令查看hadoop进程是否启动完全。正常情况下应该有如下进程:

10910 NameNode

11431 Jps

11176 SecondaryNameNode

11053 DataNode

11254 JobTracker

11378 TaskTracker 

启动之后,在/usr/local/hadoop/hadooptmp
下的dfs文件夹里会生成 data目录,这里面存放的是datanode上的数据块数据,因为笔者用的是单机,所以name 和 data
都在一个机器上,如果是集群的话,namenode所在的机器上只会有name文件夹,而datanode上只会有data文件夹。

搭建过程中,在此环节出现的问题最多,经常出现启动进程不完整的情况,要不是datanode无法正常启动,就是namenode或是TaskTracker启动异常。解决的方式如下:

1.在Linux下关闭防火墙:

1) 重启后生效

开启: chkconfig iptables on

关闭: chkconfig iptables off

2) 即时生效,重启后失效

开启: service iptables start

关闭: service iptables stop

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。

在开启了防火墙时,做如下设置,开启相关端口,

修改/etc/sysconfig/iptables 文件,添加以下内容:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

开始我使用的是service方式,但是总不好用,最后使用了chkconfig重启方式,生效!

2.再次对namenode进行格式化:在/usr/local/hadoop/hadoop-0.20.2/bin 目录下执行hadoop namenode -format命令

3.对服务器进行重启

4.查看datanode或是namenode对应的日志文件,日志文件保存在/usr/local/hadoop/hadoop-0.20.2
/logs目录下。仔细查看日志报错的原因,(上次日志报错的信息忘记了)解决方法是进入/usr/local/hadoop/hdfs/name
和usr/local/hadoop/hdfs/data目录下,将目录下的文件全部删除。

5.再次在/bin目录下用start-all.sh命令启动所有进程,通过以上的几个方法应该能解决进程启动不完全的问题了。

2.2.3  查看集群状态

在 bin目录下执行:hadoop dfsadmin  -report

[root@master bin]# hadoop dfsadmin -report

Configured Capacity: 304427253760 (283.52 GB)

Present Capacity: 282767941632 (263.35 GB)

DFS Remaining: 282767904768 (263.35 GB)

DFS Used: 36864 (36 KB)

DFS Used%: 0%

Under replicated blocks: 0

Blocks with corrupt replicas: 0

Missing blocks: 0

-------------------------------------------------

Datanodes available: 1 (1 total, 0 dead)

Name: 202.173.253.36:50010

Decommission Status : Normal

Configured Capacity: 304427253760 (283.52 GB)

DFS Used: 36864 (36 KB)

Non DFS Used: 21659312128 (20.17 GB)

DFS Remaining: 282767904768(263.35 GB)

DFS Used%: 0%

DFS Remaining%: 92.89%

Last contact: Mon Jul 19 11:07:22 CST 2010

2.3 在WEB页面下查看Hadoop工作情况

启动后可以通过以下两个页面查看节点状况和job状况

http://localhost:50070;

http://localhost:50030。

可以查看任务的执行情况

转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 转载 hadoop 伪分布安装 3. Hadop使用

一个测试例子wordcount

      计算输入文本中词语数量的程序。WordCount在Hadoop主目录下的java程序包hadoop-0.20.2-examples.jar 中,执行步骤如下:

在/usr/local/hadoop/hadoop-0.20.2/bin/目录下进行如下操作:

执行 hadoop fs -ls命令,查看当前hdfs分布式文件系统的 文件目录结构,刚执行会说no such dictionary,

你要先建一个文件夹,用命令 haoop fs -mkdir testdir ,然后再执行hadoop fs -ls,就会展示/user/root/testdir

当前用户是root,所以hdfs的根目录就是  /user/root

hadoop fs -mkdir  okdir(新建目录名称,可任意命名)

离开hodoop的安全模式

bin/hadoop dfsadmin -safemode leave

在这个目录里放入文件:hadoop fs -put /usr/test_in/*.txt
okdir(把本地/usr/test_in目录里的所有txt文件copy到 hdfs分布式文件系统的 /user/root/inputdir
目录里面,因为当前目录就是root 所以 直接写input 就代表/user/root/inputdir)

在/usr/local/hadoop/hadoop-0.20.2下执行:

[root@master hadoop-0.20.2]# hadoop jar hadoop-0.20.2-examples.jar
wordcount okdir output
(提交作业,此处需注意okdir与output是一组任务,下次再执行wordcount程序,还要新建目录,不能跟okdir与output重名)

  1. 11/05/28 22:02:34 INFO input.FileInputFormat: Total input paths to process : 0
  2. 11/05/28 22:02:34 INFO mapred.JobClient: Running job: job_201105282107_0005
  3. 11/05/28 22:02:35 INFO mapred.JobClient:  map 0% reduce 0%
  4. 11/05/28 22:02:46 INFO mapred.JobClient:  map 0% reduce 100%
  5. 11/05/28 22:02:48 INFO mapred.JobClient: Job complete: job_201105282107_0005
  6. 11/05/28 22:02:48 INFO mapred.JobClient: Counters: 8
  7. 11/05/28 22:02:48 INFO mapred.JobClient:   Job Counters
  8. 11/05/28 22:02:48 INFO mapred.JobClient:     Launched reduce tasks=1
  9. 11/05/28 22:02:48 INFO mapred.JobClient:   Map-Reduce Framework
  10. 11/05/28 22:02:48 INFO mapred.JobClient:     Reduce input groups=0
  11. 11/05/28 22:02:48 INFO mapred.JobClient:     Combine output records=0
  12. 11/05/28 22:02:48 INFO mapred.JobClient:     Reduce shuffle bytes=0
  13. 11/05/28 22:02:48 INFO mapred.JobClient:     Reduce output records=0
  14. 11/05/28 22:02:48 INFO mapred.JobClient:     Spilled Records=0
  15. 11/05/28 22:02:48 INFO mapred.JobClient:     Combine input records=0
  16. 11/05/28 22:02:48 INFO mapred.JobClient:     Reduce input records=0

执行完毕后,

  1. [root@hadoopName hadoop-0.20.2]# hadoop fs -ls output
  2. Found 2 items
  3. drwxr-xr-x   - root supergroup          0 2011-05-08 05:20 /user/root/output/_logs
  4. -rw-r--r--   1 root supergroup       1688 2011-05-08 05:21 /user/root/output/part-r-00000

可以查看运行结果

# bin/hadoop dfs -cat hellooutput/part-r-00000

  1. a       1
  2. are     1
  3. day     1
  4. fine    1
  5. fridey  1
  6. is      3
  7. name    1
  8. not     1
  9. today   4
  10. you     1
  11. your    1

也可进入web界面刷新查看running job及completed job的显示。


转:http://xuyuanshuaaa.iteye.com/blog/1063303

转载 hadoop 伪分布安装的更多相关文章

  1. hadoop伪分布安装

    解压 将安装包hadoop-2.2.0.tar.gz存放到/home/haozhulin/install/目录下,并解压 #将hadoop解压到/home/haozhulin/install路径下,定 ...

  2. Hadoop伪分布安装详解&lpar;五&rpar;

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  3. Hadoop伪分布安装详解&lpar;三&rpar;

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  4. Hadoop伪分布安装详解&lpar;二&rpar;

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  5. Hadoop伪分布安装配置

    安装环境: 系统:Ubuntu 14.10   64bit hadoop:2.5.1 jdk:1.8.0_11 安装步骤: 一.安装JDK 安装 jdk,并且配置环境以及设置成默认 sudo gedi ...

  6. Hadoop伪分布安装详解&lpar;四&rpar;

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  7. Hadoop伪分布安装详解&lpar;一&rpar;

    注:以下截图针对Ubuntu操作系统,对Centos步骤类似.请读者选择不同镜像即可. 第一部分:VMware WorkStation10 安装 1.安装好VMware10虚拟机软件并下载好Ubunt ...

  8. linux配置Hadoop伪分布安装模式

    1)关闭禁用防火墙: /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着. /etc/rc.d/init.d/iptables stop 关闭防火墙 2)禁用SE ...

  9. Hadoop学习记录(1)&vert;伪分布安装

    本文转载自向着梦想奋斗博客 Hadoop是什么? 适合大数据的分布式存储于计算平台 不适用小规模数据 作者:Doug Cutting 受Google三篇论文的启发 Hadoop核心项目 HDFS(Ha ...

随机推荐

  1. 序列化和反序列化的几种方式&lpar;DataContractSerializer&rpar;(二)

    DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法继承此类. 命名空间: System.Runtime.Serializati ...

  2. Linux 下提高make的编译效率

    Linux下安装程序,一般都通过包管理器安装,但是包管理器或软件商店里的软件往往不是最新版本的,安装最新版软件时通常是下载源代码进行编译. 编译安装源代码时就离不开make了,但是make是单线程的, ...

  3. FZU 1894 志愿者选拔 单调队列

    训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路 ...

  4. Zabbix实战-简易教程(4)--Server端安装

    在数据库安装完成后,接着开始安装server端了.我们这里采用yum安装. 3.2.0 安装需求 ● PHP 5.6.18 ● curl 7.47.1 ● zabbix_server (Zabbix) ...

  5. hihocoder 1249(2015ACM&sol;ICPC北京)

    题意: 给你一块正方形的土地,里面有矩形的草地,要求把土地分成两份,满足以下两个条件 1.两边的绿洲,左边>=右边,差值尽可能的小 2.在满足1的情况下分给左边的土地尽快能的多 而且绿洲不会出现 ...

  6. redis数据库可视化工具(RedisDesktopManager)

    RedisDesktopManager下载地址:https://redisdesktop.com/download 使用过程中可能会遇到的问题我在文后有所总结 我下载Windows版的: 我的redi ...

  7. Spark Hadoop Free 安装遇到的问题

    运行 ./sbin/start-master.sh : SparkCommand:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -cp /home/se ...

  8. python3爬虫-通过selenium获取到dj商品

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.c ...

  9. 网站url常见报错

    报错情况比较复杂,此处列出比较常见的几种报错内容: 报错: 报错是一个大类, 的报错基本上是权限问题,出现 报错时您需要检测权限配置问题. 403.1 错误是由于“执行”访问被禁止而造成的.若试图从目 ...

  10. 安装VS2010 SP1后,再安装mvc3

    安装VS2010 SP1后,再安装mvc3会报错,估计原因是此安装包会安装VS的补丁,而sp1的补丁版本高过此安装包的. AspNetMVC3ToolsUpdateSetup.exe 解决办法: 运行 ...