摘要:之前安装过hadoop1.2.1集群,发现比较老了,后来安装cloudera(hadoop2.6.0),发现集成度比较高,想知道原生的hadoop什么样子,于是着手搭建一个伪分布式集群(三台),方便与cloudera的安装进行对比,来更加深入学习Hadoop整个生态系统。一开始安装的CentOS7,发现好多命令都变了,时间成本比较高,为了以后少些麻烦,还是果断换回CentOS6.5了,hadoop果断选择2.6.0了。太新的版本需要额外时间来了解,对于加班较多的来说,学习成本太高了。在安装过程,遇到了好多细节问题,真是“纸上得来终觉浅,绝知此事要躬行”!

在实际安装之前,先简单说下VMWare的网络模式:

■ VMNet1:使用的是host-only的链接模式,即虚拟机只能与主机构成内部通信,无法对外网进行访问

■ VMNet0:模式:使用桥接模式,安装VM后,在VM里建立虚拟机 默认 就是该模式。

      场景:如果你只是需要一台虚拟机可以和宿主互通,并可以访问外网,此模式即可。

      描述:安装虚拟机系统后不需要调整网络,物理网络中的 “路由” 所包含的DHCP服务器会自动识别该虚拟机并为其分配IP地址。如果没有路由,可以自己手动在系统分配,原则是和宿主机在同一网段并指向相同的网关即可通信。
■ VMNet8 模式:NAT网络模式

      场景:在宿主机安装多台虚拟机,和宿主组成一个小局域网,宿主机,虚拟机之间都可以互相通信,虚拟机也可访问外网。例如 搭建 hadoop 集群,分布式服务。

1.hadoop集群规划

192.168.10.11  hadoop1  namenode

192.168.10.12  hadoop2  datanode

192.168.10.13  hadoop3  datanode

2.安装三台CentOS虚拟机,配置网络模式为NAT

本人电脑HP笔记本8G内存,三台虚拟机内存都设为1G,启动时若提示“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”,进bios设置选项“处理器虚拟化技术”为enabled。

打开VMWare,文件->新建虚拟机,选择CentOS7系统,依次点击下一步完成添加虚拟机,三台虚拟机名称依次为:centos6.5_1,centos6.5_2,centos6.5_3.

安装完成后,打开VMWare,编辑->虚拟网络编辑器,修改VMnet8的子网IP为192.168.10.0

点击上图中的“NAT设置”,确认网关为192.168.10.2

回到windows,打开网络和共享中心->更改适配器设置->右键VMnet8->属性,确认IPv4为:192.168.10.1

选中虚拟机 -> 右键设置 -> 网络适配器 - 确认为NAT模式->确定    

测试虚拟机网络,使用ifconfig命令查看ip地址,看到如下:

配置ip地址:vi  /etc/sysconfig/network-scripts/ifcfg-eth0

注:ONBOOT="yes",这样在重启的时候会自动启动网卡;BOOTPROTO="dhcp"应改为none,否则设置的ip和看到的会不同;DNS1设置为VMnet8的网关,才可以通过主机访问外网;

重启网络服务:service network restart
三台虚拟机依次设置IP为192.168.10.11,192.168.10.12,192.168.10.13
至此虚拟机已可以访问外网,windows主机与虚拟机可以互相ping通,并都可以访问外网。原来虚拟机里的网络这么多设置的,学习了。虽然花了好长时间才整好网络,但还是很有满足感的,“绝知此事要躬行”啊!

3.修改三台节点主机名及与IP映射关系

修改主机名:
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop1

重启网络服务生效

修改主机名和IP的映射关系:
vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.10.11 hadoop1
192.168.10.12 hadoop2
192.168.10.13 hadoop3

注意:这里需要将每台机器的ip及主机名对应关系都写进去.

4.关闭防火墙

#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off

5.重启Linux

reboot

6.无秘钥认证

(1) ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
(2) cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
     把暴露出来的公共密钥按顺序导入authorized_keys中保存
(3) chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    注:ssh机制很严谨,对文件的权限要求非常严格,这里需要把.ssh文件夹的权限设置为700(只有所有者有读和写以及执行的权限),authorized_keys的权限设置为600(只有所有者有读和写的权限)
(4) ssh hadoop2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    ssh hadoop3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    scp authorized_keys hadoop@HDS02:/home/hadoop/.ssh/
    scp authorized_keys hadoop@HDS03:/home/hadoop/.ssh/
