b0105 大数据集群-2021分布式A(手动3节点)-环境搭建

环境

win7 安装vmware12,虚拟机装 centos7.9

3 台机器.  每台机器4G内存,20G硬盘

集群名字:  2021分布式A

集群规划

 
 描述 hc2109 hc2110  hc2111 hc2107(客户端)
ip 192.168.25.109 192.168.25.110 192.168.25.111  
 HDFS 

 NameNode 

 DataNode

 Second NameNode

DataNode

 DataNode  

 Yarn

 ResourceManager

 NodeManager

 NodeManager  NodeManager  

Hive

  Hive服务器   Hive客户端(Beeline)

zookeeper

 

hbase  

 

kafka

 

spark(standlone)

worker worker

master

worker

 

storm

Supervisor

Nimbus HA

Supervisor

Nimbus  

Supervisor

 

 

flink(standalone)

taskmanager

taskmanager

jobmanasger

 

 

flume

 

sqoop

     

已有

  • 已经创建hadoop账号,添加了sudo 权限
  • 已经安装jdk1.8
  • 配置了 主机名 和静态ip地址
  • 关闭防火墙
  • 集群机器上的时间直接设置为北京时间,没有使用其他工具

计划

计划把这台机器当作分布式机器,安装大数据开源生态常见组件,具体如下

  • hadoop 3.3.1  (最新版本) 
  • spark 
  • hive
  • zookeeper
  • hbase

说明

  • 默认操作都用hadoop账户进行, 需要特别权限的地方,会在前面加sudo,在文中会补充描述。  需要root账户单独操作的,也会特别说明
  • 所有的组件都安装在 /opt 目录下
  • 环境搭建下组件的配置,  只满足能够跑起来来就行,并不考虑其他。后续修改体现在  "b0108 大数据集群-2021分布式A-运维“, 根据具体使用情况调整配置参数
  • 分布式集群组件的安装一般紧跟在伪分布式后, 可以参考  b0104 大数据集群-2021伪分布式-环境搭建
  • 分布式集群组件的安装思路,先在一台机器上弄好,再scp复制到其他机器上, 最后个性化修改
  • 很多组件的文档前都加上 前置 , 表示之前做了什么工作

10. Sqoop 1.4.7 20210808

计划

由于sqoop 本质上是一个编译转换器, 将生成的mapreduce程序提交到hadoop集群, 是一个客户端。 只需装在客户机上。

单节点就行了。 这里是hc2107

前置

  • jdk 1.8 (必需)
  • hadoop 服务器已经安装 (必须)
  • 客户机上 hadoop 解压包,并配置指定hadoop服务器参数 (sqoop客户机上安装 必须)
  • 客户机上hive 安装好, 通过服务器元数据9083端口服务可以获取元数据正常使用,  如果sqoop客户机上安装,并使用数据库<-->hive,是必须的。
  • 一个关系型数据库,比如mariadb (必须)

安装配置

参考 b0104/sqoop

将 hc2108 安装的包,并且配置好了的参数,全部复制到hc2107上,  

其他都一样

启动和检验

执行b0104/sqoop 中的测试例子

首先启动hadoop集群。

执行例子。

这里报了一个异常, 参考 b0108/HIVE/Q2, 简单的说,是之前客户机上的hive没有安装测试完全,没有配置 元数据服务器地址和端口

解决这个问题一切都正常。

总结

  • sqoop可以不用安装在hadoop集群上
  • 它本质就是一个编译器,并且将编译输出的代码以客户程序的形式提交到集群运行
  • sqoop本身没必要存在分布式的概念
  • 猜测,也不存在 客户机/服务器模式

9. Flume 1.9.0 20210808

计划

在集群所有3台机器上安装。

注意一点, Flume与大多数分布式集群组件不一样, 各个节点其实是独立的,只不过有数据上的上下游依赖关系。

前置

  • 安装jdk1.8 (必须)

安装配置

flume 基本解压到集群上,配置环境变量。    实际参数在使用中配置

参考 b0104/flume,  先在hc2109一台机器上, 最终分发到其他机器。

# hc2109, flume 集群分发
scp -r  /opt/apache-flume-1.9.0-bin  hadoop@hc2110:/opt
scp -r  /opt/apache-flume-1.9.0-bin  hadoop@hc2111:/opt

启动和检验

 单机的参考 b0104/flume, 集群待做todo

