首先保证系统连上网络且更新过
$sudo apt-get update
所需工具包如下:
对应为版本 具体包名 下载地址
JDK 7u71 jdk-7u71-linux-i586.tar.gz http://ant.apache.org/bindownload.cgi
Ant 1.9.4 apache-ant-1.9.4-bin.tar.gz http://maven.apache.org/download.cgi
Maven 3.2.3 apache-maven-3.2.3-bin.tar.gz http://findbugs.sourceforge.net/index.html
Findbugs 3.0.0 findbugs-3.0.0.tar.gz http://download.youkuaiyun.com/download/ruijiliang/6991999
Protobuf 2.5.0 protobuf-2.5.0.tar.gz http://www.apache.org/dyn/closer.cgi/hadoop/common
下载后以上工具后接下来就是搭建编译环境,按照上序依次安装并配置,配置环境变量。
安装之前的几点说明:
1、配置环境变量网上有人说/etc/profile , .profile 或者.bashrc(.zshrc) 中配置都行,但必须source之后才能生效。.bashrc 或.zshrc的话source一次就行了,/etc/profile 或 .profile则需要每次启动终端时都source一次才能生效,直到下次开机。
2、本人建议是所有配置都一个文件里面修改,譬如/etc/profile,不要把配置分散在不同文件中,可能导致原PATH值丢失,导致不必要的麻烦。
3、注意,安装完工具包后source /etc/profile,可能提示找不到命令source,此时切换到root,重新执行即可。
4、如果下载的不是gz包,解压时去掉参数z即可。
5、记住不要用root用户编译,全程用本地用户。除了以下会提到的source命令。
我们开始安装吧,不要太激动,每一步都要小心!
1、安装JDK 7u71
tar -zxvf jdk-7u71-linux-i586.tar.gz
sudo cp -r jdk-7u71-linux-i586 /usr/lib/jvm/
进入/etc/profile 在最后面添加配置环境变量,添加完后source.
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_71
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
2、安装
Ant 1.9.4
tar -zxvf apache-ant-1.9.4-bin.tar.gz
sudo cp -r apache-ant-1.9.4-bin.tar.gz /usr/share/
同上配置环境变量:
export ANT_HOME=/usr/share/apache-ant-xxx
export PATH=$PATH:$ANT_HOME/bin
3、安装Maven 3.2.3
tar zxvf apache-maven-3.2.3-bin.tar.gz
sudo cp -r apache-maven-3.2.3 /usr/share/
配置环境变量
export M2-HOME=/usr/share/apache-maven-3.2.3
export MAVEN_OPTS="-Xms256 -Xmx512m"
export PATH=$PATH:$M2_HOME/bin
4、安装Findbugs 3.0.0
tar -zxvf findbugs-3.0.0.tar.gz
sudo cp -r findbugs-3.0.0 /usr/share/
配置环境变量
export FINDBUGS_HOME=/usr/share/findbugs-3.0.0
export PATH=$PATH:$FINDBUGS_HOME/bin
5、安装protobuf 2.5.0
tar zxvf protobuf-2.5.0
./configure --prefix=/usr/share
make&&make install 此步骤可能提示权限不够,前面加上sudo即可。安装这个文件的时候,可能会提示找不到protoc compiler,此时sudo apt-get install protoc compiler既可以,安装完后用protoc --version验证下。
网摘:工具都安装在/usr/share目录下,Ubuntu系统会默认搜索该目录下的库文件,无需其他配置就行,但是如果被安装在/usr/local/目录下,Ubuntu是不会自动搜索该目录下的文件的,此时需要配置开发库环境变量:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/bin
此问题没有详细验证,但是如果出现库文件找不到的问题的话,在/etc/profile里面也可以加上这句试试。如果仍然不行,则应该是系统里面确实缺少或者没有安装需要的库,那么按照error提示安装相应的库文件既可。
6、真正的战役,编译hadoop源码,此时必须连上网络才行,因为系统会downloading 非常多的东西,网速不好的话可能会downloading几个小时 - -!!
以上操作完成后,我们就要开始编译hadoop源码包了。我用的是hadoop-2.5.2-src.tar.gz,
tar -zxvf hadoop-2.5.2-src.tar.gz
cd hadoop -2.5.2.src
mvn package -Pdist,native,docs -DskipTests -Dtar
执行mvn命令后系统就会报错,遇到一个错误就会停止编译,解决之后会出现下一个错误,总之,系统会在每遇到一个错误时停止编译,直到解决之后才会继续编译出现下一个错误- - ||。可能会遇到找不到库文件ZLIB,apt-get install zlib &&apt-get install zlib-devel安装此文件即可,貌似还会遇到缺少或者找不到其他的文件,慢慢一个一个apt-get安装即可,因为是物理linux机上安装的,当时的文档在linux机上,现在用的windows机,那么多的错误一会也全想不起来,后面有空会补充。
配置
万事俱备,开始正式搭建。
Hadoop三种运行模式:
1. 单机模式(standalone):单机模式是Hadoop的默认模。当配置文件为空时,Hadoop完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。
2. 伪分布模式(Pseudo-Distributed Mode):Hadoop守护进程运行在本地机器上,模拟一个小规模的的集群。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
3. 全分布模式(Fully Distributed Mode):Hadoop守护进程运行在一个集群上。
自己学习还是搭伪分布式比较好(单机模式其实不需要什么配置)。也不单独添加Hadoop用户了,切换麻烦,就用自己常用帐户就行了。
步骤:
1、安装ssh
由于Hadoop用ssh通信,先安装sshd
- ~$ sudo apt-get install openssh-server #此文件不一定一次能安装成功,看网速或者人品吧,多试几次,曾经有一位副教授安装这个不成功,于是以熟悉linux系统为名,让我安装,结果我试了两三次便安装成功,事后,他问我:你怎么安装成功的?OX,#@$@#%@#$@#$。。。。。。。。。
ssh安装完成以后,先启动服务:
- ~$ sudo /etc/init.d/ssh start
启动后,可以通过如下命令查看服务是否正确启动:
作为一个安全通信协议,使用时需要密码,因此我们要设置成免密码登录,生成私钥和公钥:
- ~$ ssh-keygen -t rsa -P
按三次或者几次回车键- -,直到出现一个字符组成的卡通图案既可以。此时生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。现在将公钥追加到authorized_keys中(anthorized_keys用户保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容):
$ cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys (此步骤可以实现的方法还可以用mv ~/.ssh/id_rsa.pub ~/.ssh/authorized.keys,但是本人不提倡用这种方法,因为一不小心也就是会用现在的公钥去覆盖原来的authorized_keys,而如果这个文件本来存在且里面还有信息时,就会不好了。)
现在可以登入ssh确认以后登录不用输入密码
$ssh localhost
登出:
$ exit
第二次登录:
$ssh localhost
登出:
$exit
这样以后登录就不需要密码了。
2、安装Hadoop-2.5.2
将刚才编译得到的hadoop-2.5.2复制到/opt目录下(大型软件和平台一般放在这个目录),方便配置,设置权限为777:
sudo cp -r hadoop-2.5.2-src/hadoop-dist/target/hadoop-2.5.1 /opt/
sudo chmod -R 777 /opt/hadoop-2.5.2
3、配置hadoop环境变量
在/etc/profile或.profile或.bashrc中配置hadoop环境变量(上面说过,这里推荐就在/etc/profile里面修改),配置完source一下。
export HADOOP_HOME=/opt/hadoop-2.5.1
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export CLASSPATH=.:$HADOOP/lib:$CLASSPATH
export PATH=$PATH:$HADOOP_HOME/bin
4、设置hadoop-env.sh(java安装路径)
打开/opt/hadoop-2.5.2/etc/hadoop目录下的hadoop-env.sh,添加如下信息:
export JAVA_HOME=
/usr/lib/jvm/jdk1.7.0_71
(这里也有人设置成${JAVA_HOME},写成这样可能会导致后面错误提示JAVA_HOME is not set。所以本人推荐写成绝对路径)
export HADOOP_HOME=/opt/hadoop-2.5.2
export PATH=$PATH:$HADOOP_HOME/bin
配置完后回到命令行下
source /opt/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
至此,hadoop的单机模式已成功安装。
命令行下使用hadoop version验证,注意不是hadoop -version或者--version,么有前面横线。出现hadoop版本表示安装成功。
5、搭建伪分布式环境,设定xxx-site.xml,
注意:设定以下配置文件时,不要删除了前面的<configuration>...
</configuration>配置文件就添加在这个标注之中。(有人犯过这个样的错,不是我。)
这里需要设定4个文件,当然安装的hadoop版本不一样或者你的需求不一样的话,需要设定的文件也可能不需要设定这么多。
四个文件如下,位于/opt/hadoop-2.5.2/etc/hadoop/目录下
core-site.xmlHadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。
hdfs-site.xmlHadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。
mapred-site.xmlMapReduce 守护进程的配置项,包括jobtracker和tasktracker。
(
这个文件默认没有,但是有mapred-site.xml.template,依次使用如下操作:
cp mapred-site.xml.template mapred-site.xml.template.bak
mv mapred-site.xml.template mapred-site.xml
ls
便可以看到mapred-site.xml)
yarn-site.xmlYarn 框架用于执行MapReduce 处理程序
首先在hadoop目录下新建几个文件夹
$cd /opt/hadoop-2.5.2/etc/hadoop/
$mkdir tmp
$mkdir -p hdfs/name
$mkdir -p hdfs/data
接下来依次编译上面提到的四个文件,IP地址处我填的localhost,还有人填自己的局域网IP,根据自己需要填写。
core-site.xml:
- <configuration>
- <property>
- <name>fs.default.name</name>
- <value>hdfs://localhost:9000</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/opt/hadoop-2.5.2/tmp</value>
- </property>
- </configuration
hdfs-site.xml
- <configuration>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.name.dir</name>
- <value>/opt/hadoop-2.5.2/hdfs/name</value>
- </property>
- <property>
- <name>dfs.data.dir</name>
- <value>/opt/hadoop-2.5.2/hdfs/data</value>
- </property>
- </configuration>
上述路径都需要自己手动用mkdir创建(开头就已经创建了),具体位置也可以自己选择,其中
dfs.replication的值建议配置为与分布式 cluster 中实际的 DataNode 主机数一致,在这里由于是伪分布式环境所以设置其为1。
mapred-site.xml(这个文件默认不存在,但是存在其模板文件mapred-site.xml.template,copy一份就行了,上面已经说过方法,不多说):
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- </configuration>
注意:上面yarn一定要小写,不然编程序时候会出错,cannot initialize cluster,pls check your configuration for mapreduce.framework.name大概是这么几个单词。。。如果你的好奇心特别强,心里问这里为什么value会是yarn?请参见我的另外一个博文(撰稿中)
请注意这里安装的2.5.2版本,2.*版本较1.*版本改动很大,主要是用Hadoop MapReduceV2(Yarn) 框架代替了一代的架构,其中JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager, ApplicationMaster 与 NodeManager 三个部分,而具体的配置文件位置与内容也都有了相应变化。所以我们在mapred-site.xml中设置了处理map-reduce的框架Yarn,接下来就需要在yarn-site.xml中配置ResourceManager, ApplicationMaster 与 NodeManager。
yarn-site.xml:
- <configuration>
-
- <property>
- <name>yarn.nodemanager.aux-services</name>
- #注意此处yarn同样需要小写
- <value>mapreduce_shuffle</value>
- </property>
- <property>
- <description>The address of the applications manager interface in the RM.</description>
- <name>Yarn.resourcemanager.address</name>
- <value>localhost:18040</value>
- </property>
- <property>
- <description>The address of the scheduler interface.</description>
- <name>Yarn.resourcemanager.scheduler.address</name>
- <value>localhost:18030</value>
- </property>
- <property>
- <description>The address of the RM web application.</description>
- <name>Yarn.resourcemanager.webapp.address</name>
- <value>localhost:18088</value>
- </property>
- <property>
- <description>The address of the resource tracker interface.</description>
- <name>Yarn.resourcemanager.resource-tracker.address</name>
- <value>localhost:8025</value>
- </property>
- </configuration>
格式化HDFS
通过以上步骤,我们已经设定好Hadoop单机测试环境,接着就是启动Hadoop到相关服务,
格式化namenode,secondarynamenode,tastktracker
操作如下:
$ hadoop namenode -format
以上操作如果过不去,就对照检查你的配置,是不是和上面的不一样:
1、譬如是不是环境变量没设置好,没有source,或者是不是没有注销系统而更换了shell等等。此种错误source之后直接重启系统最直接解决- -||
2、是不是在多个文件里面添加了export语句,这时集中在一个文件里面的修改,把求他修改注释掉,source,仍不行,系统重启- -||
3、上面四个配置文件里面属性标识敲错或者敲漏,注意是<></>配对,弄过html的应该都知道。把description敲成discription,把value敲成vlaue.....耐心慢慢检查,或者不是不是累教不改的,将yarn写成Yarn。。。
启动Hadoop
接着执行start-all.sh来启动所有服务,包括namenode,datanode,start-all.sh脚本用来装载守护进程,操作如下
/opt/hadoop-2.5.2/sbin$ ./start-all.sh
然后用java的jps命令列出所有守护进程来验证安装成功
/opt/hadoop-2.5.2/bin$ jps
出现大概5-7个进程。
检查运行状态
例如查看dfs运行状态,打开浏览器,在地址栏输入http://localhost:50070会出现Hadoop用于监控机群健康状态的web界面(localhost代表自己的IP,如果是在局域网内其他电脑上访问此主机,则localhost必须改为安装hadoop系统的电脑IP地址。)
至此安装hadoop大功告成!想跑例程时,如果出现错误,仍然返回去检查配置文件。