安装过程中遇到的坑:hadoop 2.5版本之后都是采用64编译,所以要安装搭建2.5之上版本的集群,请安装64操作系统,64位jdk。
用到的软件:VMware用来在window下安装linux虚拟机。安装好虚拟机之后,可以直接复制虚拟机。下面我搭建集群的时候我只安装过一次虚拟机,其他两个节点都是复制出来的。
可能用到的软件:winSCP:用来将文件从window传到虚拟机上,当然其他很多工具也行。
Xshell:远程连接虚拟机,直接操作,方便快捷。secureCRT也可以
IP配置
Master:192.168.1.21
Slave1:192.168.1.22
Slave2:192.168.1.23
安装ssh,
命令:sudo apt-get install ssh。
然后通过winSCP上传jdk到虚拟机,必须安装了ssh才能使用winSCP上传文件到虚拟机中。可以通过xshell等软件连接上虚拟机,这样就不必打开虚拟机终端来执行了命令。
上传jdk到/home/hadoop文件加下
JDK安装:
解压jdk: tar zxvf jdk-7u79-linux-x64.gz
将
jdk1.7.0_79
放到/app文件夹下去并命名为jdk7:mv jdk1.7.0_79/ /app/jdk7
配置环境变量:sudo vim /etc/profile 打开profile文件,并将下面的粘贴到最后,红框的是实际jdk的安装路径。这里我的是/app/jdk7
#set java enviroment
JAVA_HOME=/app/jdk7
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
然后使profile文件生效:source /etc/profile
验证jdk是否安装成功:java -version
安装成功jdk后,我们可以将虚拟机复制成三分,这样就 每个节点都安装好了jdk了。省去每个节点都去安装jdk.
然后设置各个节点的主机名,
修改之后可能要重启主机名的变更才会生效。
master:修改/etc/hostname 文件为master。下面截图就是hostname的内容。
slave1:做同样的操作。改为slave1.
slave2:同样操作
分别修改的
三个节点(每个节点的都要修改)的 /etc/hosts文件,增加下面的配置
192.168.1.21
master
192.168.1.22
slave1
192.168.1.23
slave2
安装SSH 免密码登陆(原理是这样的,master生成公钥
id_rsa.pub,然后将这些公钥分别放到
自己和slave
的
authorized_keys中,那么master就可以免密码登陆
自己和slave
节点了。
)
这个操作是要让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上。
首先生成 Master 节点的公匙,在 Master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):
cd ~/. ssh # 如果没有该目录,先执行一次ssh localhostrm ./id_rsa* # 删除之前生成的公匙(如果有)ssh-keygen -t rsa # 一直按回车就可以
让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:
cat ./id_rsa.pub >> ./authorized_keys
完成后可执行 ssh Master
验证一下(可能需要输入 yes,成功后执行 exit
返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:
接着在 Slave1 节点上,将 ssh 公匙加入授权:
mkdir ~/. ssh # 如果不存在该文件夹需先创建,若已存在则忽略cat ~/id_rsa.pub >> ~/.ssh/authorized_keysrm ~/id_rsa.pub
Slave2节点同上。
安装hadoop
通过winscp上传hadoop的安装包到master虚拟机,然后解压到/app下。然后先配置环境变量,这样就能shell的任意地方执行hadoop命令.
在/etc/profile文件增加下列配置,其中红框的为hadoop安装目录,结合自己情况。我这里hadoop是在/app文件夹下的
#set hadoop enviroment
export PATH=$PATH:/app/hadoop/bin:/app/hadoop/sbin
配置hadoop
/app/hadoop/etc/hadoop/hadoop-env.sh
/app/hadoop/etc/hadoop/yarn-env.sh
/app/hadoop/etc/hadoop/core-site.xml
/app/hadoop/etc/hadoop/hdfs-site.xml
/app/hadoop/etc/hadoop/yarn-site.xml
/app/hadoop/etc/hadoop/mapred-site.xml
/app/hadoop/etc/hadoop/slaves
/app/hadoop/etc/hadoop/yarn-env.sh
/app/hadoop/etc/hadoop/core-site.xml
/app/hadoop/etc/hadoop/hdfs-site.xml
/app/hadoop/etc/hadoop/yarn-site.xml
/app/hadoop/etc/hadoop/mapred-site.xml
/app/hadoop/etc/hadoop/slaves
hadoop-env.sh 配置:
要把
export
JAVA_HOME=
${JAVA_HOME}
改成下面的绝对路径:
export
JAVA_HOME=
/usr/java
yarn-env.sh配置:也是要换成绝对路径:
export
JAVA_HOME=/usr/java
core-site.xml配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/app/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
hdfs-site.xml 配置:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/app/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/app/hadoop/tmp/dfs/data</value>
</property>
</configuration>
yarn-site.xml配置:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml配置:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
slaves配置:
hadoop配置好之后要讲hadoop整个文件分别复制到其他slave节点中去。保证每台机器都有:
/app/jdk
有jdk,运行hadoop
/app/hadoop hadoop
/etc/profile 环境变量
/etc/hosts
/app/hadoop hadoop
/etc/profile 环境变量
/etc/hosts
格式化hdfs:
hdfs namenode -format
启动hadoop:start-dfs.sh
start-yarn.sh
停止hadoop:stop-dfs.sh
stop-yarn.sh
要是启动过程中遇到,权限不够的请修改权限。我启动的时候就遇到slave1跟slave2权限不够后来检查是slave的hadoop下的bin和sbin
文件夹下脚本没有执行权限。增加执行权限,命令 chmod 755 /app/hadoop/sbin/*
chmod 755 /app/hadoop/bin/*
启动中要是遇到JAVA_HOME not set的问题,多半是 hadoop的配置文件
hadoop-env.sh
yarn-env.sh中JAVA_HOME没有用绝对路径。