全部软件下载百度云链接:失效请评论告诉我密码:1kcl

1.准备工作 

1.1软硬件环境 

  • 主机操作系统:处理器:i5,主频:3.2G,内存:8G,Windows64   
  • 虚拟机软件:VMware Workstation 10   
  • 虚拟操作系统:CentOs-6.6 64位   
  • JDk:1.8.0_121 64位   
  • Hadoop:2.8.0  

1.2集群网络环境 

集群包括3个节点,1个Namenode、2个Datanode,其中节点之间可以相互ping通。节点IP地址和主机名如下: 


序号

IP地址

机器名

类型

用户名

1

192.168.6.67

Master.Hadoop

Namenode

Hadoop/root

2

192.168.6.68

Slave1.Hadoop

Datanode

Hadoop/root

3

192.168.6.70

Slave2.Hadoop

Datanode

Hadoop/root


所有节点均是CentOS系统,防火墙均禁用,所有节点上均创建了一个Hadoop用户,用户主目录是/home/Hadoop。所有节点上均创建了一个目录/usr/hadoop,并且拥有者是hadoop用户。因为该目录用于安装hadoop,用户对其必须有rwx权限。(一般做法是root用户下在/usr下创建hadoop目录,并修改该目录拥有者为hadoop(chown –R Hadoop: /usr/hadoop),否则通过SSH往其他机器分发Hadoop文件会出现权限不足的提示。 

如果不想用Hadoop用户,用root也可以。我刚开始用的是Hadoop,但对linux玩不转授权什么的没弄好,后期怒改root.博文大部分是之前写的,故只需要把ssh免密部分改成用root用户免密登录即可。

1.3注意 

由于Hadoop要求所有机器上Hadoop的部署目录结构要求相同(因为在启动时按与主节点相同的目录启动其它任务节点),并且都有一个相同的用户名账户。参考各种文档上说的是所有机器都建立一个hadoop用户,使用这个账户来实现无密码认证。这里为了方便,分别在三台机器上都重新建立一个hadoop用户。 

2.环境搭建 

2.1操作系统安装 

对于Datanode类型的系统,可以先安装一个系统,然后利用VMWare的克隆功能,克隆多个相同的系统。如下图所示。 


 


VMWare下安装CentOs系统的教程直接在网上找。特别注意的是:所有系统的网络选择为桥接模式,并且由于本机是在无线网络上进行上网的,故还要设置VMnet0的信息:在编辑->虚拟网络编辑器···如下图: 

桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。 

 

在”桥接到”那一栏里选择所用的网卡类型。 

2.2本地环境配置 

(1)网络配置 

采用桥接来连接网络(适合有路由、交换机用户),配置静态IP来实现上网,局域网内通信。 

下图是盗来的得意

vim /etc/sysconfig/network-scripts/ifcfg-eth0 


DEVICE=eth0 #描述网卡对应的设备别名 

BOOTPROTO=static #设置网卡获得ip地址的方式,为static 

HWADDR=”00:23:54:DE:01:69” 

ONBOOT=”yes” #系统启动时是否设置此网络接口,设置为yes 

TYPE=”Ethernet” 

USERCTL=no 

IPV6INIT=no 

PEERDNS=yes 

NETMASK=255.255.255.0 #网卡对应的网络掩码 

IPADDR=192.168.1.127 #只有网卡设置成static时,才需要此字段 

GATEWAY=192.168.1.1 #设置为路由器地址,一般都是这个 

DNS1=202.112.17.33 #设置为本网络对应的,或者8.8.8.8 #google域名服务器


本次操作的配置图如下所示: 


 


(可以直接在Master机上设置好,然后通过scp命令将该文件传递给所有的Slave,然后在Slave中修改相应的IPADDR即可,其它不变) 

注意:这里需要注意还要改一个东西,因为scp过去的硬件地址是一样的必须修改下: 

第一:修改vim /etc//etc/udev/rules.d/ 70-persistent-net.rules 

将其中的名为eth0的网卡删掉。同时将eth1的网卡名修改为eth0 

第二:修改vim /etc/sysconfig/network-scripts/ifcfg-eth0 

将HWADDR修改为刚刚看见的eth1的地址。 


(2)配置hosts文件 

“/etc/hosts”这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。 

在进行Hadoop集群配置中,需要在”/etc/hosts”文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。 

所以在所有的机器上的”/etc/hosts”文件中都要添加如下内容: 

192.168.6.67  Master.Hadoop 

192.168.6.68  Slave1.Hadoop 

192.168.6.70  Slave2.Hadoop 

 


(同样,可以直接在Master机上设置好,然后通过scp命令将该文件传递给所有的Slave) 

2.3操作系统设置 

在Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常。 

(1)关闭防火墙 
  • service iptables status 查看防火墙状态,如下所示表示iptables已经开启:   

 

  • 关闭防火墙:chkconfig iptables off 
关闭后是这样的:

(2)关闭SElinux 
  • 使用getenforce命令查看是否关闭   
  • 修改/etc/selinux/config 文件   

 


注意:修改后要重启系统,才能有效。 

2.4SSH无密码验证配置 

准备工作: 

1. 在三个虚拟机上设定Hadoop用户: 

adduser Hadoop #在root用户下 

passwd Hadoop #输入两次密码 

2. 在Hadoop用户下建立.ssh文件夹 

mkdir ~/.ssh 

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。 

SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下: 

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。 

(2)用户使用这个公钥,将登录密码加密后,发送回来。 

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。 


注意:如果你的Linux没有安装SSH,请首先安装SSH。 


3.配置Master无密码登录所有Salve 


(1)在Master节点上执行以下命令: 

ssh-keygen –t rsa –P ” 


 


运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在”/home/用户名/.ssh”目录下。 


查看“/home/用户名/”下是否有“.ssh”文件夹,且“.ssh”文件下是否有两个刚生产的无密码密钥对。 


(2)接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。 

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 


 


查看”.ssh”文件夹: 

 


查看下authorized_keys的权限。(很重要!) 

如果权限不对则利用如下命令设置该文件的权限: 


chmod 700 ~/.ssh #注意:这两条权限设置特别重要,决定成败。 

chmod 600 ~/.ssh/authorized_keys 


在Master机器上输入:ssh localhost 命令测试一下,看是否能无密码登录自己。 


(3)将公钥发给Slave 

在Master中将公钥id_rsa.pub通过scp命令发到每一个Slave的同一个地方(即/home/Hadoop/.ssh文件夹下),并且设置权限(非常重要) 

scp ~/.ssh/authorized_keys [email protected]:~/.ssh/ 

scp ~/.ssh/authorized_keys [email protected]:~/.ssh/ 


在Slave中设置权限(root用户下设置): 

chown –R Hadoop:Hadoop /home/Hadoop/.ssh 

chmod –R 700 /home/Hadoop/.ssh 

chmod 600 /home/Hadoop/.ssh/authorized_keys 

(4)测试 

在Master下输入: 

ssh Slave1.Hadoop 

若不用密码则表示成功! 


重点:设置好权限!!! 


如果你用的是root用户则请忽略准备工作到此步的所有,你的免密设置从这里开始:

1、在Master 机器上输入:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

2、然后将其复制到两个slave机器上:


在slave1上输入:scp [email protected]:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub

        cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys


在slave2上输入:

scp [email protected]:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub

        cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys

3、测试 


在Master下输入: 

ssh Slave1.Hadoop 

若不用密码则表示成功! 


3.软件安装及环境配置 

以下的软件安装先在Master上安装,全部安装完后,再通过复制到Slave中即可。 

3.1Java安装及其环境配置 

所有的机器上都要安装JDK,并且版本要一样。现在就先在Master服务器安装,然后把安装好的文件传递给Slave即可。安装JDK以及配置环境变量,需要以”root”的身份进行。 

(1)首先用root身份登录”Master.Hadoop”后在”/usr”下创建”java”文件夹,再将”jjdk-8u121-linux-x64.tar.gz”复制到”/usr/java”文件夹中,然后解压即可。 

tar -zxvf jdk-8u121-linux-x64.tar.gz


查看”/usr/Java”下面会发现多了一个名为”jdk1.8.0_121”文件夹,说明我们的JDK安装结束,删除安装包即可,进入下一个”配置环境变量”环节。 

(2)配置环境变量。编辑”/etc/profile”文件,在后面添加Java的”JAVA_HOME”、”CLASSPATH”以及”PATH”内容如下: 



export JAVA_HOME=/usr/java/jdk1.8.0_121 
export JRE_HOME=/usr/java/jdk1.8.0_121/jre 
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 
export PATH=$JAVA_HOME/bin:$PATH




如下图所示: 


保存并退出,执行下面命令使其配置立即生效。 

source /etc/profile

重点说明:PATH变量要先把$JAVA_HOME放在第一位置,这样新安装的JDK能作为第一选择,否则,系统还是以原来的JDK为选择。 

(3)验证 

java –version  


3.2Hadoop安装及其环境配置 

(1)首先用root用户登录”Master.Hadoop”机器,将下载的”hadoop-2.8.0.tar.gz”复制到/usr目录下。然后进入”/usr”目录下,用下面命令把”hadoop-2.8.0.tar.gz”进行解压,并将其重命名为”hadoop”,把该文件夹的读权限分配给普通用户hadoop,然后删除”hadoop-2.8.0.tar.gz”安装包。 

cd /usr 

tar –xzvf hadoop-2.8.0.tar.gz 

mv hadoop-2.8.0.tar.gz  hadoop 

chown –R hadoop:hadoop hadoop 

rm -rf hadoop-2.8.0.tar.gz


(2)把Hadoop的安装路径添加到”/etc/profile”中。 

# set hadoop path 


export HADOOP_HOME=/usr/hadoop 
export PATH=$PATH:$HADOOP_HOME/bin




(3)配置hadoop-env.sh,并确认生效 

该”hadoop-env.sh”文件位于”/usr/hadoop/etc/hadoop”目录下。 

在文件中修改下面内容: 


export JAVA_HOME=/usr/java/jdk1.8.0_121


(此处的JAVA_HOME跟之前Java中环境配置的一样) 


source hadoop-env.sh 

hadoop version  


(4)在/usr/hadoop目录下创建子目录 

cd /usr/hadoop 

mkdir tmp 

mkdir hdfs 

cd hdfs

mkdir name

mkdir tmp

mkdir data


(5)配置core-site.xml文件 在 /usr/hadoop/etc/hadoop ”目录下。

修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。 


<configuration> 
 
<property>  
	<name>hadoop.tmp.dir</name>  
	<value>/usr/hadoop/tmp</value>  
	<final>true</final> 
<!--(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹) --> 
	<description>A base for other temporary directories.</description>  
</property>  
<property>  
	<name>fs.default.name</name>  
	<value>hdfs://192.168.6.67:9000</value> 
<!-- hdfs://Master.Hadoop:22--> 
        <final>true</final>  
</property>  
<property>   
	 <name>io.file.buffer.size</name>   
	 <value>131072</value>   
</property> 
</configuration>


(6)配置hdfs-site.xml文件 


<configuration> 
	<property>  
		<name>dfs.replication</name>  
		<value>2</value>  
	</property>  
	<property>  
		<name>dfs.name.dir</name>  
		<value>/usr/local/hadoop/hdfs/name</value>  
	</property>  
	<property>  
		<name>dfs.data.dir</name>  
		<value>/usr/local/hadoop/hdfs/data</value>  
	</property>  
	<property>   
		 <name>dfs.namenode.secondary.http-address</name>   
		 <value>master.hadoop:9001</value>   
	</property>   
	<property>   
		 <name>dfs.webhdfs.enabled</name>   
		 <value>true</value>   
	</property>   
	<property>   
		 <name>dfs.permissions</name>   
		 <value>false</value>   
	</property>   
</configuration>




(7)配置mapred-site.xml文件 

修改Hadoop中MapReduce的配置文件。 


<configuration> 
	<property>   
		  <name>mapreduce.framework.name</name>   
		  <value>yarn</value>   
	</property>    
</configuration>


(8)配置yarn-site.xml文件 

<configuration> 
 
<!-- Site specific YARN configuration properties --> 
<property>   
  <name>yarn.resourcemanager.address</name>   
  <value>Master.Hadoop:18040</value>   
</property>   
<property>   
  <name>yarn.resourcemanager.scheduler.address</name>   
  <value>Master.Hadoop:18030</value>   
</property>   
<property>   
  <name>yarn.resourcemanager.webapp.address</name>   
  <value>Master.Hadoop:18088</value>   
</property>   
<property>   
  <name>yarn.resourcemanager.resource-tracker.address</name>   
  <value>Master.Hadoop:18025</value>   
</property>   
<property>   
  <name>yarn.resourcemanager.admin.address</name>   
  <value>Master.Hadoop:18141</value>   
</property>   
<property>   
  <name>yarn.nodemanager.aux-services</name>   
  <value>mapreduce_shuffle</value>   
</property>   
<property>   
  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>   
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>   
</property>   
</configuration>




(8)配置masters文件 

有两种方案: 


(1)第一种 

修改localhost为Master.Hadoop 

(2)第二种 

去掉”localhost”,加入Master机器的IP:192.168.6.67

为保险起见,启用第二种,因为万一忘记配置”/etc/hosts”局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。 

vim /usr/hadoop/etc/hadoop/masters  


(9)配置slaves文件(Master主机特有) 

与配置masters文件类似: (没有就把masters复制一个改个名)

vim /usr/hadoop/etc/hadoop/slaves 

 

3.3Slave服务器上的文件安装及配置 

在Master上装完JDK以及Hadoop以及配置好环境后,进行下步工作: 

(1)将/usr/java文件夹复制到其他Slave 


在Master中输入: 

scp –r /usr/java [email protected] :/usr/ 

scp –r /usr/java [email protected] :/usr/ 


(2)将/etc/profile复制到其他Slave 


在Master中输入: 

scp /etc/profile [email protected] :/etc/ 

scp /etc/profile [email protected] :/etc/ 


(3)将/usr/hadoop文件夹复制到其他Slave 


在Master中输入: 

scp –r /usr/hadoop [email protected] :/usr/ 

scp –r /usr/hadoop [email protected] :/usr/ 


(4)改变权限 

将/usr/java,/usr/hadoop的用户组改为Hadoop用户,设置权限为755。

至此环境搭建完毕

4.启动及验证 

4.1启动 

(1)格式化HDFS文件系统 启动文件都存于# /usr/hadoop/sbin

在”Master.Hadoop”上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh) 

