一、准备工作

  • 同一个局域网中的三台linux虚拟机,我用的是redhat6.4,如果主机是windows操作系统,可以先安装vmware workstation, 然后在workstation中装上3台虚拟机,这样就形成了一个以物理机为DNS服务器的局域网,物理机和虚拟机都有一个局域网IP,互相之间可以通信。
  • 因为hadoop是一个java开发者写的开源软件,所以你懂得,肯定用的是java语言编写的,所以要装jdk,当然还有一些perl语言写的东西,所以也要装perl,因为是个集群,所以互相之间要连接通信,需要安装ssh
  • 如果用的是redhat,还需要关闭火墙,因为火墙会导致虚拟机之间无法连接,即关闭iptables,ip6tables,selinux,并设置开机不自启动
  • 本次试验搭建的环境为:

node1:192.168.141.130 matser/namenode

     node2:192.168.141.131 slave/datanode

    node3:192.168.141.132 slave/datanode

二、配置hosts

首先在所有节点上(node1,node2,node3)上面编辑:vi /etc/hosts,添加如下内容:

192.168.141.130   node1

192.168.141.131   node2

192.168.141.132   node3

这样,在设置相应的IP时就可以用其解析名称代替,如需要写192.168.141.130:9000时,就可以直接写node1:9000,不仅书写方便,而且可以加快解析IP的速度,使集群运行更加流畅,但是不配置该项也不会影响集群正常工作。

三、jdk安装

  • 去jdk官网http://www.oracle.com/technetwork/cn/java/javase/downloads/index-jsp-138363-zhs.html,根据自己操作系统32还是64位下载一个jdk,我下载的是jdk-8u11-linux-i586.gz
  • 解压jdk-8u11-linux-i586.gz:
     tar zxf jdk-8u11-linux-i586.gz

    然后会看到出现了一个目录:jdk1.8.0_11

  • 为了书写方便,去掉版本信息,并将之移动到/usr/local/目录下:
     mv  jdk1..0_11  jdk
    mv jdk /usr/local/
  • 修改环境变量:vi /etc/profile,在文件末尾添加信息,然后退出保存:

  • 执行source /etc/profile,使修改的文件生效
  • 然后执行java -version,如果能显示如下版本信息,则安装成功:

注意:有可能执行该命令时会报错,那是因为在64位系统上运行了32位的jdk, 这时候只需执行安装命令:yum install glibc.i686 -y即可 glibc.i686是一个32位运行库。

每台虚拟机都要装!

四、ssh无密码连接

  • 首先我们新添加一个用户专门用来管理运行hadoop,我新建了一个名为grid的用户,然后自己设定该用户密码

  • su - grid切换到grid用户
  • ssh-keygen生成公钥和私钥,一直回车默认就是了:

  • 执行如下命令,可以看到生成的key,然后将公钥复制成authorized_keys:

  • 然后在每一个节点上(虚拟机)执行上述所有步骤,这样就有了3个authorized_keys文件,我们把3个authorized_keys文件的内容复制到一起,形成一个authorized_keys,并用这个总的authorized_keys替换各个节点上原来的authorized_keys文件。
  • 验证一下是否成,就是在任一节点上,用ssh连接其他任何节点,如果不出现提示让你输密码,而是直接连上,则表示成功。

五、hadoop安装

终于到正菜了,呼呼!

  • hadoop.apache.org下载一个稳定的版本即可,这里以hadoop-1.2.1.tar.gz为例
  • 解压,去掉名字中的版本信息,移至/usr/local(具体移至什么地方可以自随意,就是自己别忘了就好)

  • cd /usr/local/hadoop/conf/ 转到hadoop配置目录下
  • vi hadoop-env.sh,添加如下信息,告诉hadoop jdk的安装路径,然后保存退出:

  • vi core-site.xml,写入如下信息,要注意,自己要在/home/grid/hadoop/ 目录下手动建立tmp目录,如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoop-dfs。而这个目录在每次重启后都会被删掉,必须重新执行format才行,否则会出错,hdfs后面的ip号就是名称节点的ip,即namenode的ip,端口号默认9000,不用改动。

  • vi hdfs-site.xml,设置数据备份数目,这里我们有有一个namenode,两个datanode,所以备份数目设置为2:

  • vi mapreduce-site.xml,设置map-reduce的作业跟踪器(job tracker)所在节点,这里我们同样将其放置在node1(192.168.141.130)上,端口号9001:

  • vi master,指定namenode所在节点,直接把节点名写进去:

  node1

  退出保存

  注意,倘若没有像配置过/etc/hosts,这里就要直接写IP:192.168.141.130

  • vi slave,指定datanode所在节点:

  node2

  node3

  退出保存

  同样注意,倘若没有像配置过/etc/hosts,这里就要直接写IP:

  192.168.141.131

  192.168.141.132

  • 配置完毕,拷贝配置好的hadoop目录到指定位置(可以自定义,但是最好统一一个自己好记住的位置):

  • 在node1上切换到grid, cd /home/grid/hadoop/,然后执行文件系统格式化:bin/hadoop namenode -format,如果没有任何warning,error,fatal等并且最后出现,format successfully字样,则格式化成。
  • 启动hadoop:

  • 检查是否启动成功,如果名称节点namenode(node1)有如下所示:

并且数据节点(node2,node3)有如下所示:

,则启动成功!