参考

  • disk 20210807_大数据_伪分布式_flume安装.txt
  • b0104/flume 单机,里面有使用案例

后续

  • 测试 多个Flume的agent 配合实现一个任务
  • 测试  不同类型的源和目标

资料

soure

Sink

Sink:支持的数据类型:HDFS Sink,Logger Sink, Kafka Sink,Avro Sink, Thrift, IPC, File Roll 等。

Sink在设置存储数据时,可以向文件系统、数据库、hadoop存数据

channel

channel:  有MemoryChannel, JDBC Channel, File Channel, Kafka Channel.

Flume用到的技术(个人提炼)

网络通信:  socket, RPC,AVRO,Thrift

存储: 内存队列,各种类型的外部存储

并发: 集群不同进程之间、  多线程

8. Flink 1.13.2  20210807

计划

flink 的集群模式类似spark, 支持standlone独立模式,yarn,meos 等模式。

这里选择standlone模式,  尽量支持yarn模式。

主节点借助 zookeeer支持HA,  这里没有选择这个 ,把主节点选定为 hc2111

从节点 选定为 hc2109,hc2110.

前置

  • 安装jdk (必须)
  • 已经在单机hc2108 安装过flink, 记录在文档 b0104中

 

安装配置

参考 b0104/flink 中的相关。

先选定hc2109, 解压到安装目录

flink-conf.yaml

设置以下参数

# jobmanager节点的机器, 和HA(+zookeeper)的单独文件masters 二选一。
jobmanager.rpc.address: hc2111


# 设置主节点 进程的内存
jobmanager.memory.process.size: 800m

# 从节点进程内存
taskmanager.memory.flink.size: 800m


# 并发数量,依照CPU设置
taskmanager.numberOfTaskSlots: 2

parallelism.default: 2

 

该文件的参数还支持以下类型

  • 支持主节点HA, 指定zookeeper服务器,和  存储地址, 用来恢复
  • Fault tolerance and checkpointing ,   对程序执行 中间状态存储,指定存储位置,和恢复类型
  • 对外rest 接口
  • 集群安全方面的配置
  • 历史服务,存储历史任务信息的 机器和进程

 

workers

hc2109

hc2110

注意, masters用不到,除非结合zookeeper配置主节点的HA

安装包集群分发

scp -r  /opt/flink-1.13.2  hadoop@hc2110:/opt
scp -r  /opt/flink-1.13.2  hadoop@hc2111:/opt

/etc/profile

### flink
export FLINK_HOME=/opt/flink-1.13.2
export PATH=$PATH:${FLINK_HOME}/bin

执行source生效

启动和检验

1 启动flink

在主节点hc2111 上执行 

start-cluster.sh

整个集群进程都启动了

http://hc2111:8081

web 页面如下

 

 

 从上可以看出, 一个从节点上的TaskManager会使用多个 端口,与外界通信和数据传输。

 2 批处理wordcount

执行批处理 wordcount 的例子,如下命令

flink run  $FLINK_HOME/examples/batch/WordCount.jar

对比 b0104中记录的,

此时程序有2个并发,  集群上2个机器,每个机器2个slot

 注意一下并发, task,subtasks等概念的实际体现

 

 3 流wordcount

思路

  1. 在某台机器 运行一个本文输入命令行程序,作为服务器端,监听端口,等待客户机连接
  2. 运行一个flink 统计单词的流程序,作为客户端连接刚才的服务器程序。
  3. 然后在服务器端 命令行下输入字句,  就会被flink接收,并在集群上运算,统计单词数量,最终输出到某台机器上的本地默认输出文件中
# hc2110 上执行,启动服务器程序,监听端口9000
nc -l 9000

# hc2111 执行,启动流程序,作为客户端连接 刚才的服务器程序
flink run $FLINK_HOME/examples/streaming/SocketWindowWordCount.jar --hostname hc2110 --port 9000

# 从 flink web页面获取 流程序最后的输出在机器 hc2110上, 打开一个查看程序可以实时看到结果
tail -f  flink-hadoop-taskexecutor-0-hc2110.out

 在一端输入消息数据,在另外一端实时输出来了

相关截图如下

 

 

参考

  • disk 20210807_大数据_分布式_flink安装.txt
  • disk 20210807_大数据_伪分布式_flink安装.txt
  • b0104/flink
  • ref1 "Flink完全分布式集群安装,Snail,2020/04/16"

