Hadoop2.6.0 64位集群搭建

时间:2023-01-22 14:40:22

一、虚拟机配置:nat方式配置宿主机以及客户机

1:宿主机vmware nat service服务必须启动。
2:这个如果经过网络配置的折磨,应该能找到着两个网卡:vmnet1和vmnet8,这里讲的是vmnet8。
查看vmnet8的ip地址。 (我这里是:192.168.58.1, 机器不同可能都不相同)
打开vmware的菜单:编辑--> 虚拟机网络编辑器,查看VMnet8的nat设置,发现网关ip是: 192.168.58.2, 跟宿主机的在同一网段。
3:配置客户机linux的网络:
#cd /etc/sysconfig/network-scripts
列出很多文件,其中ifcfg-enoxxxxxxxxx文件,是网络配置主文件。
#vi ifcfg-eno16777736
在其中添加如下内容:
IPADDR=192.168.58.100
GATEWAY=192.168.58.2
NETMASK=255.255.255.0
DNS1=192.168.58.2
:wq保存退出,利用cat /etc/resolv.conf来查看dns是否生效。
4:重启网络
#service network restart 
5:宿主机与客户机相互ping对方,能ping通即是成功。
6:确保客户机已经开通sshd服务。

6:在宿主机安装远程telnet软件,填入客户机的ip地址,可在宿主机上连接上客户机,进行远程操作。

二、下面是详细的配置部分。

1、 确认win7下VMnet8虚拟网卡的ipv4配置。

Hadoop2.6.0 64位集群搭建

2、vmware workstation的虚拟网络编辑器。
我在此犯了一个错误,如下: 原先想自己在linux中手动配置静态ip地址,不想使用该软件的dhcp服务进行动态ip分配,因此禁止了该dhcp服务。 但在linux中配置好静态ip之后,发现无论如何都得不到ip地址。因此该dhcp服务必须要勾选。

确认一下用于nat模式的虚拟网卡vmnet8的dhcp服务给虚拟机分配的ip的范围。这个很重要,在虚拟机中配置ip时,请在此范围内进行ip选择。

Hadoop2.6.0 64位集群搭建

3、在linux虚拟机中设置静态ip,在上面的范围内选择。然后重启服务,利用ip add查看ip,成功。

三、开始在linux环境中安装jdk
1、源码包准备:
首先到官网下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,我下载jdk-7u45-linux-x64.tar.gz,下载到主目录

2、解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:
sudo mkdir /usr/local/java
然后将下载到压缩包拷贝到java文件夹中,命令行:
进入jdk源码包所在目录
cp jdk-7u45-linux-x64.tar.gz /usr/local/java
然后进入java目录,命令行:
cd /usr/local/java
解压压缩包,命令行:
sudo tar xvf jdk-7u45-linux-x64.tar.gz
然后可以把压缩包删除,命令行:
sudo rm jdk-7u45-linux-x64.tar.gz

3、设置jdk环境变量
这里采用全局设置方法,就是修改etc/profile,它是是所有用户的共用的环境变量
sudo gedit /etc/profile
打开之后在末尾添加
export JAVA_HOME=/usr/local/java/jdk1.7.0_45export JRE_HOME=/usr/local/java/jdk1.7.0_45/jreexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHexport PATH=$JAVA_HOME/bin: $PATH

请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存
source /etc/profile
使profile生效

4、检验是否安装成功
在终端
java -version
看看是否安装成功
成功则显示如下
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)

Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

四、克隆虚拟机

搭建hadoop集群需要linux虚拟机。以上已经建立了一个,接下来需要再建立2个虚拟机。 利用vmware的虚拟机克隆功能,连续克隆2个虚拟机。需要注意的是利用hostnamectl来修改主机名,再分别分配ip地址即可。

所有的工作完毕之后,所有的虚拟机能相互ping通,也能ping通宿主机。同时也能ping通公用网址。

接下来在三台linux虚拟机上配置ssh免密码登录(暂时不知道有什么用处)。
关于ssh免登录有如下解释:
在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为*控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如你也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet,但这都不在本文的讨论范畴,今天咱们要说的就是这种最原始、最有效、最直接的方式:免密码登录。
假设:现有3台机器
192.168.56.100 master
192.168.56.101 slave1
192.168.56.102 slave2
要使master无需密码通过ssh登入slave1和slave2。


