Hadoop2.5.2 64bit 完全分布式安装
1. 安装环境
Windows 7 64bit
VMware Workstation 10
CentOS6.5 64bit
jdk版本: jdk-7u9-linux-x64.tar.gz
hadoop版本: hadoop-2.5.2-src.tar.gz
hadoop集群3个节点,一主两从,如下:
角色 | ip | 用户 | 运行进程 |
master | 192.168.1.100 | hadoop | JobHistoryServer,ResourceManager, NameNode,NodeManager,DataNode,Main |
Slave01 | 192.168.1.101 | hadoop | NodeManager,DataNode |
Slave02 | 192.168.1.102 | hadoop | NodeManager,DataNode |
1. 关闭防火墙
vi /etc/selinux/config
在 SELINUX=enforcing 前面加个#号注释掉它
#SELINUX=enforcing
然后新加一行SELINUX=disabled
保存,退出,重启系统,就可以彻底关闭firewall了。
2. 修改IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#编辑配置文件,添加修改以下内容
BOOTPROTO=static #启用静态IP地址
ONBOOT=yes #开启自动启用网络连接
IPADDR=192.168.1.100 #设置IP地址
NETMASK=255.255.255.0 #设置子网掩码
GATEWAY=192.168.1.1 #设置网关
DNS1=8.8.8.8 #设置主DNS
DNS2=192.168.1.1 #设置备DNS
IPV6INIT=no #禁止IPV6
:wq 保存。
下面的命令执行(可选)
service ip6tables stop #停止IPV6服务
chkconfig ip6tables off #禁止IPV6开机启动
service yum-updatesd stop #关闭系统自动更新
chkconfig yum-updatesd off #禁止开启启动
service network restart #重启网络连接
出现的问题:
Ø 网络连接不上,重启网络后报以下的错误:没有找到可用于连接’System eth0’的设备。
解决方法:
CentOS虚拟机中启用不了eth0网卡解决办法:
1./etc/udev/rules.d/70-persistent-net.rules 文件
删除eth0网卡
将eth1网卡的NAME="eth1"修改为"eth0",并复制ATTR{address}中的值(MAC地址)
如: 00:0c:29:c3:bd:59
2./etc/sysconfig/network-scripts/ifcfg-eth0 文件
将复制的ATTR{address}值覆盖#HWADDR
重启服务:servicenetwork restart
注: 修改网卡名称使用root用户登录,修改“/etc/udev/rules.d/70-persistent-net.rules”文件 --- (如果服务器没有此文件就跳过)。如果是虚拟机,没有此文件,就不用修改,主要是修改NAME="eth0"
三台虚拟机有一台不能上网:原因虚拟机上的ip与windows的ip相冲突了。(折腾了我一天呀,呜呜。)
注意:自己虚拟机上的ip不要与windows上的ip相冲突了,不然,虚拟机不能上网。
Ø SSH连接centos 6.5 因超时而断开(启动的应用程序也会被终止)报以下错误信息:
解决方法:
在服务器端设置
如果有相应的权限,也可以在服务器端设置,即编辑/etc/ssh/sshd_config,并添加:
ClientAliveInterval60 (#此后该系统里的用户连接SSH时,每60秒会发一个KeepAlive请求,避免被踢。)
需要注意的是在服务器端设置后需要重启该服务器以使连接生效:sudo reboot
重启后每一个连接到此服务器上的客户端都会受其影响。另外应注意启用该功能后,安全性会有一定下降(比如忘记登出时……)
3. 设置机器hostname别名
设置别名的目的是机器间相互识别可以不用ip,配置文件中也可以不用ip,通用性上更强一些。
在 master 机器上面执行下面的命令:
# 当前ssh窗口即可生效
hostname master
# 每次重启以后均生效
vi /etc/sysconfig/network
HOSTNAME=master
同样,在 slave01 、slave02 机器上面执行相同的命令,只需要更改HOSTNAME的值:
如下:
HOSTNAME=slave01
HOSTNAME=slave02
添加Hosts映射关系,三台机器上面分别都执行操作 vi /etc/hosts 添加如下内容,之后在每台机器上面ping一下,确保能够连接彼此。
192.168.1.100 master
192.168.1.101 slave01
192.168.1.102 slave02
4. 配置集群之间SSH无密码登陆
1、为了hadoop集群的安全与方便管理,我们要另外新建用户,并设置密码,命令如下:
# 创建账号hadoop并赋予密码hadoop sudo adduser hadoop sudo passwd hadoop
删除用户 userdel – r hadoop |
2、给hadoop账户赋予root权限 vi/etc/sudoers 添加如下:
hadoop ALL=(ALL) ALL 这里会报没有权限修改一个可读文件。 解决方法: 1. 修改/etc/sudoers文件,进入超级用户,因为没有写权限,所以要先把写权限加上chmod u+w /etc/sudoers; b. 编辑/etc/sudoers文件,找到这一行:"root ALL=(ALL) ALL"在起下面添加" hadoop ALL=(ALL) ALL "(这里的hadoop 是你的用户名),然后保存。 c. 最后恢复没有写权限模式,撤销文件的写权限,chmod u-w /etc/sudoers。
2. 创建或者修改密钥目录权限 (此操作在所有服务器完成后再进入下一步) 假设本机的IP为“192.168.1.100”,配置免登录的操作步骤如下: a.以hadoop用户登录各服务器。 b.执行以下命令,修改“.ssh 目录”权限。 chmod 755 ~/.ssh 说明:如果“.ssh”目录不存在,请在/home/hadoop目录执行 mkdir ~/.ssh 命令创建。 3. 创建公钥和私钥(此操作在所有服务器完成后再进入下一步) a.以hadoop用户登录本机(假设本机的IP为“192.168.1.100”)。 b.执行以下命令,进入“.ssh”目录。 cd /home/hadoop/.ssh c.执行以下命令后,如果提示,就一直按“Enter”键,直至生成公钥。 ssh-keygen -t rsa
注:如果创建公钥和私钥后(黄色部分),提示的用户名hadoop@后面不是本机别名(上图红色部分),说明主机名称需要重新配置一次,然后记得重启,然后删除/.ssh目录下的公钥和私钥,重新生成,直到生成的密钥后缀是本机别名
1. 执行以下命令(假设本机是192.168.1.100),并根据提示输入登录密码,配置免登录。 从master登录到slave01 在主机名为master的机子上执行以下命令: 在cd .ssh目录 下: scp id_rsa.pub hadoop@slave01:/home/hadoop/.ssh/authorized_keys
从slave01登录到master 在主机名为slave01的机子上执行以下命令: 在cd .ssh目录 下: scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/authorized_keys
|
|
这样就将生成的授权秘钥拷贝到了slave01和slave02的/home/hadoop/.ssh目录下,从 master 机器 ssh到 slave01 、slave02 都不再需要密码了,同理,在slave01、slave02机器上执行上面的命令即可完成slave01到master之间的无密码登录。(其实,操作完后,slave01之间也是可以无密码登录的,只是不需要而已)
完成后,在节点master上ssh slave01看看能否无密码登录成功。同样的测试master到节点slave02是否能够无密码登录成功
现在是ssh ->slave01
ssh->slave02
5. 配置 JDK 环境
# 解压到 /opt/下面 |
使修改的配置立即生效,终端中执行source /etc/profile。
测试是否ok,执行命令which java,若出现/opt/jdk1.7.0_09/bin/java 表示已经ok 或者java-version ,出现java version "1.7.0_09" 也表明ok。
注:每个节点都要装jdk ,同理slave01、slave02
这里有可能报:无法 open: 没有那个文件或目录。-à(权限问题)解决方法:在 root下执行。
6. 安装maven
hadoop源码是使用maven组织管理的,必须下载maven。从maven官网下载,下载地址是http://maven.apache.org/download.cgi,选择 apache-maven-3.3.3-bin.tar.gz下载。
#解压到 /opt/下面
tarzxvf apache-maven-3.3.3-bin.tar.gz -C/opt/
会生成一个文件夹apache-maven-3.0.5,然后设置环境变量中。
# 配置maven环境,最好在全局 /etc/profile 配置中修改,这样所有用户均可以使用
vi /etc/profile
执行命令vi /etc/profile,编辑结果如下图所示
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
export PATH=.:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
exportMAVEN_HOME
使修改的配置立即生效,终端中执行source /etc/profile
检验maven is ok ?
mvn –version
7. 安装findbugs(可选步骤)
findbugs是用于生成文档的。如果不需要编译生成文档,可以不执行该步骤。从findbugs官网下载findbugs,下载地址是http://sourceforge.jp/projects/sfnet_findbugs/releases/,选择findbugs-noUpdateChecks-3.0.1.tar.gz下载。
执行以下命令解压findbugs到 /opt/下面
tar zxvf findbugs-noUpdateChecks-3.0.1.tar.gz -C /opt/
会生成一个文件夹findbugs-3.0.1,然后设置环境变量中。
执行命令vi /etc/profile,编辑结果如下图所示
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
检验findbugs
findbugs –version
8. 安装protoc
hadoop使用protocol buffer通信,从protoc官网下载protoc,下载地址是https://code.google.com/p/protobuf/downloads/list,选择protobuf-2.5.0.tar.gz 下载。
为了编译安装protoc,需要下载几个工具,顺序执行以下命令
yuminstall gcc
yuminstall gcc-c++
yuminstall make
如果操作系统是CentOS6.5那么gcc和make已经安装了。其他版本不一定。在命令运行时,需要用户经常输入“y”。
然后执行以下命令解压缩protobuf
tarzxvf protobuf-2.5.0.tar.gz -C /opt/
会生成一个文件夹protobuf-2.5.0,执行以下命令编译protobuf。
cd/opt/protobuf-2.5.0
./configure --prefix=/usr/local/protoc/
make
make install
只要不出错就可以了。
执行完毕后,编译后的文件位于/usr/local/protoc/目录下,我们设置一下环境变量
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:/usr/local/protoc/bin:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
检查protoc
protoc –version
9. 安装Ant
执行以下命令解压ant到 /opt/下面
tar zxvf apache-ant-1.9.6-bin.tar.gz -C/opt/
会生成一个文件夹apache-ant-1.9.6,然后设置环境变量中。
执行命令vi /etc/profile,编辑结果如下图所示
ANT_HOME=/opt/apache-ant-1.9.6
FINDBUGS_HOME=/opt/findbugs-3.0.1
JAVA_HOME=/opt/jdk1.7.0_09
MAVEN_HOME=/opt/apache-maven-3.3.3
exportPATH=.:$ANT_HOME/bin:/usr/local/protoc/bin:$FINDBUGS_HOME/bin:$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export MAVEN_HOME
export FINDBUGS_HOME
export ANT_HOME
检视:ant -version
10. 编译hadoop源码
# 解压到 /opt/下面
tarzxvf hadoop-2.5.2-src.tar.gz -C /opt/
->会生成一个文件夹 hadoop-2.5.2-src
cd /opt/hadoop-2.5.2-src
->解压源码tar包,并进入解压后的根目录(下面的命令一定要在cd 进入源代码目录下进行,否则会出错)
mvn package -Pdist,native,docs –DskipTests-Dtar
或mvn -X package -DskipTests -Pdist,native-Dtar (如果出现错误可以加上-X显示错误详细信息:)
注: cd 进入目录,more BUILDING.txt 可以看到编译hadoop 的详细命令,官方说明的编译命令是 mvn package -Pdist,native -DskipTests -Dtar
但是在最新版的maven下可能会报错,所以我修改命令为 mvn cleanpackage -Pdist -Pnative -DskipTests -Dtar
当然一次编译成功几乎是不可能的,所以clean还是很有必要的,接下来就是等待,maven会下载各种jar包.
网络不给力花的时间太长了(接近一个小时)。
进入编译后的目录,可看到以下文件
cd/opt/hadoop-2.5.2-src/hadoop-dist/target/
在root用户下操作:
1.master/slave01/slave02 创建hadoop文件夹存放安装包和解压后的文件:
在master主机上
cd /home
mkdir hadoop
在slave01主机上
cd /home
mkdir hadoop
在slave02 主机上
cd /home
mkdir hadoop
将安装包scp到自己的机子上
cd/opt/hadoop-2.5.2-src/hadoop-dist/target/
scp hadoop-2.5.2.tar.gz root@192.168.1.100:/home/hadoop/
scp hadoop-2.5.2.tar.gz root@192.168.1.101:/home/hadoop/
scp hadoop-2.5.2.tar.gz root@192.168.1.102:/home/hadoop/
2.解压安装包
cd /home/hadoop
tar -zvxf hadoop-2.5.2.tar.gz
每台节点都要安装hadoop。分别解压hadoop-2.5.2.tar.gz到三台机器的hadoop目录下。
3. 修改配置
cd /home/hadoop/hadoop-2.5.2/etc/hadoop
1) vicore-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration> |
2) vihdfs-site.xml
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> --------------------------slave个数(注释去掉) </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration> |
3) vimapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master:50030</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> |
4) vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration> |
5) vi slaves
删掉localhost
输入
master (这样master本身也作为一个dataNode)
slave01
slave02
6) vi hadoop-env.sh
修改为:exportJAVA_HOME=/opt/jdk1.7.0_09
7) vi yarn-env.sh
添加 export JAVA_HOME=/opt/jdk1.7.0_09
8) 将主机配置scp到两台slave上(避免后面两台机器再做重复的操作)
cd/home/hadoop/hadoop-2.5.2/etc
scp-r hadoop root@slave01:/home/hadoop/hadoop-2.5.2/etc
scp-r hadoop root@slave02:/home/hadoop/hadoop-2.5.2/etc
9). 主机上格式化文件系统
cd /home/hadoop/hadoop-2.5.2
bin/hdfs namenode -format
(格式化过程中会有一次需要输入yes)
10).启动
sbin/start-dfs.sh
sbin/start-yarn.sh(或者sbin/start-all.sh)
?这里有问题
6. 通过浏览器访问