六、集群测试

  • 在node1上的,grid用户下,cd /home/grid/,建立一个目录mkdir input,然后进入目录input:cd input/,执行如下两条命令:

  echo "hello world" > test1.txt

  echo "hello hadoop" > test2.txt

  • 将上述input目录下的文件上传到dfs文件系统,cd /home/grid/hadoop/,作如下操作:

  • 查看是否上传成功:

  上传成功,表示文件系统可以正常工作!

  • 检查map-reduce功能是否正常,用hadoop包里面自带的单词统计jar包统计我们刚才上传的文件中不同单词的个数,看看是否正确:

  • 执行完毕后查看结果:

  可以看出统计单词数与我们上传的文件时一致的,说明map-reduce可以正常工作!

  • 至此,我们可以自信我们的hadoop已经完全部署好了!

七、总结

对于第一次玩hadoop的读者来说,在安装的过程中,必定会出现,这样或者那样的问题,但是,我们要抱着一个解决问题的心,学习过程本就是在错误中成长,我自己在安装过程中也出现了不少问题,如datanode无法启动。或者那么namenode无法启动等等一系列问题,千万不要烦躁而放弃,自己慢慢在网上查资料还是可以解决的,最重要是细心,要学会根据系统的报错,检查配置文件是否写错,初学者都不怎么会看日志,但是要迈出这一步,硬着头皮看,当通过看日志解决了某个bug时,那种进步的愉悦感是很爽的,最后希望大家都犯点错,一次就配置成功不一定是好事,最后热烈欢迎大家给我留言,我们一起交流,学习!

2014-08-15

hadoop学习笔记之一步一步部署hadoop分布式集群的更多相关文章

  1. hadoop学习第二天-了解HDFS的基本概念&&分布式集群的搭建&&HDFS基本命令的使用

    一.HDFS的相关基本概念 1.数据块 1.在HDFS中,文件诶切分成固定大小的数据块,默认大小为64MB(hadoop2.x以后是128M),也可以自己配置. 2.为何数据块如此大,因为数据传输时间 ...

  2. Hadoop学习笔记1 - 使用Java API访问远程hdfs集群

    转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...

  3. RocketMQ学习笔记(4)----RocketMQ搭建双Master集群

    前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...

  4. 三、Linux部署MinIO分布式集群

    MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...

  5. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...

  6. Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战

    Zookeeper完全分布式集群服务 准备好3台服务器: [x]A-> centos-helios:192.168.19.1 [x]B-> centos-hestia:192.168.19 ...

  7. docker swarm快速部署redis分布式集群

    环境准备 四台虚拟机 192.168.2.38(管理节点) 192.168.2.81(工作节点) 192.168.2.100(工作节点) 192.168.2.102(工作节点) 时间同步 每台机器都执 ...

  8. Hadoop入门学习笔记-第三天(Yarn高可用集群配置及计算案例)

    什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度系统Common: 以上三大组件 ...

  9. K8S学习笔记之二进制的方式创建一个Kubernetes集群

    0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...

  10. 大数据学习笔记03-HDFS-HDFS组件介绍及Java访问HDFS集群

    HDFS组件概述 NameNode 存储数据节点信息及元文件,即:分成了多少数据块,每一个数据块存储在哪一个DataNode中,每一个数据块备份到哪些DataNode中 这个集群有哪些DataNode ...

随机推荐

  1. 【刷题】UOJ #374 【ZJOI2018】历史

    九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有 \(n\) 个城市,这 \(n\) 个城市被恰好 \(n-1\) 条双向道路联通, ...

  2. [luogu3801]红色的幻想乡

    题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖.蕾米莉亚每次站在 ...

  3. 机器学习&深度学习资料收集

    缘由 以下博客都是我在学习过程中看到的一些知识讲解非常好的博文,就不转载了,直接给出链接方便以后重复访问.有了自己的理解之后再重新整理资料发布吧 : ) sklearn系列 http://www.cn ...

  4. LOJ 2664. 「NOI2013」向量内积 解题报告

    #2664. 「NOI2013」向量内积 两个 \(d\) 维向量 \(A=[a_1, a_2 ,...,a_d]\) 与 \(B=[b_1 ,b_2 ,...,b_d]\) 的内积为其相对应维度的权 ...

  5. shell(2)-&& 与 || 逻辑或与非

    test 命令测试 -常见的测试类型–测试文件状态–字符串比较–整数值比较–逻辑测试&& 如果是“前面”(真),则“后面”[ -f /var/run/dhcpd.pid ] & ...

  6. yiming

      关于双城 专家团队 总裁专栏 双城荣誉 诚聘英才 双城著作移民服务 移民专题 移民专刊 移民百科 成功案例 联系我们   澳大利亚 匈牙利 美国 加拿大 欧洲 瓦努阿图 双城集团 双城地产 君益诚 ...

  7. C# String类&Math类&DateTime类

    String类: String a = "abcdefghijklmnopqrstuvwxyz"; int length = a.length;  //获取字符串的长度: a = ...

  8. JavaScript窗体Window.ShowModalDialog使用详解

    Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等. 然而IE提供更多的方法支持对话框.如: s ...

  9. UML简单熟悉

    + :代表public - :代表private # :代表protected  实现,继承关系:implements,extends 关联关系:使一个类知道另一个类的属性和方法 每一个Driver类 ...

  10. checkbox用图片替换原始样式,并实现同样的功能

    1.结构: <div class="box1"> <input/> <div class="box2"> <img / ...