以下开始配置。
1:编辑hosts文件,把所有主机ip及主机名对应加入。
vi /etc/hosts,用vi编辑hosts文件,如下:
192.168.56.100 master
192.168.56.101 slave1
192.168.56.102 slave2
2:在三台机器上都建立hadoop专用账户
# adduser hadoop
# passwd hadoop 
备注: centos7不允许空密码,我只好在x-window下设置为空密码。
3:在每台机上产生新的rsa公钥私钥文件,并统一拷贝到一个authorized_keys文件中
1) 使用hadoop登录hadoop01,在.ssh目录下输入命令:
ssh-keygen -t rsa
三次回车后,该目录下将会产生id_rsa,id_rsa.pub文件。其他主机也使用该方式产生密钥文件。
2) 使用hadoop登录hadoop01,输入命令:
cat id_rsa.pub >> authorized_keys
将id_rsa.pub公钥内容拷贝到authorized_keys文件中。
3) 登录其他主机,将其他主机的公钥文件内容都拷贝到master主机上的authorized_keys文件中,命令如下:
ssh-copy-id -i master #登录slave1,将公钥拷贝到master的authorized_keys中
ssh-copy-id -i master #登录slave2,将公钥拷贝到master的authorized_keys中
4: 授权authorized_keys文件
1) 登录hadoop01,在.ssh目录下输入命令:
chmod 600 authorized_keys
5:将授权文件分配到其他主机上
1) 登录master,将授权文件拷贝到slave1、slave2,命令如下:
scp /home/hadoop/.ssh/authorized_keys slave1:/home/hadoop/.ssh/ #拷贝到slave1上
scp /home/hadoop/.ssh/authorized_keys slave2:/home/hadoop/.ssh/ #拷贝到slave2上
2) 至此,免密码登录已经设定完成,注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
可在master上输入:

ssh slave1 或者ssh slave2来进行验证,配置正确的话,应该无需密码即可登录成功。

请注意,文中凡是涉及hadoop01字样的,指的是master服务器。

补充说明1-----linux虚拟机上配置ssh免密码登录
1)在每台机器上建立.ssh目录时,必须注意hadoop用户和hadoop用户组对其拥有700权限。我在后面的测试中发现,master不能进行无密码ssh登录入slave2,但slave1正常。 调查后发现,hadoop用户对slave2的/home/hadoop/.ssh目录的访问权限不是700,果断改之,改完后能正常免密码登录。

2)hadoop用户对authorized_keys文件的访问权限应该是600,这点也要注意。

补充说明2-----linux虚拟机上配置ssh免密码登录
1) 在正式配置ssh之前,先关闭防火墙
systemctl stop firewalld.service --关闭防火墙
systemctl disable firewalld.service --永久关闭
2) 在ssh配置完毕之后,测试无密码登录之前,先对ssh服务进行配置:
切换回root用户:[hadoop@master ~]$ su
编辑文件:[root@master hadoop]# vim /etc/ssh/sshd_config
确保下面的可用(去掉前面的#)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
:wq ##保存并退出

重启服务:[root@master hadoop]# service sshd restart

五、配置hadoop

下面进行hadoop配置,使用的是hadoop-2.6.0.tar.gz 的64位安装包。
1:hadoop-2.6.0.tar.gz拷贝到/opt目录下。
使用root用户登录系统,并解压:
[root@master opt]# tar xzvf hadoop-2.6.0.tar.gz 
2:改变解压后目录的所属用户及组属性:
改变用户及群组:[root@master opt]# chown -R hadoop:hadoop hadoop-2.6.0
注意:-R 参数表示 该目录下所有子目录和文件的权限一并改变。
3:设置环境变量:[root@master opt]# vim /etc/profile
在文件末尾添加如下
export HADOOP_HOME=/opt/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin
:wq ##保存退出
刷新配置:[root@master opt]# . /etc/profile 或者 [root@master opt]# source /etc/profile
验证:[root@master opt]# echo $HADOOP_HOME
/opt/hadoop-2.6.0
4:建立hadoop需要的各种目录
切换用户:[root@master etc]# su hadoop
进入如下文件夹并创建下列文件夹
[hadoop@master etc]$ cd /opt/hadoop-2.5.2
[hadoop@master hadoop-2.5.2]$ mkdir -p dfs/name
[hadoop@master hadoop-2.5.2]$ mkdir -p dfs/data
[hadoop@master hadoop-2.5.2]$ mkdir -p tmp
进入文件夹:[hadoop@master hadoop-2.5.2]$ cd etc/hadoop
配置slaves :[hadoop@master hadoop]$ vim slaves 

slave1
slave2
:wq ##保存并退出
5:修改hadoop-env.sh和yarn-env.sh
[hadoop@master hadoop]$ vim hadoop-env.sh 
export JAVA_HOME=/usr/java/jdk1.7.0_45
[hadoop@master hadoop]$ vim yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_45
6:修改core-site.xml
[hadoop@master hadoop]$ vim core-site.xml 
添加内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5.2/tmp</value>
</property>

</configuration>

7:修改hdfs-site.xml
[hadoop@master hadoop]$ vim hdfs-site.xml 
</configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop-2.5.2/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop-2.5.2/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

</configuration>


8:配置mapred-site.xml
[hadoop@master hadoop]$ cd /opt/hadoop-2.5.2
[hadoop@master hadoop-2.5.2]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[hadoop@master hadoop-2.5.2]$ vim etc/hadoop/mapred-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>


9:配置yarn-site.xml
[hadoop@master hadoop-2.5.2]$ vim etc/hadoop/yarn-site.xml
1)伪分布配置