后续

  • 测试程序  flink on yarn, 和从hdfs 读取数据

 

7.Storm 2.2  20210805

计划

机群上3台机器, hc2111作为主节点nimbus程序,hc2110作为备选节点,实现HA

3台机器都 运行干活监控进程 Supervisor

前置

  • 安装zookeeper (必须)
  • 安装jdk (必须)
  • 伪分布式hc2108已经安装了,记录在文档b0104中。 本文将以此为基准 增加变化部分

安装配置

参考 b0104中storm部分,大部分都一样。 

集群操作,先在一台机器hc2109上操作。

storm.yaml

文件内容如下

#所使用的zookeeper集群主机
storm.zookeeper.servers:
 - "hc2109"
 - "hc2110"
 - "hc2111"
 
 
#nimbus所在的主机候选列表,实际会从中选一个
nimbus.seeds: ["hc2110","hc2111"]

# 指定ui端口,以免8080被其他程序占用 
ui.port: 8081

安装包集群分发

scp -r  /opt/apache-storm-2.2.0  hadoop@hc2110:/opt
scp -r  /opt/apache-storm-2.2.0  hadoop@hc2111:/opt

启动和检验

1. 先启动 zookeepr

3台机器都执行, zkServer.sh start

2. 启动nimbus和ui

在hc2111中执行程序

nohup storm nimbus &       开启nimbus
nohup storm ui &         开启ui界面,通过web服务

3 启动supervisor 

在3台机器上都启动  

nohup storm supervisor &

 

http://hc2111:8081 

 

参考

  • disk 20210806_大数据_分布式_storm安装.txt
  • disk 20210805_大数据_伪分布式_storm安装.txt
  • b0104 storm

注意点

  • storm 集群配置文件 并没有指定哪些机器是从节点, hadoop,spark就指定了,storm的从节点 在所在机器启动进程就是了
  • storm nimbus, supervisor 进程 kill 掉没关系, 因为关键信息都存储在zookeeper了,不会影响

 

6. Spark 3.1.2 20210805

计划

在集群3台机器上安装spark standlone模式, 同时把支持yarn 模式配置加进去。

hc2111 安装master, 所有机器都装worker

前置

  • 已经安装jdk, 这里是1.8 (必须)
  • 安装hadoop  
  • 伪分布式hc2108已经安装了,记录在文档b0104中。 本文将以此为基准 增加变化部分

安装配置

集群3台机器, 先选定hc2109操作, 按照 b0104 文档中 ,伪分布式hc2108安装spark过程执行前面大部分操作.。 

下面只记录不一样的地方

spark-env.sh

export SPARK_MASTER_HOST=hc2111

workers

hc2109
hc2110
hc2111

安装包集群分发

# spark hc2109 -> hc2110
scp -r  /opt/spark-3.1.2-bin-hadoop3.2  hadoop@hc2110:/opt
scp -r  /opt/spark-3.1.2-bin-hadoop3.2  hadoop@hc2111:/opt

/etc/profile

3台机器上的spark环境变量都添加,并执行source 生效

启动和检验

 服务器启动

参考 hc2108 伪分布式 spark 启动。

注意点, 

  • start-master.sh 只能在master节点hc2111上启动, 其他机器启动会不成功
  • start-workers.sh 可以选取任意一台机器启动
  • 这里没有用hadoop,只是单独启动spark测试

 

客户端连接

把hc2108当作客户端 连接 spark 集群 master节点 hc2111,如下。 注意 4040端口是在客户机 hc2108

 注意: 如果集群内存不够, 可能会出现情况  b0108/spark/Q1 无法分配足够资源给应用程序,导致程序一直等待

可以 spark-env.sh 调整 driver,execuer 占用的资源比如内存数量, 也可以在应用程序提交时指定,如下

# driver 默认1G,executor 默认1G, 2个参数至少 500m左右
spark-shell --master spark://hc2111:7077 --driver-memory 500m --executor-memory 500m

 

web页面监控情况

 

 

 

 

 

 

 

 参考

  • disk 20210805_大数据_分布式_spark安装.txt
  • disk 20210805_大数据_伪分布式_spark安装.txt
  • b0104/spark 在单机上standlone安装
  • ref1 "我的 Spark 3.1.1 之旅, 黄赟, 2021/04/19"

 

 其他

后续可做

  •  测试 spark  on yarn的程序,熟悉

注意点

  • 4040 web 应用程序查看页面在 提交程序的客户机上,而不是master节点上

