前言

  好几天没有更新了,本来是应该先写HDFS的相关内容,但是考虑到HDFS是我们后面所有学习的基础,而我只是简单的了解了一下而已,后面准备好好整理HDFS再写这块。所以大家在阅读这篇文章之前,请先了解HDFS的相关基本概念。

本次搭建是手动在三台机器上搭建的,后续会尝试用docker或者apache  ambari来搭建管理集群,这次搭建只是能够通过动手去更深的了解hadoop结构。

准备工作

  • 物理硬件准备,三台centos7.3机器(建议大家在阿里云或者aws购买),自己玩的话 低配就行了。同时修改三台机器的/etc/hosts文件:添加   ip1  master         ip2  slave1  ip3  slave2,其中ip可以直接填机器的内网ip(这块很重要,后面我们所有的xml配置中都是用master/slave这种代替ip)
  • 创建一个单独的用户,专门用来管理hadoop相关组件,并且拥有sudo权限,如果不熟悉linux相关命令,请自行google解决。相关命令:useradd  visudo 等
  • 安装jdk,这块也可以自行google,注意在/etc/profile中配置JAVA_HOME环境变量,同时记得source一下
  • 下载hadoop文件,我用的是2.8.1版本的,大家可以直接在官网上下载
  • ssh免密码登录连接,这块我稍微具体讲一下。

配置ssh免密码登录连接

  • 这块是为了让集群中机器能够互相ssh连接而不需要通过密码验证
  • 在master机器执行:ssh -keygen -t rsa  -f ~/.ssh/id_rsa(在~/.ssh目录下会看到相关的id_rsa  id_rsa.pub文件 )
  • cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • 最后在id_rsa  authorized_keys文件复制到另外两台机器上面,这样这三台机器就可以相互连接了。由于centos ssh第一次的时候,会跟你确认机器信息,需要输入yes,所以这个时候可以在每台机器互连一下,避免之后启动hadoop相关脚本的时候需要输入yes。
  • 针对集群中机器需要同步id_rsa  hosts等文件,所以大家可以考虑部署一个NFS,这块就不具体介绍了。

Hadoop配置以及启动

  集群的配置以及启动步骤,大家可以直接参考官网和我这篇文章,官网将每个配置文件的作用以及属性介绍的非常清楚 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

相关文件介绍

hadoop目录介绍

  tar xvf xxxx.tar.gz后,sudo chown -R hadoop:hadoop hadoop-2.8.1    cd hadoop-2.8.1

  请主要注意一下三个目录:  ./etc/hadoop   ./bin  ./sbin

  其实./etc/hadoop主要是hadoop的配置文件,后面提到的相关配置文件位置都在该目录下

  ./bin目录下主要是hadoop hive命令,比如之前MapReduce在伪分布式的时候,我们提交mrJob的时候用的./bin/hadoop  jar xxxxx   ,复制文件到HDFS 用的./bin/hdfs dfs -put等。

  ./sbin目录下都是hadoop相关组件的启动或者停止脚本,大家可以看一下start-all.sh   脚本,顺着这个看 就可以大致了解hdfs  yarn等启动过程。

配置hadoop-env.sh和hadoop环境变量

  修改hadoop-env.sh中export JAVA_HOME=${JAVA_HOME} ,把该占位符用真实位置替代,比如我的:export JAVA_HOME=/usr/java/latest,其他一些关于JAVA_OPTS的相关最大内存限制等配置 可以根据自己的实际情况调整。

  在/etc/profile中添加hadoop相关环境变量:export HADOOP_HOME=/data/opt/hadoop-2.8.1  按照自己安装的目录填写

core-site.xml

  Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置,相关属性 参考官网 ,我配置了下面的几个属性值

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/data/opt/hadoop-2.8.1/tmp</value>
</property>
</configuration>

hdfs-site.xml

  Hadoop守护进程的配置项,包括namenode,secondaryNameNode和datanode,其中类似dfs.namenode.name.dir这种配置项,可以配置多个目录用comma隔开,这样就可以用来备份。

<configuration>
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>master:50090</value>
</property>
<property>
  <name>dfs.replication</name>
<value>2</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/data/opt/hadoop-2.8.1/hdfs/name/,file:/data/opt/hadoop-2.8.1/hdfs/name/bak</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/opt/hadoop-2.8.1/hdfs/data/,file:/data/opt/hadoop-2.8.1/hdfs/data/bak</value>
</property>
</configuration>

yarn-site.xml

  yarn平台的基础配置,主要是配置ResourceManager和NodeManager,我这里面主要配置了一些端口号

<configuration>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.resourcemanager.address</name>
  <value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>master:8031</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>master:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>master:8088</value>
</property>
</configuration>