<configuration> 
<property> 
<name>yarn.nodemanager.aux-services</name> 
<value>mapreduce_shuffle</value> 
</property> 
</configuration>
2)集群配置
<configuration> 
<property> 
<name>yarn.nodemanager.aux-services</name> 
<value>mapreduce_shuffle</value> 
</property> 
<property> 
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> 
<value>org.apache.hadoop.mapred.ShuffleHandler</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> 


10:配置另两台机器
1)按照上述方法配置另两台机器
2)关机,复制两台slave (注意,正确的做法应该是这样,我前面首先做了复制,导致后面每台机器都要这么配置,悲催!)

3)修改复制的两台虚拟机的ip,进行网络配置修改,请参看前面的描述,不再复述。

11:格式化master的namenode,启动并测试
以hadoop用户登录
[hadoop@master hadoop-2.6.0]$ hdfs namenode -format
启动:[hadoop@master hadoop-2.6.0]$ ./sbin/start-dfs.sh
启动:[hadoop@master hadoop-2.6.0]$ ./sbin/start-yarn.sh
在各个机器上用jps查看节点
查看master的jps
[hadoop@master hadoop-2.6.0]$ jps
12121 Jps
10715 NameNode
10928 SecondaryNameNode
11087 ResourceManager

查看slave的jps
[hadoop@slave1 logs]$ jps
8030 Jps
7122 DataNode
7254 NodeManager

查看各节点日志
查看master是否监听其他节点
[hadoop@master hadoop-2.6.0]$ netstat -an | grep 9000

浏览器查看
浏览器打开 :50070/,会看到hdfs管理页面
浏览器打开 :8088/,会看到hadoop进程管理页面
浏览器打开 :8088/cluster 查看cluster情况

12:验证(WordCount验证)
1.dfs上创建input目录
[hadoop@master hadoop-2.6.0]$ bin/hadoop fs -mkdir -p input

2.把hadoop目录下的README.txt拷贝到dfs新建的input里
[hadoop@master hadoop-2.6.0]$ bin/hadoop fs -copyFromLocal README.txt input

3.运行WordCount
[hadoop@master hadoop-2.6.0]$ bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar org.apache.hadoop.examples.WordCount input output

4.运行完毕后,查看单词统计结果
[hadoop@master hadoop-2.6.0]$ bin/hadoop fs -cat output/*

假如程序的输出路径为output,如果该文件夹已经存在,先删除
[hadoop@master hadoop-2.6.0]$ bin/hadoop dfs -rmr output

关闭hadoop 
[hadoop@master hadoop-2.6.0]$ ./sbin/stop-dfs.sh
[hadoop@master hadoop-2.6.0]$ ./sbin/stop-yarn.sh

以上为hadoop64位集群搭建的完整步骤,经过测试,完全OK。