最终authorized_keys文件要有各个集群服务器的信息
注:前三步在三个节点都执行,第四步在主节点执行。公钥分发完成之后,最后随机选两台服务器,进行无密码登录验证是否异常。各个节点之间的无秘钥认证需要测试通过才能进行下一步

7.NTP时间同步

集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。具体思路如下:master节点作为ntp服务器,对所有datanode节点提供时间同步服务。所有datanode节点以master节点为基础同步时间
所有节点安装相关组件:yum install ntp。完成后,配置开机启动:chkconfig ntpd on,检查是否设置成功:chkconfig --list ntpd其中2-5为on状态就代表成功

7.1主节点配置

编辑NTP服务端配置文件ntp.conf,使用local时间作为ntp服务提供给ntp客户端:
# vi /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10

配置文件完成,保存退出,启动服务,执行如下命令:service ntpd start
检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功:
synchronised to NTP server (xxx.xxx.xxx.xxx) at stratum 4
time correct to within 75 ms
polling server every 1024 s
如果出现异常请等待几分钟,一般等待5-10分钟才能同步

7.2配置ntp客户端

编辑所有datenode节点的NTP服务端配置文件ntp.conf,配置server为主节点的主机名或IP:
# vi /etc/ntp.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool .
# 这里是主节点的主机名或IP
server xxx.xxx.xxx.xxx
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

ok保存退出,启动datanode节点的ntp服务,先手动同步一下主节点,通过ntpstat查询是否同步成功:
# service ntpd start
# ntpdate –u –hadoop1
# ntpstat

注:需要多等待一会儿才可以正常同步时间。

8.安装JDK(三台)

(1)卸载自带openjdk
使用rpm -qa | grep java查询java相关的包,使用rpm -e --nodeps包名卸载
(2)解压jdk包
tar -zxf jdk-7u75-linux-x64.tar.gz –C /opt
(3)环境变量配置
vi/etc/profile
##jdk
export JAVA_HOME=/opt/jdk1.7.0_75
export JRE_HOME=/opt/jdk1.7.0_75/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

#刷新配置
source /etc/profile
(4)JDK版本验证
java -version

#which java 检查java安装目录
#env|grep JAVA_HOME 检查是否配置JAVA_HOME
这里遇到一个小问题,我是在window用SecureCRT执行的source,在虚拟机看java版本提示没有,再次source可以看到了:这个文件一般是linux系统中存在,是在开机加载系统时或登录时执行的一个配置文件,其主要功能类似初始化一些环境变量。

9.安装hadoop(三台)

先上传hadoop的安装包到hadoop1上去/soft,使用 tar -zxf hadoop-2.6.0.tar.gz -C /opt解压. 注意:hadoop2.x的配置文件$HADOOP_HOME/etc/hadoop,这里即:/opt/hadoop-2.6.0/etc/hadoop
每台机器服务器都要配置,且都是一样的,配置完一台其他的只需要拷贝,每台机器上的core-site.xml和mapred-site.xml都是配master服务器的hostname.

9.1配置hadoop

第一个:hadoop-env.sh
vi hadoop-env.sh
export JAVA_HOME=/opt/jdk1.7.0_75

第二个:core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://hadoop1:9000</value>
</property>

<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
  <description>Size of read/write buffer used inSequenceFiles.</description>
</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoop-2.6.0/tmp</value>
</property>
注:hadoop访问文件的IO操作都需要通过代码库。因此,在很多情况下,io.file.buffer.size都被用来设置缓存的大小。不论是对硬盘或者是网络操作来讲,较大的缓存都可以提供更高的数据传输,但这也就意味着更大的内存消耗和延迟。这个参数要设置为系统页面大小的倍数,以byte为单位,默认值是4KB,一般情况下,可以设置为64KB(65536byte)。
注:hadoop.tmp.dir 是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果hdfs-site.xml中不配置namenode和datanode的存放位置,默认就放在这个路径中。

第三个:hdfs-site.xml
创建目录:
[root@hadoop1 hadoop-2.6.0]# mkdir -p dfs/name
[root@hadoop1 hadoop-2.6.0]# mkdir -p dfs/data
[root@hadoop1 hadoop-2.6.0]# mkdir -p dfs/namesecondary