hadoop namenode –format 


(2)启动hadoop 

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。使用下面命令启动。 在/usr/hadoop/sbin

start-all.sh //此命令会启动集群所有节点


(3)关闭hadoop 

stop-all.sh //此命令会启动集群所有节点

(4)还有一些启动单个节点,单个namenode,datanode,ResourceManager ,nodemanager的命令

hadoop namenode -format  
hadoop-daemon.sh start namenode   
hadoop-daemons.sh start datanode   
yarn-daemon.sh start resourcemanager   
yarn-daemons.sh start nodemanager


(5)一步一步启动(用于帮助理解,理解的可以不看)


运行Hadoop

运行HDFS

格式化NameNode

执行命令:


[plain] view plain copy
 在CODE上查看代码片派生到我的代码片  
  1. hadoop namenode -format  

执行过程如下图:



最后的执行结果如下图:



启动NameNode

执行命令如下:
[plain] view plain copy
 在CODE上查看代码片派生到我的代码片  
  1. hadoop-daemon.sh start namenode  

执行结果如下图:



最后在Master上执行ps -ef | grep hadoop,得到如下结果:


在Master上执行jps命令,得到如下结果:
 
 


说明NameNode启动成功。

启动DataNode


执行命令如下:


[plain] view plain copy
 在CODE上查看代码片派生到我的代码片  
  1. hadoop-daemons.sh start datanode  

