一、安装说明
系统环境:CentOS-6.4 (Oracle VM VirtualBox)
Hadoop版本:hadoop-2.4.1
以下都是采用root用户操作,建议另外创建一个用户和组,如: hadoop用户和hadoop用户组
二、安装前提
1、在VirtualBox中安装好CentOS6.4 linux操作系统
2、添加hadoop用户和hadoop用户组
groupadd hadoop # 创建hadoop用户组
useradd -g hadoop hadoop #创建hadoop用户,并分配给hadoop用户组
id hadoop # 查询hadoop用户
passwd hadoop # 给hadoop设置密码
chown hadoop:hadoop -R 文件夹
2、下载要使用的软件
hadoop-2.4.1.tar.gz
jdk-6u43-linux-x64.bin
3、规划服务器
IP |
hostname |
角色 |
|
192.168.56.100 |
master |
nameNode |
|
192.168.56.102 |
slave1 |
dataNode |
|
4、设置VM
4.1 修改master机器IP地址 ,eth1采用host-only,让vm与windows在同一个局域网内
3.2 使用命令ifconfig查看
3.3 开启linux的SSH服务,方便远程访问。
需要在 root 用户下操作。也可以使用ntsysv,找到sshd服务
3.4 修改hosts文件
hostname 查看主机名
vi /etc/hosts
vi /etc/sysconfig/network,更正:将master.localhost 修改为 master
以上修改完成后,重启虚机机。主机名变成了:master
3.5 关闭防火墙
3.6 设置ssh免密码登陆
产生密钥,执行命令ssh-keygen -t rsa -P '' ,产生的密钥位于~/.ssh文件夹
追加:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 或者使用 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
在验证前,需要做两件事儿。第一件事儿是修改文件“authorized_keys”权限(权限的设置非常重要,因为不安全的设置,会让你不能使用RSA功能),
另一件事儿是使用root用户设置“/etc/ssh/sshd_config”的内容。使其无密码登录有效。
1)修改文件“authorized_keys”
chmod 600 ~/.ssh/authorized_keys
备注:如果不进行设置,在验证时,扔提示你输入密码,在这里花费了将近半天时间来查找原因。
2)用root用户登录服务器修改SSH配置文件“/etc/ssh/sshd_config”的下列内容
vim /etc/ssh/sshd_config
设置完之后记得重启SSH服务,才能使刚才设置有效。
本地验证,无密码登录已经设置完毕
【如果采用伪分布式安装Hadoop,忽略以下操作】
修改slave1 192.168.56.102 的 vi /etc/sysconfig/network文件
修改slave1 192.168.56.102 和 master 192.168.56.100 的 vi /etc/hosts 文件
重启slave1的虚拟机。
1)接下来的事儿是把公钥复制所有的Slave器上。将master生成的id_rsa.pub拷贝到slave。
命令格式进行复制公钥:scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/
例如:scp ~/.ssh/id_rsa.pub [email protected]:~/
上面的命令是复制文件“id_rsa.pub”到服务器IP为“192.168.56.102”的用户为“root”的“/root”文件夹下面。
从上图中我们得知,已经把文件“id_rsa.pub”传过去了,因为并没有建立起无密码连接,所以在连接时,仍然要提示输入192.168.56.102服务器用户root的密码。
为了保证确保确实已经把文件传过去了,用Xshell或者SecureCRT登陆slave1 192.168.56.102服务器,从图中得知已经成功把公钥复制过来咯。
2)查看slave1的~目录下是否有.ssh文件夹,如果没有则创建,使用命令: mkdir ~/.ssh,并且修改权限 chmod 700 ~/.ssh
备注:如果不进行,即使你按照前面的操作设置了“authorized_keys”权限,并配置了“/etc/ssh/sshd_config”,还重启了sshd服务,在Master能用“ssh localhost”进行无密码登陆,
但是对Slave1进行登录仍然需要输入密码,就是因为“.ssh”文件夹的权限设置不对。这个文件夹“.ssh”在配置SSH无密码登录时系统自动生成时,权限自动为“700”,
如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。
3)追加到授权文件“authorized_keys”
这一步就是把Master的公钥追加到Slave1的授权文件“authorized_keys”中去。使用下面命令进行追加并修改“authorized_keys”文件权限:
4)用root用户修改“/etc/ssh/sshd_config”
具体步骤参考前面Master的“设置SSH配置”,具体分为两步:第1是修改配置文件;第2是重启SSH服务。
5)在Master服务器中使用SSH无密码登录Slave1
当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。
ssh 远程服务器IP
从上图我们主要3个地方,第1个就是SSH无密码登录命令,第2、3个就是登录前后“@”后面的机器名变了,由“Master”变为了“Slave1”,
这就说明我们已经成功实现了SSH无密码登陆了。
最后记得把“/root”目录下的“id_rsa.pub”文件删除掉。
rm –r ~/id_rsa.pub
到此为止,经过前5步已经实现了从“Master.Hadoop”到“Slave1.Hadoop”SSH无密码登录,
下面就是重复上面的步骤把剩余的两台(Slave2.Hadoop 和Slave3.Hadoop)Slave服务器进行配置。
这样,我们就完成了“配置Master无密码登录所有的Slave服务器”。
配置所有Slave无密码登录Master
在slave1 192.168.56.102上创建创建自己的公钥和私钥,并把自己的公钥追加到"authorized_keys"文件中。
more authorized_keys
此处已经将slave1 192.168.56.102自己的公钥追加到了 authorized_keys中。
使用命令“scp”复制“Slave1.Hadoop”的公钥“id_rsa.pub”到“Master.Hadoop”的“/root”目录下,并追加到“Master.Hadoop”的“authorized_keys”中。
1)在“Slave1.Hadoop”服务器的操作,scp ~/.ssh/id_rsa.pub [email protected]:~/
2)在“master.Hadoop”服务器的操作
验证文件是否已经复制到master 192.168.56.100的~目录下,登陆到192.168.56.100上查看,如图已经证明成功复制。
将slave1的公钥id_rsa.pub 追加到 ~/.ssh/authorized_keys
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
然后删除掉刚才复制过来的“id_rsa.pub”文件。
在slave1 192.168.56.102 验证SSH无密码登陆到 master 192.168.56.100
从上面结果中可以看到已经成功实现了,再试下从“Master.Hadoop”到“Slave1.Hadoop”无密码登录。
至此“Master.Hadoop”与“Slave1.Hadoop”之间可以互相无密码登录了,
剩下的就是按照上面的步骤把剩余的“Slave2.Hadoop”和“Slave3.Hadoop”与“Master.Hadoop”之间建立起无密码登录。
这样,Master能无密码验证登录每个Slave,每个Slave也能无密码验证登录到Master。
三、安装
1、安装JAVA环境,因为Hadoop都是运行在JDK之上的。
所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以“root”的身份进行。
使用命令 chmod u+x jdk-6u43-linux-x64.bin ,赋予可执行的权限
将 jdk-6u43-linux-x64.bin 拷贝到 /usr/java目录下,如果没有java目录,先创建。
安装JDK,多出 jdk1.6.0_43,并删除原安装包
配置JDK环境变量
vim /etc/profile
#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_43
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
保存并且生效,source /etc/profile
验证是否生效,java -version
JDK至此安装成功。
安装剩余机器,slave1、等等
然后去slave1上查看是否复制成功。
按照上面的步骤,在其他机器上安装JDK。
2、Hadoop集群安装
所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以“root”的身份进行。
把Hadoop的安装路径添加到 "etc/profile"中,修改"/etc/profile"文件(配置java 环境变量的文件),将以下语句添加到末尾,并使其有效
#set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
保存并且生效,source /etc/profile
Hadoop的配置文件
之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。
由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。
core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
修改 hadoop-env.sh
export JAVA_HOME=${JAVA_HOME} 修改为 export JAVA_HOME=/usr/java/jdk1.6.0_43
修改 yarn-env.sh
修改 slaves
把salve节点的 主机名或者IP 加入,把原来的“localhost”删掉。
注意:原来文件中的
修改 vim core-site.xml
修改 vim hdfs-site.xml
原来系统内的mapred-site.xml文件是mapred-site.xml.template 应用下面的命令对其重命名:
mv mapred-site.xml.template mapred-site.xml
修改 vim mapred-site.xml
修改 vim yarn-site.xml
修改完毕后,将配置文件拷贝到slave节点:scp -r /usr/hadoop/etc/hadoop/ [email protected]:/usr/hadoop/etc/
按照前两部分将所有节点都配置好之后,就可以启动hadoop集群了。
首先在master节点上使用如下命令:
命令 hadoop namenode –format #格式化namenode节点。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)
中间省略很多信息
出现红色的信息,表示格式化HDFS成功~~~
start-all.sh #启动集群
红色标记:表示出现一个警告,start-all.sh 已经过期,不建议使用。建议使用start-dfs.sh和start-yarn.sh
新版本的hadoop其实不建议这么直接start-all,建议一步步来,神马start-dfs,然后在start-map,之类的,我觉得麻烦,就没试。
在每个节点上使用jps命令查看进程:
master 192.168.56.100
slave1 192.168.56.102
stop-all.sh #停止集群
查看DataNode的信息: hadoop dfsadmin -report
浏览器打开:http://192.168.56.100:50070/dfshealth.html#tab-overview
浏览器打开:http://192.168.56.100:8088/cluster
=================================================================
遗留问题:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
加上调试日志:命令行 export HADOOP_ROOT_LOGGER=DEBUG,console 或者 在 hadoop-env.sh 加入 export HADOOP_ROOT_LOGGER=DEBUG,console
wrong ELFCLASS32,难道是加载的so文件系统版本不对
执行命令file libhadoop.so.1.0.0
果然是80386,是32位的系统版本,而我的hadoop环境是64位OS
原来直接从apache镜像中下载的编译好的Hadoop版本native library都是32版本的,如果要支持64位版本,必须自己重新编译,这就有点坑爹了,要知道几乎所有的生产环境都是64位的OS
YARN官方对于native library的一段话验证了这一点
“The pre-built 32-bit i386-Linux native hadoop library is available as part of the hadoop distribution and is located in the lib/native directory”
重新checkout source code
svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.1.0-beta/
加上编译native的选项,编译时会根据当前的操作系统架构来生产相应的native库
mvn package -Pdist,native -DskipTests -Dtar
再去native文件下查看所有的file type,已经都是64位版的了,替换线上文件,WARNING消除
参考资料:
《Hadoop 新 MapReduce 框架 Yarn 详解》
《Hadoop 2.4.0完全分布式平台搭建、配置、安装》
《Hadoop-2.4.0分布式安装手册》
《hadoop2.4.0 安装配置》
《Hadoop 2.2.0 (YARN)搭建笔记》
《hadoop2.4.0安装教程》
印象笔记,让记忆永存。下载印象笔记 |