5. kafka 2.8 20210803

计划

kafka 集群所有节点都是平等的。 在集群3台机器上都安装

前置

  •  已经安装jdk, 这里是1.8 (必须)
  •  已经安装zookeeper (必须)
  •  伪分布式hc2108已经安装了,记录在文档b0104中。 本文将以此为基准 增加变化部分

安装配置

集群3台机器, 先选定hc2109, 按照 b0104 文档中 ,伪分布式hc2108安装kafka过程执行前面大部分操作.。 

下面只记录不一样的地方

server.properties

修改或添加这些参数值

# broker(集群中每个机器的叫法)的id或者编号,在集群中该编号必须唯一
broker.id=1

# 服务器监听端口
listeners=PLAINTEXT://hc2109:9092

# 消息的副本数量,这是kafka高可用、数据不丢失的关键
default.replication.factor=2

# topic创建时默认分区的数量
num.partitions=2

#  消息的存放目录,这里看配置是日志的意思,因为kafka把消息使用日志的形式存储,所以这里不要和kafka的运行日志相混淆 
log.dirs=/opt/kafka_2.13-2.8.0/data

# zookeeper服务器集群地址
zookeeper.connect=hc2109:2181,hc2110:2181,hc2111:2181

集群分发

# 复制解压包到其他机器上,hc2109上执行
scp -r  /opt/kafka_2.13-2.8.0  hadoop@hc2110:/opt
scp -r  /opt/kafka_2.13-2.8.0  hadoop@hc2111:/opt

 

在对应机器上修改文件 server.properties

hc2110机器上改以下参数

broker.id=2

listeners=PLAINTEXT://hc2110:9092

hc2111机器上改以下参数

broker.id=3

listeners=PLAINTEXT://hc2111:9092

 /etc/profile

3台机器上都添加环境变量,并使之生效

启动和检验

参考 b0104中启动过程。 下面列出不一样或注意的地方。

  • zookeeper要在3台机器上单独启动。
  • kafka也要在3台机器上分布单独启动.
  • 以下是常见命令。 连接3台机器任意一台 9092端口,都可以。 好像可以直接指定zookeeper。
# 创建topic,使用默认参数
kafka-topics.sh --bootstrap-server hc2109:9092 --create --topic testKafka1
kafka-topics.sh --bootstrap-server hc2109:9092 --list

# 生产者和消费者 命令行程序
kafka-console-producer.sh --bootstrap-server hc2109:9092 --topic testKafka1
kafka-console-consumer.sh --bootstrap-server hc2109:9092 --topic testKafka1

# 指定服务器,也可以成功
kafka-topics.sh --bootstrap-server hc2110:9092 --create --topic testKafka2
kafka-topics.sh --bootstrap-server hc2109:9092 --list

# 创建3个分区,2个副本的topic
kafka-topics.sh --bootstrap-server hc2110:9092 --create --topic test1 --partitions 3 --replication-factor 2

 

topic test1 磁盘结构

如上命令,创建topic后,去查看磁盘目录

hc2109

hc2110

 hc2111

 

  hc2109 hc2110 hc2111
leader test1-0 test1-1 test1-2
follower test1-1 test1-2 test1-0

 正常情况3个kafka节点都启动, 这个topic 3个leader节点均分在集群上,最大程度利用并发资源。 一旦某个机器挂掉, 有一台机器会运行2个leader分区,相对负担比正常下大一些。

 

每个 分区副本里面的文件对象如下。

 

参考

  • disk 20210803_大数据_伪分布式_kafka安装.txt
  • disk 20210803_大数据_分布式_kafka安装.txt
  • b0104 伪分布式/kafka

 

4. hbase 2.3.6 20210803

计划

在集群3台机器上都安装hbase

前置

  • 已经安装hadoop
  • 已经安装zookeeper  (其实hbase 默认自带一个,但是不用它的)
  • 之前在伪分布式上安装过了,并写了详细过程,  本文基于此在上面改动,参考b0104

安装配置

集群3台机器, 先选定hc2109, 安装 b0104 文档中 ,伪分布式hc2108安装hbase过程执行前面大部分操作.。 

下面只记录不一样的地方

hbase-site.xml

这两个参数的值需要调整为本集群的

<!-- zk地址 -->
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>hc2109:2181,hc2110:2181,hc2111:2181</value>
</property>
<!-- 配置hbase存储位置,根据自己的hadoop集群配置端口 -->
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://hc2109:9000/hbase</value>
</property>