修改配置文件
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop1:50090</value>
  <description>The secondary namenode http server address andport.</description>
</property>

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///opt/hadoop-2.6.0/dfs/name</value>
  <description>Path on the local filesystem where the NameNodestores the namespace and transactions logs persistently.</description>
</property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///opt/hadoop-2.6.0/dfs/data</value>
  <description>Comma separated list of paths on the local filesystemof a DataNode where it should store its blocks.</description>
</property>

<property>
  <name>dfs.namenode.checkpoint.dir</name>
  <value>file:///opt/hadoop-2.6.0/dfs/namesecondary</value>
  <description>Determines where on the local filesystem the DFSsecondary name node should store the temporary images to merge. If this is acomma-delimited list of directories then the image is replicated in all of thedirectories for redundancy.</description>
</property>

<!-- 指定HDFS副本的数量 -->
<property>
  <name>dfs.replication</name>
  <value>2</value>
</property>

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

注: 属性“dfs.namenode.name.dir”表示NameNode存储命名空间和操作日志相关的元数据信息的本地文件系统目录,该项默认本地路径为”/tmp/hadoop-{username}/dfs/name”;
      属性”dfs.datanode.data.dir“表示DataNode节点存储HDFS文件的本地文件系统目录,由”file://本地目录”组成,该项默认本地路径为”/tmp/hadoop-{username}/dfs/data”。
      属性“dfs.namenode.secondary.http-address”表示SecondNameNode主机及端口号(如果无需额外指定SecondNameNode角色,可以不进行此项配置);

第四个:mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<property>
  <name>mapreduce.jobhistory.address</name>
  <value>hadoop1:10020</value>
  <description>MapReduce JobHistoryServer IPC host:port</description>
</property>

<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>hadoop1:19888</value>
  <description>MapReduce JobHistoryServer Web UI host:port</description>
</property>
注:属性“mapreduce.framework.name”表示执行mapreduce任务所使用的运行框架,默认为local,需要将其改为”yarn”
注:Hadoop自带了一个历史服务器,可以查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,可以通过下面的命令来启动Hadoop历史服务器$ sbin/mr-jobhistory-daemon.sh start historyserver。这样我们就可以在相应机器的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况。
注:Hadoop2.x中没有jobtracker、tasktracker,改为现在的ResourceManager、NodeManger
第五个:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop1</value>
</property>
<!-- reducer获取数据的方式 中间数据调度使用的机制 -->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
注:yarn.nodemanager.aux-services,NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序。

[root@hadoop1 opt]# scp -r hadoop-2.6.0/ root@hadoop2:/opt/
[root@hadoop1 opt]# scp -r hadoop-2.6.0/ root@hadoop3:/opt/
注:这里将配置完的hadoop整个文件复制到hadoop2和hadoop3的时候,用的是cp -r,复制完成后发现hadoop2和hadoop3的文件大小比hadoop大1M,应该一样才对啊,一级一级目录找吧,肯定有不一样的。果然,native的大小不一样,这里有个软链接:当用cp命令copy一个软链接时,copy的是软链接所对应的内容,而不是它本身。要直接cp软链接就需要加-d参数。

9.2配置Slaves文件

只需要namenode节点机,这里的HDM01既做namenode也兼datanode,一般情况namenode要求独立机器,namenode不兼datanode
vi /opt/etc/hadoop/slaves,配置如下内容:
hadoop2
hadoop3

9.3将hadoop添加到环境变量

vim /etc/proflie
export HADOOP_HOME=/opt/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile

9.4格式化namenode

hdfs namenode -format
报警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
因为官方提供的lib目录中.so文件是在32位系统下编译的,如果是64位系统,需要自己下载源码在64位上重新编译。下载hadoop-native-64-2.6.0.tar解压替换native文件夹内容。
[root@hadoop1 soft]# tar -xvf hadoop-native-64-2.6.0.tar -C /opt/hadoop-2.6.0/lib/native/

9.5启动hadoop

sbin/start-all.sh

提示已过时,执行stop-all.sh停止。重新启动:
先启动HDFS:sbin/start-dfs.sh
再启动YARN: sbin/start-yarn.sh

9.6验证是否启动成功 使用jps命令验证


