hadoop学习之hadoop2.8.0完全分布式集群安装
2017-10-30 07:53
525 查看
目录(?)[-]
全部软件下载百度云链接失效请评论告诉我密码1kcl
1准备工作
1软硬件环境
2集群网络环境
3注意
环境搭建
1操作系统安装
2本地环境配置
3操作系统设置
4SSH无密码验证配置
软件安装及环境配置
1Java安装及其环境配置
32Hadoop安装及其环境配置
33Slave服务器上的文件安装及配置
启动及验证
1启动
运行Hadoop
运行HDFS
格式化NameNode
启动NameNode
启动DataNode
运行YARN
2验证测试
所遇到的问题及解决方法
51关于 Warning HADOOP_HOME is deprecated
2SSH设置不成功
3Datanode连接不上
网上的资料很多都不是最新的,坑死宝宝了。踩过很多坑后宝宝挥泪写下详细过程。
本文主要讲解Hadoop完全分布式的搭建,使用vm建立三个相同配置的主机进行搭建。本文讲解所有详细步骤希望对大家有用。
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地址和主机名如下:
所有节点均是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用户免密登录即可。
2.环境搭建
2.1操作系统安装
对于Datanode类型的系统,可以先安装一个系统,然后利用VMWare的克隆功能,克隆多个相同的系统。如下图所示。
VMWare下安装CentOs系统的教程直接在网上找。特别注意的是:所有系统的网络选择为桥接模式,并且由于本机是在无线网络上进行上网的,故还要设置VMnet0的信息:在编辑->虚拟网络编辑器···如下图:
桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。
在”桥接到”那一栏里选择所用的网卡类型。
2.2本地环境配置
(1)网络配置
采用桥接来连接网络(适合有路由、交换机用户),配置静态IP来实现上网,局域网内通信。
下图是盗来的
vim /etc/sysconfig/network-scripts/ifcfg-eth0
本次操作的配置图如下所示:
(可以直接在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 Hadoop@Slave1.Hadoop:~/.ssh/
scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.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 机器上输入:
[plain] view
plain copy
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[plain] view
plain copy
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[plain] view
plain copy
2、然后将其复制到两个slave机器上:
在slave1上输入:scp root@Master.Hadoop:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub
cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys
在slave2上输入:
scp root@Master.Hadoop:~/.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”内容如下:
[plain] view
plain copy
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
(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
[plain] view
plain copy
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
(3)配置hadoop-env.sh,并确认生效
该”hadoop-env.sh”文件位于”/usr/hadoop/etc/hadoop”目录下。
在文件中修改下面内容:
[plain] view
plain copy
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)的地址和端口号。
[html] view
plain copy
<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文件
[html] view
plain copy
<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的配置文件。
[html] view
plain copy
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(8)配置yarn-site.xml文件
[html] view
plain copy
<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
在Master上装完JDK以及Hadoop以及配置好环境后,进行下步工作:
(1)将/usr/java文件夹复制到其他Slave
在Master中输入:
scp –r /usr/java root@Slave1.Hadoop :/usr/
scp –r /usr/java root@Slave2.Hadoop :/usr/
(2)将/etc/profile复制到其他Slave
在Master中输入:
scp /etc/profile root@Slave1.Hadoop :/etc/
scp /etc/profile root@Slave2.Hadoop :/etc/
(3)将/usr/hadoop文件夹复制到其他Slave
在Master中输入:
scp –r /usr/hadoop root@Slave1.Hadoop :/usr/
scp –r /usr/hadoop root@Slave2.Hadoop :/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的命令
[html] view
plain copy
hadoop namenode -format
hadoop-daemon.sh start namenode
hadoop-daemons.sh start datanode
yarn-daemon.sh start resourcemanager
yarn-daemons.sh start nodemanager
(5)一步一步启动(用于帮助理解,理解的可以不看)
[plain] view
plain copy
hadoop namenode -format
执行过程如下图:
最后的执行结果如下图:
[plain] view
plain copy
hadoop-daemon.sh start namenode
执行结果如下图:
最后在Master上执行ps -ef | grep hadoop,得到如下结果:
在Master上执行jps命令,得到如下结果:
说明NameNode启动成功。
[plain] view
plain copy
hadoop-daemons.sh start datanode
执行结果如下:
在Slave1上执行命令,如下图:
在Slave2上执行命令,如下图:
说明Slave1和Slave2上的DataNode运行正常。
以上启动NameNode和DataNode的方式,可以用start-dfs.sh脚本替代:
[plain] view
plain copy
yarn-daemon.sh start resourcemanager
批量启动多个NodeManager使用以下命令:
[plain] view
plain copy
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.所遇到的问题及解决方法
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的防火墙没有关掉。
全部软件下载百度云链接失效请评论告诉我密码1kcl
1准备工作
1软硬件环境
2集群网络环境
3注意
环境搭建
1操作系统安装
2本地环境配置
3操作系统设置
4SSH无密码验证配置
软件安装及环境配置
1Java安装及其环境配置
32Hadoop安装及其环境配置
33Slave服务器上的文件安装及配置
启动及验证
1启动
运行Hadoop
运行HDFS
格式化NameNode
启动NameNode
启动DataNode
运行YARN
2验证测试
所遇到的问题及解决方法
51关于 Warning HADOOP_HOME is deprecated
2SSH设置不成功
3Datanode连接不上
网上的资料很多都不是最新的,坑死宝宝了。踩过很多坑后宝宝挥泪写下详细过程。
本文主要讲解Hadoop完全分布式的搭建,使用vm建立三个相同配置的主机进行搭建。本文讲解所有详细步骤希望对大家有用。
全部软件下载百度云链接:失效请评论告诉我密码: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 |
如果不想用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 Hadoop@Slave1.Hadoop:~/.ssh/
scp ~/.ssh/authorized_keys Hadoop@Slave2.Hadoop:~/.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 机器上输入:
[plain] view
plain copy
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[plain] view
plain copy
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[plain] view
plain copy
2、然后将其复制到两个slave机器上:
在slave1上输入:scp root@Master.Hadoop:~/.ssh/id_dsa.pub ~/.ssh/master_dsa.pub
cat ~/.ssh/master_dsa.pub >> ~/.ssh/authorized_keys
在slave2上输入:
scp root@Master.Hadoop:~/.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”内容如下:
[plain] view
plain copy
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
[plain] view
plain copy
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
(3)配置hadoop-env.sh,并确认生效
该”hadoop-env.sh”文件位于”/usr/hadoop/etc/hadoop”目录下。
在文件中修改下面内容:
[plain] view
plain copy
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)的地址和端口号。
[html] view
plain copy
<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文件
[html] view
plain copy
<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的配置文件。
[html] view
plain copy
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(8)配置yarn-site.xml文件
[html] view
plain copy
<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 root@Slave1.Hadoop :/usr/
scp –r /usr/java root@Slave2.Hadoop :/usr/
(2)将/etc/profile复制到其他Slave
在Master中输入:
scp /etc/profile root@Slave1.Hadoop :/etc/
scp /etc/profile root@Slave2.Hadoop :/etc/
(3)将/usr/hadoop文件夹复制到其他Slave
在Master中输入:
scp –r /usr/hadoop root@Slave1.Hadoop :/usr/
scp –r /usr/hadoop root@Slave2.Hadoop :/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的命令
[html] view
plain copy
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
hadoop namenode -format
执行过程如下图:
最后的执行结果如下图:
启动NameNode
执行命令如下:[plain] view
plain copy
hadoop-daemon.sh start namenode
执行结果如下图:
最后在Master上执行ps -ef | grep hadoop,得到如下结果:
在Master上执行jps命令,得到如下结果:
说明NameNode启动成功。
启动DataNode
执行命令如下:[plain] view
plain copy
hadoop-daemons.sh start datanode
执行结果如下:
在Slave1上执行命令,如下图:
在Slave2上执行命令,如下图:
说明Slave1和Slave2上的DataNode运行正常。
以上启动NameNode和DataNode的方式,可以用start-dfs.sh脚本替代:
运行YARN
运行Yarn也有与运行HDFS类似的方式。启动ResourceManager使用以下命令:[plain] view
plain copy
yarn-daemon.sh start resourcemanager
批量启动多个NodeManager使用以下命令:
[plain] view
plain copy
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的防火墙没有关掉。
相关文章推荐
- hadoop学习之hadoop2.8.0完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之HDFS(2.2):centOS7安装高可用(HA)完全分布式集群hadoop2.7.2
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- adoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- (csdn内转载)hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- <转> hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装
- hadoop学习之hadoop完全分布式集群安装