centos6搭建hadoop伪分布式集群(非HA)
一、准备工作:
1.安装虚拟机 VMware Workstation
2.在虚拟机上安装linux系统,我这里安装的是
CentOS-6.8-x86_64-bin-DVD1.iso
3.下载jdk-8u65-linux-x64.tar.gz
4.下载hadoop-2.6.1.tar.gz
这里说明下,为什么使用centos
1.CentOS是redhat的重写版,本身是免费的
2.CentOS独有yum命令支持在线升级,可以即时更新系统,不需要像redhat那样购买服务
登录用户名和密码统一设置成hadoop,并且各个节点的目录结构要保持一致,方便集群管理和操作
3.安装成功一台系统后,再同样安装另外两台,搭建3台机器,即1个主节点(namenode)和两台数据节点(datanode),后期根据HA再扩展节点
注:如何快速复制系统,找到虚拟机的安装目录,将其中的文件全部复制到一个新的文件夹,如图:
然后再虚拟机中选文件-》打开
选择虚拟机的执行程序,打开,系统就复制成功了,打开系统时,有如下提示:
选择我已复制该虚拟机,搞定
4.准备配置需要的软件包
1)hadoop-2.6.1.tar压缩包
2)
5.调整系统的分辨率,以适应全屏
6.各系统间使用nat模式,和主机共享网络,在一个网段里,因此能上网
打算把namenode装在hadoop1节点,secondary namenode装在hadoop2节点
二、配置服务器间免密登录
1)配置hadoop1的/etc/hosts,dns映射(需要登录root用户)
#localhost
192.168.80.130 hadoop1
#hadoop2
192.168.80.131 hadoop2
#hadoop3
192.168.80.132 hadoop3
同理配置hadoop2,hadoop3节点
2)在hadoop1节点上生成私钥
ssh-****** -t rsa
-b:指定**长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存**的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的**类型。
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]将公钥钥分别保存到hadoop2和3节点
上面的命令是 ssh-copy-id将pub值写入远程机器的~/.ssh/authorized_key中
登录hadoop2,的确不用输入密码了
同理,在hadoop2节点,需要把公钥保存到hadoop1和hadoop3
在hadoop3节点,需要把公钥保存到hadoop2和hadoop1
,免密登录到此配置完成
注意:若是在root用户下面生成的私钥公钥,并发往其它机器,那么需要用这个用户(root)登录其它用户才行,如果时hadoop用户登录其它主机,需要重新配置一份公钥并发送
三、配置jdk环境
我这里没有集成xtfp,所以用的rz命令上传windows下载好的安装包,如果本地服务器没有配置这个命令,可使用yum install lrzsz自动配置
1)先把jdk安装包上传到/home/hadoop/hadoop/jdk目录下
2)解压文件
tar -xzvf jdk-8u65-linux-x64.tar.gz
3)配置环境变量
vim /etc/profile
source /etc/profile 使配置生效
4)jdk配置完毕
5)同理配置hadoop2和hadoop3节点,在此就不详细描述了
四、配置hadoop环境
1)上传hadoop gz包到/home/hadoop/hadoop目录下
2)解压文件
3)配置环境变量
4)source /etc/profile使文件生效
5)执行hadoop命令,出现如下图所示,即为成功
五、配置hadoop运行环境
1)修改core-site.xml
<configuration>
<!--此属性用来指定namenode的hdfs协议的文件系统通信地址,可指定一个主机+端口,也可指定为一个namenode服务-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!--此属性用来执行IO文件缓冲区的大小-->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!--指定hadoop运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.6.1/data/tmp</value>
</property>
</configuration>
后期如果假如zookeeper的话,可添加如下属性
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
2)修改hadoop-env.sh
找到
修改等号后面的内容为/home/hadoop/hadoop/jdk/jdk1.8.0_65即可
3)修改hdfs-site.xml
<configuration>
<!--secondary namenode的http通讯地址,-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9001</value>
</property>
<!--namenode数据的存放地点,也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.6.1/dfs/name</value>
</property>
<!--datanode数据的存放地点,也就是block块存放的目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop/hadoop-2.6.1/dfs/data</value>
</property>
<!--hdfs的副本数量设置,默认为3 也就是上传一个文件,将其根据block设置的大小限制分割后,每个block块冗余副本个数-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--开启hdfs的web访问接口,默认端口时50070-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
4)vim salves(hadoop1不需要加)
hadoop2
hadoop3
5)修改mapred-env.sh
6)修改mapred-site.xml(注意要将mapred-site.xml.template重命名为 .xml的文件)
<!--指定mr框架为yarn方式,hadoop第二版本MR也是根据资源管理系统yarn来运行-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7)修改yarn-env.sh
8)修改yarn-site.sh
注:这个文件就是配置资源管理系统yarn了,其中主要指定了一些节点资源管理器nodemanager,以及总资源管理器resourcemanager的配置。 可以看到这个配置中,跟mapreduce框架是相关的。
可见yarn首先是为了支持mapreduce这个模型,之后很多其他的框架都是基于mapreduce以及yarn的功能基础上开发出来的
<!--reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定yarn的resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
配置完毕,
六、将配置好的hadoop-2.6.1分发到hadoop2和hadoop3节点
1)scp -r hadoop-2.6.1 [email protected]:/home/hadoop/hadoop/
如果此处提示permission denied,则修改目标主机的文件夹的权限为777
2)分发完毕后,分别配置hadoop2节点和hadoop3节点的hadoop环境变量,跟hadoop1的配置一样
七、启动验证集群
1)启动集群
如果集群时第一次启动,需要格式化namenode
执行hdfs namenode -format(只需要格式化namenode)
出现这个标识,表示格式化成功
2)在主节点启动namenode
start-dfs.sh
使用jps查看进程
3)在hadoop2节点启动yarn(因为yarn和namenode不是安装在一个节点,所以需要单独启动)
start-yarn.sh
用jps查看进程
hadoop3进程:
在浏览器数据hadoop1:50070可看到管理页面
3.yarn管理界面:
4)关闭节点:
主节点Hadoop:stop-dfs.sh,不推荐使用start-all.sh,执行时会提示方法已过期
hadoop2节点:stop-yarn.sh
遇到的问题
1.管理页面没有活动的datanode
有可能,datanode的防火墙没关
临时关闭防火墙:service iptables stop
永久关闭防火墙:chkconfig iptables off
关闭防火墙后,果然出来了界面:
2.nodemanager did not stop gracefully after 5 seconds: killing with kill -9
这个没关系, 在hadoop 2.4.1里面启动jps的时候其实已经没有jobTrack和taskTrack这个两个服务了,换成了JobHistoryServer ,这个不需要去纠结。
3.每次执行hdfs dfs -ls的时候,都会提示这个warn:util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解决方案:
1)下载native包:http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.7.0.tar ,然后解压到hadoop的native目录下,覆盖原有文件
tar -xvf hadoop-native-64-2.7.0.tar -C native
2)修改hadoop-env.sh的配置文件,注释掉上面的,添加两行
,问题解决
4.每日启动hadoop或者yarn的时候都需要输入密码,时因为我们只是把公钥放到其它主机,并没有放到本地地私钥中,加入即可
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
5.设置外部主机访问虚拟机
虚拟机---》编辑---》虚拟网络编辑器----》NAT设置----》添加(下方有以管理员身份操作)
然后在外部浏览器访问虚拟机主机:
6.出现这个问题
原因是我修改了hadoop3节点的hadoop-env.sh 并source了资源,不过HADOOP_CONF_DIR路径没改成我自己的
把上面的注释,改成下面的即可
总结:
hadoop伪集群搭建的过程不是很复杂,主要在第五步配置好启动需要的配置,需要注意的是,我们在配置免密登录时除了其它主机,本主机也要配置,因为在启动namenode和resourcemanager的时候,hadoop需要访问本主机的权限,下一步准备搭建ha集群,用zookeeper做分布式协调,需要进一步地学习和理解hadoop运行的原理,特此记录