(二)大数据生态圈集群搭建之

Wesley13
• 阅读 557

搭建流程

  • 说明

  • 下载安装包

  • 高可用完全分布式搭建

  • 一. 集群规划

  • 二. hadoop安装配置

  • 三. zookeeper安装配置

  • 四. 集群格式化

  • 五. 启动, 操作, 关闭集群

  • 六.访问NameNode的WebUI页面

  • 七.搭建Hadoop的client

说明

  搭建之前, 先根据(一)Linux环境搭建一文将集群的初始环境配置OK.

下载安装包

  Apache-Hadoop 官网: https://hadoop.apache.org/
  Apache-Hadoop各个版本下载地址: https://archive.apache.org/dist/hadoop/common/
  点击想要的版本, 选择hadoop-x.x.x.tar.gz文件下载,本文使用hadoop-2.6.5
(二)大数据生态圈集群搭建之


  Zookeeper官网: http://zookeeper.apache.org/
  Zookeeper下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
  选择想要的版本进入下载, 本文使用zookeeper-3.4.10
(二)大数据生态圈集群搭建之

高可用完全分布式搭建

一. 集群规划

NN(active)

NN(standby)

DN

ZK

ZKFC

JNN

node01

node02

node03

node04

二. hadoop安装配置

  1. 在node01节点上将上传的Hadoop压缩包解压

这里我将文件解压到/opt/software/hadoop文件夹下.
tar -zxf hadoop-2.6.5.tar.gz -C /opt/software/hadoop

进入配置文件修改目录
cd /opt/software/hadoop/hadoop-2.6.5/etc/hadoop/

  1. 修改hdfs-site.xml配置

vim hdfs-site.xml
  编辑文件, 在configuration标签对中插入:

<property>
     <name>dfs.nameservices</name>
     <value>mycluster</value>
</property>
<!--  配置集群服务名  -->
<property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>node01:8020</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>node02:8020</value>
</property>
<!--  配置集群两个namenode节点的本地位置  -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>node01:50070</value>
</property>
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>node02:50070</value>
</property>
<!--  配置集群两个namenode节点的网络位置  -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<!--  配置集群三个journalnode节点的位置  -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/var/sxt/hadoop/ha/jn</value>
</property>
<!--  配置JNN生成文件存放地址  -->
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--  配置ZKFC代理  -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!--  配置zookeeper进程对非本节点操作时的连接方式  -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>
<!--  配置上述ssh连接密钥所在位置  -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
 </property>
<!--  配置开启失败容错监控  -->
  1. 修改core-site.xml配置

vim core-site.xml
  编辑文件, 在configuration标签对中插入

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
</property>
<property>
    <name>ha.zookeeper.quorum</name>
    <value>node02:2181,node03:2181,node04:2181</value>
</property>

  其中fs.defaultFS配置的是hdfs文件目录的前缀, 此处的mycluster为hdfs-site.xml中配置的集群服务名.

  ha.zookeeper.quorum配置的是集群协调服务进程zookeeper.

  1. 修改slaves配置文件

    vim slaves 删除localhost(如果有) 编辑slaves, 在文件中写入: node02 node03 node04

  slaves中配置的是从节点(DataNode)主机名(hostname), 高可用完全分布式, 我们设计的是三个DN节点.

  在编辑文件时, 要注意纵向写的格式, 主机名后也不可以带空格, 否则可能会导致主机解析失败.

  1. 安装包分发

  根据上述步骤配置好之后, 需要将配置好的文件发到其他三个节点上.

cd /opt/software/hadoop        将hadoop下的hadoop-2.6.5包发送

scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node03:/opt/software/hadoop/
scp -r hadoop-2.6.5 root@node04:/opt/software/hadoop/

或使用一种更简单的指令
scp -r hadoop-2.6.5 node02:`pwd`
scp -r hadoop-2.6.5 node03:`pwd`
scp -r hadoop-2.6.5 node04:`pwd`

  发送时, 如果其他节点上没有/opt/software/hadoop/目录, 那么需要自己建立之后再发送. 发送完毕之后要保证所有节点的hadoop目录所在路径都是一致的.

  1. 修改hadoop-evn.sh文件

  此步可先跳过, 该文件可以不修改. 当启动hdfs出现" JAVA_HOME cannot find or set" 类似的说明java_home没有配置的提示时, 可再手动配置(前提是执行java -version成功在显示器打印java版本).

vim hadoop-evn.sh

编辑文件, 找到export JAVA_HOME=${JAVA_HOME}那一行

将 = 后的内容改为JAVA_HOME的确切路径, 可使用 echo $JAVA_HOME查看
export JAVA_HOME=/usr/local/jdk1.8.0_181

  修改完成之后还要使用scp命令将修改的文件发送到各个节点上:

scp hadoop-evn.sh node02:`pwd`
scp hadoop-evn.sh node03:`pwd`
scp hadoop-evn.sh node04:`pwd`
  1. 将hadoop配置到用户环境变量中

  此处配置好后, 可以在任意位置使用hdfs的命令.

vim ~/.bashrc
在文件最后插入
export PATH=$PATH:/opt/software/hadoop/hadoop-2.6.5/bin:/opt/software/hadoop/hadoop-2.6.5/sbin

三. zookeeper安装配置

  1. 搭建zookeeper集群

  zookeeper节点规划在node02, node03 ,node04 节点上

首先, 在 node02 上解压zookeeper的压缩包
tar -zxf zookeeper-3.4.10.tar.gz -C /opt/software/zookeeper

进入解压文件, 修改conf目录下的zoo_sample.cfg
cd /opt/software/zookeeper/zookeeper-3.4.10/conf
mv zoo_sample.cfg zoo.cfg        重命名

  修改zoo.cfg文件

vim zoo.cfg        

修改dataDir的值
dataDir=/var/qb/zookeeper        设置zookeeper目录, 路径任意, 需自己创建

在文件最后加入zookeeper节点的服务位置
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

  发送安装包, 将zookeeper安装包发送到node03, node04节点上

cd /opt/software/zookeeper

scp -r zookeeper-3.4.10 node03:`pwd`
scp -r zookeeper-3.4.10 node04:`pwd`

  在各个zookeeper节点设置的dataDir目录下创建myid文件, 修改文件内容

vim /var/qb/zookeeper/myid    在各个节点的myid中写入相应ID号
1            对应node02节点
2            对应node03节点
3            对应node04节点

  最后, 启动zookeeper进程

cd /opt/software/zookeeper/zookeeper-3.4.10/bin

./zkServer.sh start

四. 集群格式化

  1. 格式化NameNode

  在node01, node02, node03 上分别执行启动journalnode的命令.

hadoop-daemon.sh start journalnode

  随便选一台NameNode(node01 || node02)作为active节点进行格式化.

hdfs namenode -format    
hadoop-daemon.sh start namenode

  另一台NameNode节点执行

hdfs namenode  -bootstrapStandby

  格式化ZKFC进程

hdfs zkfc -formatZK

五. 启动, 操作, 关闭集群

  1. 启动HDFS

  关闭所有节点上的进程

stop-dfs.sh

  启动HDFS

start-dfs.sh
  1. 查看启动进程

    jps

  2. 操作HDFS文件系统

    创建目录 hdfs dfs -mkdir -p /abc/cba 上传文件 hdfs dfs -D dfs.blocksize=1048576 -put text.txt ...

  3. 关闭HDFS

    stop-dfs.sh 或 killall java

注:下次启动时, 要先启动zookeeper进程, 再启动hdfs

六.访问NameNode的WebUI页面

  启动Ha集群之后, 在本地机打开一个浏览器, 在地址栏输入active 状态的namenode节点的ip地址+端口, 例如_192.168.75.133:50070_ , 也可在本地机中修改host文件, 配置域名node01, 就可以使用_node01:50070_ 来访问webUI的页面. 如图:
(二)大数据生态圈集群搭建之

  查看集群的状态:
(二)大数据生态圈集群搭建之

  点击Live Nodes查看各个DataNode节点的详细信息:
(二)大数据生态圈集群搭建之

  此处, 可通过web页面查看HDFS的文件目录结构以及文件的部分元数据信息.输入框中需要输入HDFS文件路径.
(二)大数据生态圈集群搭建之

如果是一个文件, 点击可以显示该文件存在哪个block, ,blockId是多少, 以及各个备份所在的节点:
(二)大数据生态圈集群搭建之

七.搭建Hadoop的client

  客户端搭建十分简单, 只需将配置好的Hadoop安装包发送到client节点对应目录的位置上即可.

  搭建好client之后, 启动集群, 就可以在client上操作HDFS或者提交MapReduce应用程序, 在client上的操作我们称之为集群外操作.

  在集群内一台节点上操作称为集群内操作, 不建议使用集群内操作, 因为如果每一次操作都选择同一个节点, 就会导致该节点的磁盘以及网络IO负载超过其他节点, 久而久之这个节点的磁盘以及网卡性能将会下降, 最终导致数据倾斜问题. 数据倾斜是大数据开发中应当尽量避免的问题.

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
2星期前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
2年前
ubuntu18.04.2 hadoop3.1.2+zookeeper3.5.5高可用完全分布式集群搭建
ubuntu18.04.2hadoop3.1.2zookeeper3.5.5高可用完全分布式集群搭建集群规划:hostnameNameNodeDataNodeJournalNodeResourceManagerZookeepernode01√√√node02√√node03√√
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
6个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这