regionservers

将内容设置为本集群安装hbase的所有机器主机名,这里是

hc2109
hc2110
hc2111

集群分发

# 复制解压包到其他机器上,hc2109上执行
scp -r  /opt/hbase-2.3.6   hadoop@hc2110:/opt
scp -r  /opt/hbase-2.3.6   hadoop@hc2111:/opt

/etc/profile

在hc2110,hc2111上 将hbase的路径变量加进去,并执行source 生效

 

启动和测试

按照 b0104 伪分布式 hc2108上的 过程进行, 一路都正常

注意点:

  • hadoop,hbase 只需要在一台机器上执行启动命令就可以启动整个集群程序, 而zookeeper需要登录到每台机器上各启动一次程序
  • 集群中 hbase的3台机器是平等的,  启动过程中,哪台机器最开始启动, HMaster 就在上面,后续的web 端口也是, http://hc2109:16010/

 

 

 

参考

 

3. zookeeper 3.6.3 20210802

计划

在集群3台机器上都安装zookeeper

前置

  • 已经安装jdk

安装

单机上配置好

先在一台机器上操作, 选定 hc2109

按照  "b0104 大数据集群-2021伪分布式-环境搭建"/3.zookeeper 3.6.3    的步骤配置参数

相对hc2108上单机zookeeper,不一样的地方是

1.  zoo.cfg  中添加以下信息

dataDir=/opt/apache-zookeeper-3.6.3-bin/data
dataLogDir=/opt/apache-zookeeper-3.6.3-bin/log

# 主机ip, 心跳端口、数据端口  
server.1=hc2109:2888:3888
server.2=hc2110:2888:3888
server.3=hc2111:2888:3888

 

2. 在 apache-zookeeper-3.6.3-bin/data , 添加文件 vi myid,   输入1 保存

复制到其他机器

在hc2109上将配置好的安装包 和配置文件复制到集群其他机器

# 复制解压包到其他机器上,hc2109上执行
scp -r /opt/apache-zookeeper-3.6.3-bin hadoop@hc2110:/opt
scp -r /opt/apache-zookeeper-3.6.3-bin hadoop@hc2111:/opt


# 传输配置文件
scp /etc/profile root@hc2110:/etc/profile
scp /etc/profile root@hc2111:/etc/profile

还需要登录其他机器

  • 执行 source /etc/profile  使得变量生效
  • data/myid, hc2110上机器上的值修改为2, hc2111机器上的修改为3, 这样与前面的配置参数都对应起来

启动和测试

分布在3台机器上 执行启动命令和状态查看 zkServer.sh start , zkServer.sh status

 

在其他机器安装过zookeeper的hc2108上 ,执行客户端程序, 连接集群中任意一台机器,这里是hc2109, 如下

# hc2108上执行
zkCli.sh -server hc2109:2181

 测试

 

也可以指定整个集群连接参数, 也是从中选择一台机器作为连接服务器

zkCli.sh -server hc2109:2181,hc2110:2181,hc2111:2181

参考

注意

  • zoo.cfg 配置文件中  参数右边 添加  "# 中文描述"  可能会引发zookeeper启动时不能正确读取参数, 参考  b0108/zookeeper/Q1
  • myid 文件是放在 创建的数据目录 data下, 而不是 conf下。

2. HIVE 2.3.9  20210802

计划

由于已经在 伪分布式hc2108上安装过hive了。     在分布式上集群上,只在hc2110机器上安装服务器组件, 可以照做,修改数据库连接用户和数据库就可以了。

同时计划 安装hive 客户端程序,选定机器为hc2107作为客户机,不在集群中。 hive客户端用来执行Beeline.

前置

  • 已经安装了hadoop, 这里是3.3.1,     参考本文相关章节
  • 已经 安装了 数据库 MariaDB 5.5, 对应Mysql 开源版本,随着centos7.9  安装时装好的。数据库服务器在hc2102,  创建了数据库用户 hive2和数据库hivedb2,测试过可以远程命令行访问

Hive 安装(服务器端)

参考   “b0104 大数据集群-2021伪分布式-环境搭建" / 2. HIVE 2.3.9 , 将Hive 安装在 hc2110上。 

这里直接从hc2108上拷贝配置好的安装包   

scp -r  /opt/apache-hive-2.3.9-bin  hadoop@hc2110:/opt