查看集群状态:
[root@hadoop1 bin]# hdfs dfsadmin -report

http://192.168.1.101:50070 (HDFS管理界面)

http://192.168.1.101:8088 (MR管理界面)

分布式集群搭建(hadoop2.6.0+CentOS6.5)的更多相关文章

  1. Hadoop分布式集群搭建hadoop2.6+Ubuntu16.04

    前段时间搭建Hadoop分布式集群,踩了不少坑,网上很多资料都写得不够详细,对于新手来说搭建起来会遇到很多问题.以下是自己根据搭建Hadoop分布式集群的经验希望给新手一些帮助.当然,建议先把HDFS ...

  2. Hadoop集群搭建-Hadoop2.8.0安装(三)

    一.准备安装介质 a).hadoop-2.8.0.tar b).jdk-7u71-linux-x64.tar 二.节点部署图 三.安装步骤 环境介绍: 主服务器ip:192.168.80.128(ma ...

  3. Hadoop上路-01_Hadoop2.3.0的分布式集群搭建

    一.配置虚拟机软件 下载地址:https://www.virtualbox.org/wiki/downloads 1.虚拟机软件设定 1)进入全集设定 2)常规设定 2.Linux安装配置 1)名称类 ...

  4. 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建

    一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...

  5. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)--------hadoop环境的搭建

    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)------https://blog.csdn.net/pucao_cug/article/details/71698903 ...

  6. Hadoop完全分布式集群搭建

    Hadoop的运行模式 Hadoop一般有三种运行模式,分别是: 单机模式(Standalone Mode),默认情况下,Hadoop即处于该模式,使用本地文件系统,而不是分布式文件系统.,用于开发和 ...

  7. hbase完整分布式集群搭建

    简介: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop2.8 ha 集群搭建 hbase完整分布式集群搭建 hadoop完整集群遇到问题汇总 Hb ...

  8. 大数据之Hadoop完全分布式集群搭建

    1.准备阶段 1.1.新建三台虚拟机 Hadoop完全分市式集群是典型的主从架构(master-slave),一般需要使用多台服务器来组建.我们准备3台服务器(关闭防火墙.静态IP.主机名称).如果没 ...

  9. HBase完全分布式集群搭建

    HBase完全分布式集群搭建 hbase和hadoop一样也分为单机版,伪分布式版和完全分布式集群版,此文介绍如何搭建完全分布式集群环境搭建.hbase依赖于hadoop环境,搭建habase之前首先 ...

随机推荐

  1. 图文:通过sql server 连接mysql

    1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/connector/odbc/ 2.安装好后,在管理工具- ...

  2. 算术表达式解析(第二版) C++11版

    //一个简单的计算器代码,主要用来练习C++11新标准的编程技术和stl应用 1 #include<iostream> #include<stack> #include< ...

  3. Superslide插件无效的问题

    用Superslide像往常那样导入JQ和SuperSlide后,首页焦点图不会变,就像SuperSlide失效了一样,为什么??? 排查了一圈最后发现是JS导入顺序的问题,必须先导入JQ,再导入Su ...

  4. VBA找不到progress bar的处理办法。

    Search your pc for MSCOMCTL.Ocx. If you find it then register it by clicking on Windows Start Button ...

  5. 解决使用osgModeling的Loft生成管子时的bug

    最近在使用osgModeling的Loft生成管子的时候, 发现这个类还是有点bug的. 具体的表现就是在某些情况下, 生成管子的某些节点会是扁的, 而且有时管子会莫名的变粗.   在网上各种求助无果 ...

  6. linux install StarDict

    1. sudo apt-get install stardict 2. Downloads from: http://abloz.com/huzheng/stardict-dic/zh_CN/ 3. ...

  7. C#对图片的操作

    1.根据图片路径返回字节 public static byte[] getImageByte(string imagePath) { FileStream files = new FileStream ...

  8. php 开启socket配置

    我在Windows命令行输入命令:C:\wamp\bin\php\php5.2.6\php.exe getXml.php以执行php文件. 出现错误:Fatal error: Call to unde ...

  9. python 获取网页图片

    re为正则表达式模组 re.findall在字符串中查找所有匹配的模式,返回一个list urllib2提供了使用简单的url工具 urllib2.urlopen发送url请求,返回一个文件流 imp ...

  10. 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了

    #京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...