mapred-site.xml

  这里面主要配置map/reduce  task的相关资源最大限制配置,后续应该在调整集群性能的时候会用得上,目前都直接使用default ,还有mr历史任务的相关端口配置

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

 

其他:etc/hadoop/slaves  etc/hadoop/log4j.properties

  slaves文件中直接配置你的slave机器,比如我的就直接是slave1   slave2

  log4j 是日志配置,这块搞java的都很熟悉的,就不细讲了

启动过程

复制文件到其他slave机器

scp -r hadoop hadoop@slave1:/data/opt/hadoop-2.8.1/etc

scp -r hadoop hadoop@slave2:/data/opt/hadoop-2.8.1/etc

启动脚本

  1. 格式化节点:./sbin/hdfs namenode -format
  2. 启动脚本:./sbin/start-all.sh    启动hdfs  yarn
  3. 启动mrhistory server,用来查看历史job: ./sbin/mr-jobhistory-daemon.sh   start historyserver

查看启动效果:

在master节点输入 jps命令,将会显示以下进程:(忽略RunJar两个进程,这两个是跟hive相关的)

8353 RunJar
6658 NameNode
11587 RunJar
6867 SecondaryNameNode
6030 ResourceManager
24959 Jps

在slave1、slave2上输入jps命名,将会显示以下进程:

19140 Jps
29020 NodeManager
28894 DataNode

相关端口(注意设置访问白名单,别让人扫端口 把你数据删了):

http://master:50070  #整个集群

http://master:50090  #SecondaryNameNode的情况

http://master:8088   #resourcemanager的情况

http://master:19888  #historyserver(MapReduce历史运行情况)

  

Hadoop入门第四篇:手动搭建自己的hadoop小集群的更多相关文章

  1. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  2. Hadoop入门第五篇:Hive简介以及部署

    标签(空格分隔): Hadoop Hive hwi 1.Hive简介   之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...

  3. # hadoop入门第六篇:Hive实例

    前言   前面已经讲了如何部署在hadoop集群上部署hive,现在我们就做一个很小的实例去熟悉HIVE QL.使用的数据是视频播放数据包括视频编码,播放设备编码,用户账号编码等,我们在这个数据基础上 ...

  4. Hadoop入门第三篇-MapReduce试手以及MR工作机制

    MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...

  5. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  6. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  7. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  8. TYUT程序设计入门第四讲练习题题解--数论入门

    程序设计入门第四讲练习题题解--数论入门 对于新知识点的学习,需要不断地刷题训练,才能有所收获,才能更好地消化知识点. 题组链接: 程序设计入门第四讲练习题--数论 by vjudge 题解: A. ...

  9. Kotlin入门第四课:简单工厂模式

    Kotlin基础知识的学习,请参考之前的文章: Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android ...

随机推荐

  1. Hbase各种查询总结

    运用hbase好长时间了,今天利用闲暇时间把Hbase的各种查询总结下,以后有时间把协处理器和自定义File总结下. 查询条件分为: 1.统计表数据 2,hbase 简单分页 3,like 查询 4  ...

  2. 2018.6.29 JavaScript

    一.使用JS数组实现冒泡排序 二.创建Teacher对象,添加(姓名.年龄.地址.学生对象[学生姓名,学生性别])属性 要求: 创建多个老师对象,每个老师下管理多个学生,显示每个老师下所有的学生信息 ...

  3. Java 发送 Https 请求工具类 (兼容http)

    依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...

  4. 题解 P1137 【旅行计划】

    传送门 很显然,每个点的答案是它所有前驱节点的答案加1,即f[i]=max(f[i],f[j]+1); 考虑空间复杂度用邻接表存图,在拓扑排序同时DP就好了 #include<iostream& ...

  5. Cesium专栏-测量工具测距、测面、测高(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

  6. R+hadoop

    这里面的配置 http://www.rdatamining.com/big-data/r-hadoop-setup-guide root@kali:~/hadoop_home/hadoop-1.2.1 ...

  7. 03_14_final关键字

    03_14_final关键字 1. Final关键字 final的变量的值不能够被改变 final的成员变量 final的局部变量(形参) final的方法不能够被重写 final的类不能够被继承

  8. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解

    最近在公司项目中使用vue2.0做开发,在使用checkbox时遇到了一些问题,首先我们先了解一下需求. 如上如所示,在上方复选框被点击时,更改下方p标签的文本内容为:复选框已被选中.并将p标签文字颜 ...

  9. node 中的redis使用

    1.创建sql.config.js 配置文件 : var redis_db = { ", "URL":"127.0.0.1", "OPTIO ...

  10. 正则python正则,提取\t\n里面的大写英文字母

    ss = '['\r\n\t\t\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t', '\r\n\t\t\t\t\t\t\t\t\tCMA CGM JACQUES JOSEPH ...