在/etc/profile中添加环境变量并使生效。

 

整个配置过程中不一样的地方是:

hive-site.xml

hive-site.xml  相对 hc2108伪分布式上变化

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hc2102:3306/hivedb2?createDatabaseIfNotExist=true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive2</value>
</property>
<property>

Hive客户端(Beeline)

 hive安装后, 可以执行hive CLI,这是本地模式,运行在Hive服务器端。

还有一个Beeline程序,  使用了Thrift、JDBC 技术并且支持SQL的命令行客户端程序, 可以不和服务器程序在同一台机器上。

这里选定客户机为hc2107

启动相关服务

<!-- 客户端远程连接的端口 -->
<property> 
<name>hive.server2.thrift.port</name> 
<value>10000</value>
</property>
<property> 
<name>hive.server2.thrift.bind.host</name> 
<value>0.0.0.0</value>
</property>
<property>

服务器端上的Hive里的 hive-site.xml 配置文件的这两个参数,决定了服务器程序的端口

执行以下命令启动这个服务并验证

nohup hiveserver2 &

# 验证,看端口10000是否开启
netstat -nltp | grep 10000

服务器端hc2110的Beeline功能验证

命令行执行 Beeline,   登录到它的shell,  执行以下连接命令

!connect jdbc:hive2://hc2110:10000 

输入 连接账号和密码, 结果报错了,原因就是hadoop服务器不允许任意客户端连接

还需要添加额外配置,详细参考     “b0108 大数据集群-2021分布式A(手动3节点)-运维"/Hive/Q1 问题

解决这个问题,就可以正常使用了,如同 Hive Cli 一样

客户端 hc2107  配置

  1. 安装jdk
  2. 将 分布式集群上配置好的hadoop安装文件夹 复制到 hc2107  /opt下
  3. 将 hc2110 上的hive 安装包 复制到 hc2107 /opt下 ,  将 hive-site.xml 文件下的所有属性清空  (参考本文  返回补充/hive.metastore.uris)
  4. 将hc2110是的 /etc/profile 上的 jdk,hadoop, hive的配置信息复制到 hc2107对应文件中,前提是它们的存放路径都一样

客户端hc2107 的Beeline功能验证

命令行执行 Beeline,   登录到它的shell,  执行以下连接命令

!connect jdbc:hive2://hc2110:10000 

输入 连接账号和密码 。 正常可以了

可以登录hive web 查看结果  http://hc2110:10002/

 

注意: hc2107上 并不需要启动hadoop 任何进程,和hive服务端进程

相关

  • disk 20210802_大数据_hadoop分布式_hive安装.txt
  • “b0104 大数据集群-2021伪分布式-环境搭建”/HIVE

其他

遗留以下问题值得深入探索:

  • 分布式集群 hive 服务器端 有没有必要装成分布式的, 本文是单点的。   
  • 服务器端Hive的 MetaStore 可以单独服务形式存在,指定参数 hive.metastore.uris 为  thrift://服务器ip:9083 , 说明客户端程序 通过连接它获取元数据信息,但是本文中客户端程序并没有用到这参数,直接连接服务器的Thrift端口,也能正常使用,看到数据库的表。 不很清楚这个MetaStore单独存在的情况。  已经解决,参考本文  返回补充/hive.metastore.uris

 

返回补充

hive.metastore.uris  (20210808)

1. 启动hive服务器的这个服务

 

 

 

 hive 服务器hc2110 并没有配置 hive.metastore.uris  , 在服务器启动在这个服务,  发现监听 9083端口,并且和mysql 3306 

说明hive 服务器hc2110 通过这个服务 起一个中转站的作用, 帮助 hive客户端 获得mysql数据库里的hive元数据信息,这种情况在客户机使用hive时有用。

2 在客户端的hive中添加 hive.metastore.uris  信息

在hc2107上的hive的配置文件添加以下

<!-- 本机作为客户端,连接这个hive服务器,通过它中转获取hive元数据。这是远程服务器的地址 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://hc2110:9083</value>
</property>

 

接下来在客户机hc2107 执行hive, 就可以连上hc2110。

在hive shell可以获取hive数据,这样在hive客户端上不存储数据库帐号、密码,同时又能正常使用

 

1. HADOOP3.3.1  20210728

前置

