Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K

把登录用户名写进去

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第1张图片

添加写入权限

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第2张图片

1.2.5 脚本准备

这是一个批处理脚本,转载自网友“子墨良言”

通过它可以方便地在一整个集群当中执行相同的命令并获得回显。

deploy.conf

masternode,all,namenode,zookeeper,resourcemanager,

slavenode1,all,slave,namenode,zookeeper,resourcemanager,

slavenode2,all,slave,datanode,zookeeper,

deploy.sh

#!/bin/bash

#set -x

if [ $# -lt 3 ]

then

echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag”

echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile”

exit

fi

src=$1

dest=$2

tag=$3

if [ ‘a’$4’a’ == ‘aa’ ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$4

fi

if [ -f $confFile ]

then

if [ -f $src ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

scp $src s e r v e r " : " server":" server":"{dest}

done

elif [ -d $src ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

scp -r $src s e r v e r " : " server":" server":"{dest}

done

else

echo “Error: No source file exist”

fi

else

echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”

fi

runRemoteCmd.sh

#set -x

if [ $# -lt 2 ]

then

echo “Usage: ./runRemoteCmd.sh Command MachineTag”

echo “Usage: ./runRemoteCmd.sh Command MachineTag confFile”

exit

fi

cmd=$1

tag=$2

if [ ‘a’$3’a’ == ‘aa’ ]

then

confFile=/home/hadoop/tools/deploy.conf

else

confFile=$3

fi

if [ -f $confFile ]

then

for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'

do

echo “$server********”

ssh $server “source /etc/profile; $cmd”

done

else

echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”

fi

新建文件夹将其存入,等下会用到,作用等下讲解。

这一步在masternode进行即可。后续所有文件从masternode进行分发。

1.2.6 JDK准备

解压JDK并配置环境变量

tar -zxvf jdk<-version> -C [目标路径]

vim /etc/profile

在这里插入图片描述

source /etc/profile

这一步要在所有节点进行。

1.3 安装Zookeeper


先解压

方式见1.2.6

1.3.1 修改配置文件

进入解压目录下的conf

在这里插入图片描述

zoo.cfg本来是没有的,将zoo_sample.cfg拷贝一份并命名为zoo.cfg。编辑

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第3张图片

以上是该文件需要的全部内容。记得一定要编辑第一二行是zookeeper的日志和数据目录,可以自定义,但一定要自己建立相应的目录并且将其所有者修改为hadoop用户,命令如下

chown hadoop:hadoop -R [目录]

最后三行是节点的myid及主机名及通信端口。

其他参数关系到Hive的正常启动,如果只装hadoop,可以不用配置。

1.3.2 分发

scp -r [zookerper目录] hadoop@slavenode1:[相同路径]

一定要分发到和master相同的路径,这样便于统一调度。

1.3.3 配置环境变量

在这里插入图片描述

加入这些并使环境变量生效,环境变量如何生效

1.3.4 配置ID

三节点同时进行,在数据目录下新建名为myid的文件

在masternode下的该文件中写入"1"

slavenode1为“2”

slavenode2为“3”

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第4张图片

如图,只

1.3.4 启动并查看状态

在masternode上启动三节点的zookeeper服务

这时候需要用到runRemoteCmd.sh文件了,记得先给它一个执行权限

chmod 777 runRemoteCmd.sh

执行

runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” zookeeper

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第5张图片

三节点的服务已全部开启,但它不会报错,所以我们要自己验证下服务的状态

runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh status” zookeeper

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第6张图片

显示masternode、slavenode2为跟随者,slavenode1为领导者。代表成功,领导者只有一个,不一定是slavenode1,它是被选举出来的。所以如果不一样不代表失败。如果失败了,则不会显示mode。

1.3.5 什么是JPS

jps是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。我们使用一下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们发现每个节点上都出先了JPS进程和QuorumPeerMain。

JPS是这条命令本身拉起的进程,QuorumPeerMain则是zookeeper拉起的,那么QuorumPeerMain是什么呢?

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第7张图片

根据官方文档来看,是个入口类。用来加载myid

二、Hadoop三节点搭建

============================================================================

2.1 环境准备


还是需要JDK,这个在1.2.6中已经完成。

2.2 安装Hadoop


2.2.1 修改配置文件

首先还是在主机上进行,首先进入到安装目录下的etc/hadoop目录下去。编辑hadoop-env.sh文件

在这里插入图片描述

JAVA_HOME参数本来不这样,你改成JDK目录即可。等下分发的时候如果不同的机器JDK目录不一致,则自己还是要做相应

然后要编辑相同目录下的core.site.xml文件

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第8张图片

用这一段替换原有的configuration即可。除了hadoop.tmp.dir需要自定义其他可以不用管。这个是hadoop临时目录,上传到hdfs的文件需要在这里暂存,配置完后还得手动建这么个目录然后更改拥有者为hadoop,方式见1.3.1

然后修改hdfs-site.xml

dfs.replication

3

dfs.permissions

false

dfs.permissions.enabled

false

dfs.nameservices

cluster1

dfs.ha.namenodes.cluster1

masternode,slavenode1

dfs.namenode.rpc-address.cluster1.masternode

masternode:9000

dfs.namenode.http-address.cluster1.masternode

masternode:50070

dfs.namenode.rpc-address.cluster1.slavenode1

slavenode1:9000

dfs.namenode.http-address.cluster1.slavenode1

slavenode1:50070

dfs.ha.automatic-failover.enabled

true

dfs.namenode.shared.edits.dir

qjournal://masternode:8485;slavenode1:8485;slavenode2:8485/cluster1

dfs.client.failover.proxy.provider.cluster1

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

dfs.journalnode.edits.dir

/home/hadoop/data/journaldata/jn

dfs.ha.fencing.methods

shell(/bin/true)

dfs.ha.fencing.ssh.private-key-files

/home/hadoop/.ssh/id_rsa

dfs.ha.fencing.ssh.connect-timeout

10000

dfs.namenode.handler.count

100

将这段覆盖进去即可

编辑slaves文件

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第9张图片

把主机名写入即可。

编辑mapred-site.xml

mapreduce.framework.name

yarn

将这段覆盖进去即可,这表示等下要调用yarn框架。这个配置限于hadoop2.x及以上版本,因为1.x是没有yarn框架的。yarn的作用在于进行mapreduce运行时的资源调度。而1.x的资源调度是由mapreduce本身来进行的。

编辑yarn-site.xml文件

yarn.resourcemanager.connect.retry-interval.ms

2000

yarn.resourcemanager.ha.enabled

true

yarn.resourcemanager.ha.automatic-failover.enabled

true

yarn.resourcemanager.ha.automatic-failover.embedded

true

yarn.resourcemanager.cluster-id

yarn-rm-cluster

yarn.resourcemanager.ha.rm-ids

rm1,rm2

yarn.resourcemanager.hostname.rm1

masternode

yarn.resourcemanager.hostname.rm2

slavenode1

yarn.resourcemanager.recovery.enabled

true

yarn.resourcemanager.zk.state-store.address

masternode:2181,slavenode1:2181,slavenode2:2181

yarn.resourcemanager.zk-address

masternode:2181,slavenode1:2181,slavenode2:2181

yarn.resourcemanager.address.rm1

masternode:8032

yarn.resourcemanager.scheduler.address.rm1

masternode:8034

yarn.resourcemanager.webapp.address.rm1

masternode:8088

yarn.resourcemanager.address.rm2

slavenode1:8032

yarn.resourcemanager.scheduler.address.rm2

slavenode1:8034

yarn.resourcemanager.webapp.address.rm2

slavenode1:8088

yarn.nodemanager.aux-services

mapreduce_shuffle

yarn.nodemanager.aux-services.mapreduce_shuffle.class

org.apache.hadoop.mapred.ShuffleHandler

将这段覆盖进去即可。这是相关资源调度信息。

2.2.2 分发

见1.3.2的方式

2.2.3 启动journalnode

runRemoteCmd.sh “/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode” all

在这里插入图片描述

用于namenade之间的数据共享,它从属于zookeeper。所有namenode可以不是只有一个,如果你配置的只有一个,那么不用管这个,如果有,需要做数据共享。我这版是配置了两个的。

2.2.4 格式化

这时候需要格式化namenode了,什么是namenode?

Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。

在主节点上

bin/hdfs namenode -format #namenode 格式化

bin/hdfs zkfc -formatZK #格式化高可用

bin/hdfs namenode #启动namenode

接下来要做一个备节点

在备节点上(slavenode1)

bin/hdfs namenode -bootstrapStandby

2.2.5 启动集群

sbin/start-all.sh

这条命令将会启动HDFS与YARN,即文件系统与资源调度框架。

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第10张图片

来验证下

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第11张图片

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第12张图片

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第13张图片

namenode并没有启动,经检查发现这是因为我用的一个已经废弃的环境,数据目录已经被我改得面目全非。所有namenode不能启动,关掉之后换用hadoop2.7配的新环境

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第14张图片

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第15张图片

这下namenode出现了。我们进GUI界面看看

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第16张图片

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建),成功入职百度月薪35K_第17张图片

可以看见作为namenode,masternode处于激活状态,而slavenode1处于准备状态。

与此同时三个节点都可以作为datanode来使用,那么datanode是什么呢?

Namenode管理文件系统的元数据,而Datanode存储了实际的数据。客户端联系Namenode以获取文件的元数据或修饰属性,而真正的文件I/O操作是直接和Datanode进行交互的。

三、Hive环境配置

=========================================================================

3.1 个人理解


Hive是Facebook开源的一个数据仓库,它的作用在于,可以以SQL的形式去操纵HDFS文件系统里的数据,它的上层是SQL解释器,底层是Map/Reduce运算框架。

直接与HDFS交互很可能需要写代码,即自己编写Map/Reduce程序,这是有一定门槛的。但通过Hive,可以以SQL的形式将数据扔进已写好的Map/Reduce的程序进行运算,大大降低了运维难度。

但也正因此,Hive对数据的处理是非常慢的,因为底层复杂的矩阵运算注定了Hive的SQL不能像主流数据库的SQL那么快,Hive之慢,相较于真正的SQL,是以指数级递增的。正因此,Hive适合大数据的一次写入多次读取,数据不到TB级,使用Hive是严重的浪费,是技术选型的典型失败。

3.2 安装配置


Hive在随便哪个节点上配置一次即可,不用分发。

3.2.1 配置文件

首先是配置环境变量,编辑/etc/profile文件

在这里插入图片描述

然后使环境变量

3.2.2 元数据库

Hive不是真正的数据库,它需要一个真正的数据库来辅助自己存储一些元数据。元数据库默认采用derby,但一一般采用mysql。顺便说一些,Hive的语法与Mysql非常相似,并且都不是特别符合主流的SQL标准。

进入安装目录的conf目录,编辑hive-site.xml,如果没有自己创建一个,将下面内容覆盖进去,然后根据自己情况做略微修改。

javax.jdo.option.ConnectionURL

jdbc:mysql://IP:PORT/db

你可能感兴趣的:(程序员,面试,java,后端)