摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得。以便随后工做所需,作以知识整理,另则与博客园朋友分享实验成果,由于笔者在学习初期,也遇到很多问题。可是网上一些文档大多互相抄袭,里面错误百出。笔者结合自学书籍视频等资料,完成这一套配置资料。实验结果和过程通过反复测试无误后方整理出来的。配置过程当中,初学者如有实验环境,能够在真机环境下完成,若无条件,可补习下虚拟机与Linux操做系统的基础知识,以及里面对linux常规命令使用,建议读者边配置学学习。(本文原创/整理,转载请标注原文出处: Hadoop集群的配置(一) )html
白宁超java
2015年7月11日22:24:14node
【MySql集群搭建】 真机环境下MySQL-Cluster搭建文档linux
【Hadoop集群搭建1】Hadoop集群的配置web
【Hadoop集群搭建2】Hadoop集群的配置 shell
在虚拟机环境下,让同窗们学会从零开始配置Hadoop-2.2集群,并尝试在真实环境下搭建集群。数据库
物理机器总共4台,想配置基于物理机的Hadoop集群中包括4个节点: 1 个 Master, 3个 Salve ,节点之间局域网链接,能够相互 ping通。IP的分布如表1所示。apache
表1 4个节点的IP地址分配及角色windows
Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。api
用到的全部文件
安装完VMWare10后,解压CentOS到指定文件夹下,打开VMWare10,点击菜单栏“文件”-->“打开”,选择CentOS文件,如图。
右击CentOS选择属性,弹出设置窗口。里面是虚拟系统的主要硬件参数信息,读者能够根据本身机器性能配置,这里选默认。
VMWare提供了三种工做模式,它们是bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。要想在网络管理和维护中合理应用它们,就应该先了解一下这三种工做模式。主机上安装VMware Workstation或VMware Server的时候,默认会安装3块虚拟网卡,这3块虚拟网卡的名称分别为VMnet0、VMnet一、VMnet8,其中VMnet0的网络属性为“物 理网卡”,VMnet1与VMnet8的网络属性为“虚拟网卡”。在默认状况下,VMnet1虚拟网卡的定义是“仅主机虚拟网络”,VMnet8虚拟网卡的定义是“NAT网络”,同时,主机物理网卡被定义为“桥接网络”,主机物理网卡也能够称为VMnet0。
你们在安装完虚拟机后,默认安装了两个虚拟网卡,VMnet1和 VMnet8。其中VMnet1是hostonly网卡,用于host方式链接网络的。VMnet8是NAT网卡,用 于NAT方式链接网络的。它们的IP地址默认是的,若是要用虚拟机作实验的话,最好将VMnet1到VMnet8的IP地址改掉。习惯上把 VMware虚拟网卡使用的网段“固定”,即设置为静态ip。使用以下原则:VMnet1对应的网段是192.168.10.0,VMnet8对应的网段是 192.168.80.0。
1.bridged(桥接模式)
在这种模式下,VMWare虚拟出来的操做系统就像是局域网中的一台独立的主机,它能够访问网内任何一台机器。在桥接模式下,须要手工为虚拟系统配置IP地址、子网掩码,并且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通讯。同时,因为这个虚拟系统是局域网中的一个独立的主机系统,那么就能够手工配置它的TCP/IP配置信息,以实现经过局域网的网关或路由器访问互联网。使用桥接模式的虚拟系统和宿主机器的关系,就像链接在同一个Hub上的两台电脑。想让它们相互通信,你就须要为虚拟系统配置IP地址和子网掩码,不然就没法通讯。若是想利用VMWare在局域网内新建一个虚拟服务器,为局域网用户提供网络服务,就应该选择桥接模式。使用这种方式很简单,前提是要获得1个以上的地址。对于想进行种种网络实验的朋友不太适合,由于没法对虚拟机的网络进行控制,它直接就出去了。
使用桥接方式,A,A1,A2,B可互访。
2.host-only(仅主机模式)
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。在host-only模式中,全部的虚拟系统是能够相互通讯的,但虚拟系统和真实的网络是被隔离开的。提示:在host-only模式下,虚拟系统和宿主机器系统是能够相互通讯的,至关于这两台机器经过双绞线互连。在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),均可以由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配。若是想利用VMWare建立一个与网内其余机器相隔离的虚拟系统,进行某些特殊的网络调试工做,能够选择host-only模式。
使用Host方式,A,A1,A2能够互访,但A1,A2不能访问B,也不能被B访问。
3.NAT(网络地址转换模式)
使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,经过宿主机器所在的网络来访问公网。也就是说,使用NAT模式能够实如今虚拟系统中安全的访问互联网。NAT模式下虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,没法进行手工修改,所以虚拟系统也就没法和本局域网中的其余真实主机进行通信。采用NAT模式最大的优点是虚拟系统接入互联网很是简单,你不须要进行任何其余的配置,只须要宿主机器能访问互联网便可。若是想利用VMWare安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议采用NAT模式。提示:以上所提到的NAT模式下的VMnet8虚拟网络,host-only模式下的VMnet1虚拟网络,以及bridged模式下的VMnet0虚拟网络,都是由VMWare虚拟机自动配置而生成的,不须要用户自行设置。VMnet8和VMnet1提供DHCP服务,VMnet0虚拟网络则不提供。
使用NAT方式,A1,A2能够访问B,但B不能够访问A1,A2。但A,A1,A2能够互访。
全局网络拓扑图:
思考:真实部署要根据网络环境的不一样而配置不一样的链接方式,那么请思考,在6601机房搭建真实集群对应哪一种链接方式?
在学习VMWare虚拟网络时,咱们建议选择host-only方式。第一,若是你的电脑是笔记本,从A移到B网络环境发生变化后,只有host-only方式不受影响,其余方式必须从新设置虚拟交换机配置。第二,将真实环境和虚拟环境隔离开,保证了虚拟环境的安全。
按绿色箭头启动虚拟机,角色选择other,输入root角色名,这里的密码是hadoop,具体密码由CentOS安装时设置,而咱们使用的是安装好的。
因为选择的是host-only链接方式,VMnet1必须打开,而后设置ipv4。
因为host-only方式不能链接外网,因此DNS不需配置,其余方式想要访问外网必须配置。
在Linux桌面环境中右击电脑图标,选中“EditConnection”进行以下配置:
打开终端,查看配置状况。
检查与Windows主机的通讯状况。
1.Windows-->Linux
2.Linux-->Winodws
思考:访问外部主机失败,分析为何?
2.3 使用PieTTY链接Linux
填写链接目的的IP地址,端口是SSH模式的访问端口22,点击open,输入角色和密码登陆。
提示“潜在安全缺口”,因为首次使用PieTTy登录Linux[微软用户1] 虚拟机,PieTTY缓存里面并无该Linux虚拟机的rsa2公钥信息,所以会提示是否信任次机器,咱们选择是。
其余经常使用登陆工具还有putty,XShell等,PieTTY相比之下操做简单功能丰富。
使用root登录后,建立Hadoop用户,在hadoopGroup组里。
1.建立hadoopGroup组
添加用户时,能够将用户添加到现有的用户组,或者建立一个新的用户组。能够在/etc/group文件中看到全部的用户组信息。默认的用户组一般用来管理系统用户,不建议将普通用户添加到这些用户组。使用groupadd命令建立用户组的语法为:
groupadd [-g gid [-o]] [-r] [-f] groupname
每一个选项的含义以下:
若是不指定选项,系统将使用默认值。建立一个 hadoopGroup用户组:
$ groupadd hadoopGroup
2. 添加Hadoop用户
添加用户可使用useradd命令,语法为:
useradd -d homedir -g groupname -m -s shell -u userid accountname
每一个选项的含义以下:
指定用户主目录/home/hadoop用户组hadoopGroup。
用户被建立后,可使用passwd命令来设置密码,如:
$ passwd hadoop
Changing password for user hadoop.
New Linux password:******
Retype new UNIX password:******
passwd: all authentication tokens updated successfully.
在root用户下,执行命令rm -rf /usr/local/*
删除目录下全部内容(当前内容无用)使用winscp把jdk文件从windows复制到/usr/local目录下。点击新建一个会话。
输入用户和密码:
解压命令tar -zvxf jdk-7u67-linux-x64.tar.gz到当前目录。
更改文件名为jdk1.7。
一样,解压命令tar -zvxf jdk-7u67-linux-x64.tar.gz到当前目录,并经过命令
mv hadoop-2.2.0 /home/hadoop/hadoop2.2 移动到Hadoop用户的主目录下。
Hadoop程序存放目录为/home/hadoop/hadoop2.2,相关的数据目录,包括日志、存储等指定为/home/hadoop/hadoop2.2。将程序和数据目录分开,能够更加方便的进行配置的同步。
具体目录的准备与配置以下所示:
l 在每一个节点上建立程序存储目录/home/hadoop/hadoop2.2,用来存放Hadoop程序文件。
l 在每一个节点上建立数据存储目录/home/hadoop/hadoop2.2/hdfs,用来存放集群数据。
l 在主节点node上建立目录/home/hadoop/hadoop2.2/hdfs/name,用来存放文件系统元数据。
l 在每一个从节点上建立目录/home/hadoop/hadoop2.2/hdfs/data,用来存放真正的数据。
l 全部节点上的日志目录为/home/hadoop/hadoop2.2/logs。
l 全部节点上的临时目录为/home/hadoop/hadoop2.2/tmp。
执行命令mkdir -p /home/hadoop/hadoop2.2/hdfs,为尚未的目录建立,后面以此类推。
给hadoopGroup组赋予权限,凡是属于hadoopGroup组的用户都有权利使用hadoop2.2,方便多用户操做。首先,把Hadoop2.2加入到hadoopGroup组:
chgrp -R hadoopGroup hadoop2.2
给这个组赋予权限:
chmod -R g=rwx hadoop2.2
执行cd /etc命令后执行vi profile,在行末尾添加:
export JAVA_HOME=/usr/local/jdk1.7
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=.:$JAVA_HOME/bin:$PATH
执行source profile,使其配置当即生效。
执行java –version,查看是否安装成功。
同上面同样,修改profile。
export HADOOP_HOME=/home/hadoop/hadoop2.2
export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
export HADOOP_LOG_DIR=/home/hadoop/hadoop2.2/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
执行hadoop命令,查看有没有成功。
1.修改当前会话中的主机名,执行命令hostname node。
可是这种配置只对当前状态有效,一旦从新启动虚拟机,主机名未变。
2.修改配置文件中的主机名,执行命令vi /etc/sysconfig/network。
重启生效,因为第一步已经在当前会话中配置了hostname,因此不用重启。
3.绑定hostname与IP
执行vi/etc/hosts,增长内容以下:
192.168.10.100 node
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
Ping node,检验是否修改为功?
若是不关闭防火墙,有如下几种状况出现:
第一:hdfs的Web管理页面,打不开该节点的文件浏览页面。
第二:后台运行脚本(HIVE的),会出现莫名其妙的假死状态。
第三:在删除和增长节点的时候,会让数据迁移处理时间更长,甚至不能正常完成相关操做。
第四:无论你作任何操做,都是会运行不正常,并且很不顺手。
执行命令service iptables stop
验证: service iptables status
执行上面操做能够关闭防火墙,但重启后还会继续运行,因此还要关闭防火墙的自动运行。
执行命令 chkconfig iptables off
验证: chkconfig --list |grep iptables
Hadoop没有使用java.util.Properties管理配置文件,也没有使用Apache Jakarta Commons Configuration管理配置文件,而是使用了一套独有的配置文件管理系统,并提供本身的API,即便org.apache.hadoop.conf.Configuration处理配置信息,你们也能够经过eclipse工具分析下源码,并利用这些api修改配置文件。
因为Hadoop集群中每一个机器上面的配置基本相同,因此先在namenode上面进行配置部署,而后再复制到其余节点。
1. 配置 ~/hadoop2.2/etc/hadoop下的hadoop-env.sh、yarn-env.sh、mapred-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/local/jdk1.7/)
2. 配置 ~/hadoop2.2/etc/hadoop/slaves(这个文件里面保存全部slave节点)
3. 配置 ~/hadoop-2.2.0/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node:9000/</value> <description> 设定 namenode 的 主机名 及 端口 </description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp/hadoop-${user.name}</value> <description> 存放临时文件的目录 </description> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> </configuration>
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/core-default.xml
4. 配置 ~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.http-address</name> <value>node:50070</value> <description> NameNode 经过当前参数 得到 fsimage 和 edits </description> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node1:50090</value> <description> SecondNameNode 经过当前参数 得到最新的 fsimage </description> </property> <property> <name>dfs.replication</name> <value>3</value> <description> 设定 HDFS 存储文件的副本个数,默认为3 </description> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/hadoop/hadoop2.2/hdfs/name</value> <description> namenode 用来持续存放命名空间和交换日志的本地文件系统路径 </description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/hadoop/hadoop2.2/hdfs/data</value> <description> DataNode 在本地存放块文件的目录列表,用逗号分隔 </description> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value> <description> 设置 secondary 存放 临时镜像 的本地文件系统路径,若是这是一个用逗号分隔的文件列表,则镜像将会冗余复制到全部目录,只对 secondary 有效 </description> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.stream-buffer-size</name> <value>131072</value> <description> 默认是4KB,做为hadoop缓冲区,用于hadoop读hdfs的文件和写 hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于如今的硬件很保守,能够设置为128k (131072),甚至是1M(太大了map和reduce任务可能会内存溢出) </description> </property> <property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> <description> 两次 checkpoints 之间的间隔,单位为秒,只对 secondary 有效 </description> </property> </configuration>
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
5. 配置 ~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobtracker.address</name> <value>hdfs://trucy:9001</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>node:10020</value> <description> MapReduce JobHistory Server host:port, default port is 10020.</description> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node:19888</value> <description>MapReduce JobHistory Server Web UI host:port, default port is 19888.</description> </property> </configuration>
6. 配置 ~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>node</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> <property> <name>yarn.resourcemanager.address</name> <value>node:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>node:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>node:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>node:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>node:8088</value> </property> </configuration>
http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml
未完待续.......
尾注:本系列文档,笔者真机环境测试无误得以分享,纯属原创,如有转载,请注释出处.