所有的机器都已经完成了这些操作

  • 已经创建hadoop账号,添加了sudo 权限
  • 已经安装jdk1.8
  • 配置了 主机名 和静态ip地址
  • 关闭防火墙
  • 集群机器上的时间直接设置为北京时间,没有使用其他工具

设置ssh无密登录

 集群机器通信需要配置这里, 以下在集群所有机器上都操作

ssh-keygen -t rsa  # 生成密钥,  分别在3台机器上执行,每台机器按3次回车


# 分布在3台机器上执行以下命令, 将指定机器上的公钥拷贝到本机上
# 每个执行过程中, 选择 yes,输入对方机器密码

ssh-copy-id hc2109
ssh-copy-id hc2110
ssh-copy-id hc2111

执行上述操作后,任何2台机器都能够彼此无密码 ssh 登录对方

注: N台机器的操作次数  N*N, N很小时可以一台台机器操作, N很大需要寻找更高效的处理方法

下载、解压

win下 通过地址 https://hadoop.apache.org/releases.html下载二进制安装包 hadoop-3.3.1.tar.gz
通过winscp工具上传到  hadoop某个目录下

tar -zxvf hadoop-3.3.1.tar.gz # 解压

mv hadoop-3.3.1 /opt/ # 移动到安装目录下

以上linux 操作只需在 一台机器上  hc2109进行

 

参数配置

以下改动先在hc2109机器上进行

 

- /etc/hosts 配置集群机器主机名

在hc2109机器 的这个配置文件中添加以下 集群机器信息,后续可以通过主机名指定机器

192.168.25.109 hc2109
192.168.25.110 hc2110
192.168.25.111 hc2111

1 添加环境变量

sudo vi /etc/profile   

添加文件内容:

### 配置hadoop
export HADOOP_HOME=/opt/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

执行 source  /etc/profile  生效

可以进行一个简单验证,如下,看看环境参数有没有成功

[hadoop@hc2109 ~]$ hadoop version
Hadoop 3.3.1

 

2 在linux创建hadoop运行时目录

在 /opt/hadoop-3.3.1 下创建以下目录

  • tmp  存放运行过程临时文件
  • dfs/name   存放namenode的输出
  • dfs/data    存放datanode的输出

 

3 添加jdk路径到 hadoop xxxx.sh  脚本文件中

在以下文件中添加环境变量

  • hadoop-env.sh
  • yarn-env.sh
  • mapred-env.sh

export JAVA_HOME=/opt/jdk1.8.0_301

如果这里不添加,虽然在/etc/profile 有该环境变量,启动时还是会提示找不到它

 

4 core-site.xml

在目录下hadoop-3.31/etc/hadoop , 添加以下内容, 默认是空文件

<configuration>
     <!-- 指定hdfs的nameservice的地址为hc2109:9000 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hc2109:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-3.3.1/tmp</value>
    </property>
</configuration>

 

5 hdfs-site.xml

 路径同上,添加以下内容,文件默认为空的

<configuration>
    <!-- HDFS的副本为2, 大规模集群>=3  -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/hadoop-3.3.1/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/hadoop-3.3.1/dfs/data</value>
    </property>
    
    <!-- 指定Hadoop secondary namenode,避免与namenode同一台主机  -->
    <property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hc2110:9868</value>
      <description>
        The secondary namenode http server address and port.
      </description>
    </property>

    <property>
      <name>dfs.namenode.secondary.https-address</name>
      <value>hc2110:9869</value>
      <description>
        The secondary namenode HTTPS server address and port.
      </description>
    </property>
</configuration>
hdfs-site.xml 新增内容

 

6 yarn-site.xml

  路径同上,添加以下内容,文件默认为空的