执行结果如下:



在Slave1上执行命令,如下图:


在Slave2上执行命令,如下图:


说明Slave1和Slave2上的DataNode运行正常。

以上启动NameNode和DataNode的方式,可以用start-dfs.sh脚本替代:


运行YARN

运行Yarn也有与运行HDFS类似的方式。启动ResourceManager使用以下命令:


[plain]    view plain    copy  
    在CODE上查看代码片   派生到我的代码片  
  1. yarn-daemon.sh start resourcemanager  

批量启动多个NodeManager使用以下命令:



[plain]    view plain    copy  
    在CODE上查看代码片   派生到我的代码片  
  1. yarn-daemons.sh start nodemanager  

以上方式我们就不赘述了,来看看使用start-yarn.sh的简洁的启动方式:




在Master上执行jps:


说明ResourceManager运行正常。

在两台Slave上执行jps,也会看到NodeManager运行正常,如下图:

4.2验证测试 

(1)用”jps”命令测试 

在Master上用 java自带的小工具jps查看进程。 

 


在Slave1上用 java自带的小工具jps查看进程。 

 

注:上两幅图表示成功! 


(2)用”hadoop dfsadmin -report”查看集群状态 

 


(3)通过网页查看集群 

访问sourceManager :http://192.168.6.67:50070


5.所遇到的问题及解决方法 

5.1关于 Warning: $HADOOP_HOME is deprecated. 

hadoop安装完之后敲入hadoop命令时,老是提示这个警告: 

Warning: $HADOOP_HOME is deprecated. 

解决方案一:编辑”/etc/profile”文件,去掉HADOOP_HOME的变量设定,重新输入hadoop fs命令,警告消失。 

解决方案二:编辑”/etc/profile”文件,添加一个环境变量,之后警告消失: 

export HADOOP_HOME_WARN_SUPPRESS=1 

5.2SSH设置不成功 

很有可能是因为权限设置的不对! 

5.3Datanode连接不上 

有可能是Master和Slave的防火墙没有关掉。


发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

hadoop2.6.0分布式集群搭建(详细),搭建es-hadoop详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。