Hadoop完全分布式搭建
---记于2015年11月6日星期五
准备工作
软硬件环境
- 主机操作系统:处理器:i5,主频:3.2G,内存:8G,Windows64
- 虚拟机软件:VMware Workstation 10
- 虚拟操作系统:CentOs-6.5 64位
- JDk:1.8.0_65 64位
- Hadoop:1.2.1
集群网络环境
集群包括3个节点,1个Namenode、2个Datanode,其中节点之间可以相互ping通。节点IP地址和主机名如下:
序号 |
IP地址 |
机器名 |
类型 |
用户名 |
1 |
192.168.1.127 |
Master.Hadoop |
Namenode |
Hadoop |
2 |
192.168.1.128 |
Slave1.Hadoop |
Datanode |
Hadoop |
3 |
192.168.1.129 |
Slave2.Hadoop |
Datanode |
Hadoop |
所有节点均是CentOS系统,防火墙均禁用,所有节点上均创建了一个Hadoop用户,用户主目录是/home/Hadoop。所有节点上均创建了一个目录/usr/hadoop,并且拥有者是hadoop用户。因为该目录用于安装hadoop,用户对其必须有rwx权限。(一般做法是root用户下在/usr下创建hadoop目录,并修改该目录拥有者为hadoop(chown –R Hadoop: /usr/hadoop),否则通过SSH往其他机器分发Hadoop文件会出现权限不足的提示。
注意
由于Hadoop要求所有机器上Hadoop的部署目录结构要求相同(因为在启动时按与主节点相同的目录启动其它任务节点),并且都有一个相同的用户名账户。参考各种文档上说的是所有机器都建立一个hadoop用户,使用这个账户来实现无密码认证。这里为了方便,分别在三台机器上都重新建立一个hadoop用户。
环境搭建
操作系统安装
对于Datanode类型的系统,可以先安装一个系统,然后利用VMWare的克隆功能,克隆多个相同的系统。如下图所示。
VMWare下安装CentOs系统的教程直接在网上找。特别注意的是:所有系统的网络选择为桥接模式,并且由于本机是在无线网络上进行上网的,故还要设置VMnet0的信息:在编辑->虚拟网络编辑器···如下图:
桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。
在"桥接到"那一栏里选择所用的网卡类型。
本地环境配置
- 网络配置
采用桥接来连接网络(适合有路由、交换机用户),配置静态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的地址。
- 配置hosts文件
"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。
在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。
所以在所有的机器上的"/etc/hosts"文件中都要添加如下内容:
192.168.1.127 Master.Hadoop
192.168.1.128 Slave1.Hadoop
192.168.1.129 Slave2.Hadoop
(同样,可以直接在Master机上设置好,然后通过scp命令将该文件传递给所有的Slave)
操作系统设置
在Hadoop安装过程中需要关闭防火墙和SElinux,否则会出现异常。
- 关闭防火墙
- service iptables status 查看防火墙状态,如下所示表示iptables已经开启:
- 关闭防火墙:chkconfig iptables off
- 关闭SElinux
- 使用getenforce命令查看是否关闭
- 修改/etc/selinux/config 文件
注意:修改后要重启系统,才能有效。
SSH无密码验证配置
准备工作:
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。
- 配置Master无密码登录所有Salve
- 在Master节点上执行以下命令:
ssh-keygen –t rsa –P ''
运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/home/用户名/.ssh"目录下。
查看"/home/用户名/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。
- 接着在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 命令测试一下,看是否能无密码登录自己。
- 将公钥发给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
- 测试
在Master下输入:
ssh Slave1.Hadoop
若不用密码则表示成功!
重点:设置好权限!!!
软件安装及环境配置
以下的软件安装先在Master上安装,全部安装完后,再通过复制到Slave中即可。
Java安装及其环境配置
所有的机器上都要安装JDK,并且版本要一样。现在就先在Master服务器安装,然后把安装好的文件传递给Slave即可。安装JDK以及配置环境变量,需要以"root"的身份进行。
- 首先用root身份登录"Master.Hadoop"后在"/usr"下创建"java"文件夹,再将"jdk-8u25-linux-x64. gz"复制到"/usr/java"文件夹中,然后解压即可。
tar -zxvf jdk-8u25-linux-x64. gz
查看"/usr/java"下面会发现多了一个名为"jdk1.8.0_65"文件夹,说明我们的JDK安装结束,删除安装包即可,进入下一个"配置环境变量"环节。
- 配置环境变量。编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容如下:
# set java environment
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
export JRE_HOME=/usr/java/ jdk1.8.0_65/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
如下图所示:
保存并退出,执行下面命令使其配置立即生效。
source /etc/profile 或 . /etc/profile
重点说明:PATH变量要先把$JAVA_HOME放在第一位置,这样新安装的JDK能作为第一选择,否则,系统还是以原来的JDK为选择。
- 验证
java –version
Hadoop安装及其环境配置
- 首先用root用户登录"Master.Hadoop"机器,将下载的"hadoop-1.2.1.tar.gz"复制到/usr目录下。然后进入"/usr"目录下,用下面命令把"hadoop-1.1.2.tar.gz"进行解压,并将其重命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-1.2.1.tar.gz"安装包。
cd /usr
tar –xzvf hadoop-1.2.1.tar.gz
mv hadoop-1.2.1 hadoop
chown –R hadoop:hadoop hadoop
rm -rf hadoop-1.2.1.tar.gz
- 把Hadoop的安装路径添加到"/etc/profile"中。
# set hadoop path
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH: $HADOOP_HOME/bin
- 配置hadoop-env.sh,并确认生效
该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下。
在文件中修改下面内容:
export JAVA_HOME=/usr/java/ jdk1.8.0_65/
(此处的JAVA_HOME跟之前Java中环境配置的一样)
source hadoop-env.sh
hadoop version
- 在/usr/hadoop目录下创建子目录
cd /usr/hadoop
mkdir tmp
mkdir hdfs
- 配置core-site.xml文件
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.127:9000</value>
</property>
</configuration>
- 配置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>
</configuration>
- 配置mapred-site.xml文件
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.127:9001</value>
</property>
</configuration>
- 配置masters文件
有两种方案:D
(1)第一种
修改localhost为Master.Hadoop
(2)第二种
去掉"localhost",加入Master机器的IP:192.168.1.127
为保险起见,启用第二种,因为万一忘记配置"/etc/hosts"局域网的DNS失效,这样就会出现意想不到的错误,但是一旦IP配对,网络畅通,就能通过IP找到相应主机。
vim /usr/hadoop/conf/masters
- 配置slaves文件(Master主机特有)
与配置masters文件类似:
vim /usr/hadoop/conf/slaves
Slave服务器上的文件安装及配置
在Master上装完JDK以及Hadoop以及配置好环境后,进行下步工作:
- 将/usr/java文件夹复制到其他Slave
在Master中输入:
scp –r /usr/java root@Slave1.Hadoop :/usr/
scp –r /usr/java root@Slave2.Hadoop :/usr/
- 将/etc/profile复制到其他Slave
在Master中输入:
scp /etc/profile root@Slave1.Hadoop :/etc/
scp /etc/profile root@Slave2.Hadoop :/etc/
- 将/usr/hadoop文件夹复制到其他Slave
在Master中输入:
scp –r /usr/hadoop root@Slave1.Hadoop :/usr/
scp –r /usr/hadoop root@Slave2.Hadoop :/usr/
- 改变权限
将/usr/java,/usr/hadoop的用户组改为Hadoop用户,设置权限为755
启动及验证
启动
- 格式化HDFS文件系统
在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)
hadoop namenode –format
- 启动hadoop
在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。使用下面命令启动。
start-all.sh
- 关闭hadoop
stop-all.sh
验证测试
- 用"jps"命令测试
在Master上用 java自带的小工具jps查看进程。
在Slave1上用 java自带的小工具jps查看进程。
注:上两幅图表示成功!
- 用"hadoop dfsadmin -report"查看集群状态
- 通过网页查看集群
访问JobTracker:http://192.168.1.127:50030
访问NameNode:http://192.168.1.127:50070
所遇到的问题及解决方法
关于 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
SSH设置不成功
很有可能是因为权限设置的不对!
Datanode连接不上
有可能是Master和Slave的防火墙没有关掉。
Hadoop完全分布式搭建的更多相关文章
- hadoop完全分布式搭建HA(高可用)
2018年03月25日 16:25:26 D调的Stanley 阅读数:2725 标签: hadoop HAssh免密登录hdfs HA配置hadoop完全分布式搭建zookeeper 配置 更多 个 ...
- 超详细解说Hadoop伪分布式搭建--实战验证【转】
超详细解说Hadoop伪分布式搭建 原文http://www.tuicool.com/articles/NBvMv2原原文 http://wojiaobaoshanyinong.iteye.com/b ...
- 3.hadoop完全分布式搭建
3.Hadoop完全分布式搭建 1.完全分布式搭建 配置 #cd /soft/hadoop/etc/ #mv hadoop local #cp -r local full #ln -s full ha ...
- Hadoop伪分布式搭建(一)
下面内容主要说明在Windows虚拟机上面,怎么搭建一个Hadoop伪分布式,并如何运行wordcount程序和网页查看HDFS文件系统. 1 相关软件下载和安装 APACH官网提供hadoop版本 ...
- Hadoop伪分布式搭建步骤
说明: 搭建环境是VMware10下用的是Linux CENTOS 32位,Hadoop:hadoop-2.4.1 JAVA :jdk7 32位:本文是本人在网络上收集的HADOOP系列视频所附带的 ...
- Hadoop 完全分布式搭建
搭建环境 https://www.cnblogs.com/YuanWeiBlogger/p/11456623.html 修改主机名------------------- 1./etc/hostname ...
- hadoop 伪分布式搭建
下载hadoop1.0.4版本,和jdk1.6版本或更高版本:1. 安装JDK,安装目录大家可以自定义,下面是我的安装目录: /usr/jdk1.6.0_22 配置环境变量: [root@hadoop ...
- Hadoop完全分布式搭建过程中遇到的问题小结
前一段时间,终于抽出了点时间,在自己本地机器上尝试搭建完全分布式Hadoop集群环境,也是借助网络上虾皮的Hadoop开发指南系列书籍一步步搭建起来的,在这里仅代表hadoop初学者向虾皮表示衷心的感 ...
- Hadoop完全分布式搭建流程
centos7 搭建完全分布式 Hadoop 环境 SSR 前言 本次教程是以先创建 四台虚拟机 为基础,再配置好一台虚拟机的情况下,直接复制文件到另外的虚拟机中(这样做大大简化了安装流程) 且本次 ...
- Hadoop伪分布式搭建CentOS
所需软件及版本: jdk-7u80-linux-x64.tar.gz hadoop-2.6.0.tar.gz 1.安装JDK Hadoop 在需在JDK下运行,注意JDK最好使用Oracle的否则可能 ...
随机推荐
- 基于webpack的Vue.js开发环境快速搭建
1. 安装node node下载地址 2. 安装淘宝 NPM npm 是node.js 的包管理工具. 镜像命令地址 #命令行: npm install -g cnpm 3. 安装vue # 全局安装 ...
- linux shell脚本编程笔记(四): 获取字符串长度的七种方法
获取字符串长度的七种方法 1. \${#str} 2.awk的length 备注:1) 最好用{}来放置变量2) 也可以用length($0)来统计文件中每行的长度 3.awk的NF 备注: -F为分 ...
- ubuntu14.04环境下利用docker搭建solrCloud集群
在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器 ...
- for 续7
----------siwuxie095 for 中的变量: FOR 变量参照的替换已被增强.您现在可以使用下列选项语法: ~I - 删除任何引号(" ...
- Error while trying to retrieve text for error ORA-12154
问题描述:vs中调试运行没有任何错误,但是发布到IIS中访问,就会报以上错误.IIS不会调试,所以一头雾水,不止错误在哪里. 分析:看到网上有人分析了Web.config模拟验证的问题恍然大悟: 原文 ...
- xshell上传下载文件(Windows、Linux)
经常有这样的需求,我们在Windows下载的软件包,如何上传到远程Linux主机上?还有如何从Linux主机下载软件包到Windows下:之前我的做法现在看来好笨好繁琐,不过也达到了目的,笨人有本方法 ...
- python 命令行工具 fire
简介 A library for automatically generating command line interfaces. Python Fire is a library for auto ...
- ZOJ3704 I am Nexus Master! 2017-04-06 23:36 56人阅读 评论(0) 收藏
I am Nexus Master! Time Limit: 2 Seconds Memory Limit: 65536 KB NexusHD.org is a popular PT (Pr ...
- mysql下的常见问题处理
1. ubuntu中启动mysql,提示mysql access denied for user root@localhost 错误. 是因为还没有给添加的root账户配置密码信息. (1)停止mys ...
- 【StatLearn】统计学习中knn算法的实验(1)
Problem: Develop a k-NN classifier with Euclidean distance and simple voting Perform 5-fold cross va ...