<configuration>
    <!-- 指定YARN ResourceManager的地址。另外可以在yarn.resourcemanager.ha.xxx 配置高可用-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hc2109</value>
    </property>
    
    <!-- 指定reducer获取数据的方式, 可以设置多个比如mapreduce_shuffle,spark_shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <!-- value值为 命令行执行 hadoop classpath的输出-->        
    <property>
        <name>yarn.application.classpath</name>
        <value>/opt/hadoop-3.3.1/etc/hadoop:/opt/hadoop-3.3.1/share/hadoop/common/lib/*:/opt/hadoop-3.3.1/share/hadoop/common/*:/opt/hadoop-3.3.1/share/hadoop/hdfs:/opt/hadoop-3.3.1/share/hadoop/hdfs/lib/*:/opt/hadoop-3.3.1/share/hadoop/hdfs/*:/opt/hadoop-3.3.1/share/hadoop/mapreduce/*:/opt/hadoop-3.3.1/share/hadoop/yarn:/opt/hadoop-3.3.1/share/hadoop/yarn/lib/*:/opt/hadoop-3.3.1/share/hadoop/yarn/*</value>
    </property>
    
    <!-- 忽略虚拟内存的检查,虚拟机上设置不容易出问题 -->       
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>    
</configuration>
yarn-site.xml 添加

 

7 mapred-site.xml

  路径同上,添加以下内容,文件默认为空的

<configuration>
    <!--指定mr运行在yarn上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    <!-- historyserver 是否运行不影响hadoop集群正常工作 只是为了更好查看历史运行信息的 -->
    <!-- 指定mapreduce jobhistory地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hc2109:10020</value>
    </property>
    <description>MapReduce JobHistoryServer IPC host:port</description>
    
    <!-- 任务历史服务器的web地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hc2109:19888</value>
        <description>MapReduce JobHistoryServer Web UI host:port</description>
    </property>    
</configuration>

 

8 workers

路径同上, 文件内容改成本主机名, 表示hadoop集群工作节点. 在文件中添加

 

hc2109
hc2110
hc2111

 

集群分发

设置安装目录scp权限

# 分别在3台机器上执行赋权,接下来会执行scp,否则权限不够
# 如果不安装在/opt下,可以不用这样 sudo chmod 777 /opt

替代方案:  ssh root@hc2110 "chmod 777 /opt" , 需要对方机器root密码

 

将配置好的hadoop安装包分发到集群其他机器上

 

# 复制解压包到其他机器上,hc2109上执行
scp -r  /opt/hadoop-3.3.1  hadoop@hc2110:/opt
scp -r  /opt/hadoop-3.3.1  hadoop@hc2111:/opt

 

分发配置文件 /etc/profile, /etc/hosts

前提: 这3台机器的操作是同步的, 对应的配置文件时一样的,可以直接覆盖。 

以下操作在hc2109机器上进行

su # 切换到 root 用户

# 传输配置文件
scp /etc/profile root@hc2110:/etc/profile
scp /etc/profile root@hc2111:/etc/profile


# 使得配置文件生效
ssh root@hc2110 "source /etc/profile" # 需要对方机器root密码,连接对方机器的shell需要重新打开才能看到
ssh root@hc2111 "source /etc/profile"

备注:  上述操作 每一步都需要root密码。  可以和其他方案放在一起权衡选择

 /etc/hosts 可以按照上面一样。

启动hadoop和检验

格式化

hdfs namenode -format  

如果报错, 需要检查前面的配置漏了什么或者是否错误

启动

start-dfs.sh  # 启动hdfs, 在namenode 所在机器 core-site.xml/fs.defaultFS, 这里是hc2109

start-yarn.sh  # 启动yarn, 在resoucemanager 所在机器 yarn-site.xml/yarn.resourcemanager.hostname , 这里是hc2109

 

Web页面

打开检验一下安装是否成功

http://hc2109:9870/ # hdfs 

http://hc2109:8088/ # yarn

检验

执行下面的计算pi程序,如果能够成功 , 说明一切正常

# 执行检验程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 1 

 

wordcount  需要准备好 输入目录下的文件、输出目录,  其中 run1 由程序运行后自动创建

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /data/T/2021/wordcount /out/T/2021/wordcount/run1

 

 

 其他

需要添加 数据节点

添加 DataNode

  1. 不能 scp 原来机器上的 hadoop 安装包, 因为已经在下面创建运行数据存储目录了
  2.  新机器配置基础环境,包括ssh, 确保所有设置和前面的机器保持一样。
  3. 重新解压 hadoop 安装包  hadoop-3.3.1.tar.gz, 放入到 /opt目录下, 并创建运行时目录 tmp, dfs/name,dfs/data
  4. 在hc2109机器上的 workers文件中添加新节点, 然后将hadoop 配置文件重新分发到集群所有节点  scp   /opt/hadoop-3.3.1/etc/hadoop/* hadoop@hc2112:/opt/hadoop-3.3.1/etc/hadoop/
  5. 新机器 /etc/profile,  /etc/hosts 文件的改动和生效
  6. 重启 hdfs和yarn

参考

 

posted @ 2021-07-26 12:08  sunzebo  阅读(185)  评论(0编辑  收藏  举报