大数据原生集群 (Hadoop2.X为核心) 本地测试环境搭建五

本篇安装版本

flink1.7
Azkaban-2.5.0
presto 0.196
druid (imply-2.7.10)


Flink

一、解压缩 flink-1.7.2-bin-hadoop27-scala_2.11.tgz,进入conf目录中。

二、修改配置

1)修改 flink/conf/flink-conf.yaml 文件,在开头位置有一个jobmanager.rpc.address,这个是jobmanager所在地址,当集群运行的时候有rpc协议交互,我给的是hdp2,因为我总共只给flink三台机器

2)修改 conf/slave文件,里面添加集群task节点,可以有之前配置的hdp2,用来泡task任务

3)scp分发给另外两台机子

4)启动,在jobmanager所在节点调用bin/start-cluster.sh,在其他节点调用虽然不会报错,但是无法完全启动flink,最后访问http://hdp2:8081可以对flink集群和任务进行监控管理<在这里插入图片描述
通常情况下,flink的配置文件很少去更改,但是如果你有需要也可以去设置,下面是整个配置文件的作用

#==============================================================================
# 基础配置,一般情况下使用flink的时候都是用yarn做资源调度
# 这是因为Apache Flink 自带的的资源管理成本很大
# 它不直接限制单个任务的使用资源大小,而是通过提供任务槽(Task Slots)来限制集群中能够并行运行的任务数量
# 这些任务直接可以共同使用整个task节点的资源,所有task节点的资源情况你可以在web页面上看到,flink直接把整个被注册为task节点的服务器所拥有的资源全部拿来用了
#==============================================================================

# jobmanager所在节点
jobmanager.rpc.address: hdp2

# jobmanager的rpc端口
jobmanager.rpc.port: 6123

# 如当前节点是jobmanager,那么它的jobmanager进程所用的JVM堆内存大小
jobmanager.heap.size: 1024m

# 同上,但此配置是taskmanager的
taskmanager.heap.size: 1024m

# 如此节点是taskmanager,则提供多少个任务槽位
taskmanager.numberOfTaskSlots: 1

# 任务默认的并行度,这个会影响任务占用多少个核数,一般在代码里面设置,配置文件中保持默认就行
parallelism.default: 1

# 如果你的任务里用了相对路径,则解析的文件系统指向谁,默认是本地文件系统,即'file:///',你可以设置为'hdfs://mynamenode:12345'
# fs.default-scheme

#==============================================================================
# 高可用配置
#==============================================================================

# 高可用依赖的组件,可选的只能是 'NONE' or 'zookeeper'. 默认是zookeeper
# high-availability: zookeeper

# 高可用元数据存储的地址,必须是一个可持久化的路径,默认是在hdfs上的hdfs:///flink/ha/路径下
# 可选的有 HDFS, S3, Ceph, nfs, ...
# high-availability.storageDir: hdfs:///flink/ha/

# zk集群地址
# high-availability.zookeeper.quorum: localhost:2181

# ACL options are based on https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_BuiltinACLSchemes
# It can be either "creator" (ZOO_CREATE_ALL_ACL) or "open" (ZOO_OPEN_ACL_UNSAFE)
# The default value is "open" and it can be changed to "creator" if ZK security is enabled
# 这个配置自用的话一般默认open,不改,它是指对高可用元数据是否有其他的访问限制,如果配置其他值,那么需要你参考flink和zk的官方文档
# high-availability.zookeeper.client.acl: open

#==============================================================================
# 集群容错,这里配置的是默认配置,你在写代码的时候可以动态改
#==============================================================================

# 如果你的任务做了checkpoint,那么checkpoint保存用的方式是什么
# 可选项: 'jobmanager', 'filesystem', 'rocksdb', or the <class-name-of-factory>.
# 默认文件系统
# state.backend: filesystem

# 指定检查点的存储位置,用于实现作业的容错和状态恢复。
# state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints

# 指定保存点的存储位置,允许用户手动管理作业状态,并支持跨作业版本的状态恢复。
# state.savepoints.dir: hdfs://namenode-host:port/flink-checkpoints

# 如果你的保存方式用的是rocksdb,即RocksDBStateBackend,那么此配置可以为true
# 它是指任务存在多个保存点时,不同的保存版本以增量的形式保存数据状态而不是全部数据保存
# state.backend.incremental: false

#==============================================================================
# Web 前端,也就是自带的ui页面
#==============================================================================

# 所在地址,一般不动,默认随jobmanager启动
#web.address: 0.0.0.0

# 端口
rest.port: 8081

# 是否可以通过web提交和管理任务,这个配置没有实际作用,因为你不改它,默认false的时候,你在web上任然可以操作提交
#web.submit.enable: false

#==============================================================================
# 其他高级配置
#==============================================================================

# 用来指定任务提交之后的暂存路径,用yarn调度的话会跟随yarn的配置,无需另行配置
# io.tmp.dirs: /tmp

# Specify whether TaskManager's managed memory should be allocated when starting
# up (true) or when memory is requested.
#
# We recommend to set this value to 'true' only in setups for pure batch
# processing (DataSet API). Streaming setups currently do not use the TaskManager's
# managed memory: The 'rocksdb' state backend uses RocksDB's own memory management,
# while the 'memory' and 'filesystem' backends explicitly keep data as objects
# to save on serialization cost.
# 是否使用taskmanager内存来保存任务的计算数据,flink官方建议纯批处理的时候此项为true
# 因为它确实可以减少序列化消耗,但实时不建议,而RocksDB有自己的内存使用策略
# taskmanager.memory.preallocate: false

# The classloading resolve order. Possible values are 'child-first' (Flink's default)
# and 'parent-first' (Java's default).
#
# Child first classloading allows users to use different dependency/library
# versions in their application than those in the classpath. Switching back
# to 'parent-first' may help with debugging dependency issues.
# 类加载顺序,flink默认子优先
# classloader.resolve-order: child-first

# 这个配置用来更改flink任务给数据来源多大的网络缓存区,默认占taskmanager.memory.flink.size值的百分之十
# 但是它不是绝对的,最终结果要收到下面两个最大、最小值的约束
# taskmanager.network.memory.fraction: 0.1
# taskmanager.network.memory.min: 64mb
# taskmanager.network.memory.max: 1gb

#==============================================================================
# Flink Cluster 集群安全相关的凭证设置
#==============================================================================

# Kerberos authentication for various components - Hadoop, ZooKeeper, and connectors -
# may be enabled in four steps:
# 1. configure the local krb5.conf file
# 2. provide Kerberos credentials (either a keytab or a ticket cache w/ kinit)
# 3. make the credentials available to various JAAS login contexts
# 4. configure the connector to use JAAS/SASL

# The below configure how Kerberos credentials are provided. A keytab will be used instead of
# a ticket cache if the keytab path and principal are set.

# security.kerberos.login.use-ticket-cache: true
# security.kerberos.login.keytab: /path/to/kerberos/keytab
# security.kerberos.login.principal: flink-user

# The configuration below defines which JAAS login contexts

# security.kerberos.login.contexts: Client,KafkaClient

#==============================================================================
# ZK 安全配置
#==============================================================================

# Below configurations are applicable if ZK ensemble is configured for security

# Override below configuration to provide custom ZK service name if configured
# zookeeper.sasl.service-name: zookeeper

# The configuration below must match one of the values set in "security.kerberos.login.contexts"
# zookeeper.sasl.login-context-name: Client

#==============================================================================
# 历史服务器
#==============================================================================

# flink的历史服务器通过对应命令启动 bin/historyserver.sh (start|stop)

# 历史服务器已完成任务的存放地址
#jobmanager.archive.fs.dir: hdfs:///completed-jobs/

# 历史服务器的地址,一般不改,随集群启动
#historyserver.web.address: 0.0.0.0

# 端口号
#historyserver.web.port: 8082

# 在运行的任务存放地址
#historyserver.archive.fs.dir: hdfs:///completed-jobs/

# 隔多长时间刷新在运行任务的状态
#historyserver.archive.fs.refresh-interval: 10000

azkaban

在安装之前必须安装mysql数据库,azkaban目前只支持用mysql做元数据存储

1、上传安装包

azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz

解压之后azkaban-sql-script-2.5.0会变成azkaban-2.5.0,里面是sql语句,且下面的安装对三个包分别简称为web、exe、sql

2、先进入mysql数据库建立一个叫做azkaban的数据库,并使用mysql的source命令
注意是mysql的我的大哥们,我可是见过那种用linux的人,我可醉了卡一下午,还不相信自己错了,拉着我给我演示了一遍,我用无奈的眼神看着那个ZZ

source 命令运行sql中的create-all-sql-2.5.0.sql文件,如果azkaban和mysql不在一个节点上,可以将azkaban-2.5.0发到mysql所在的结点运行

create database azkaban;
use azkaban; 
source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;

3、进入web解压之后的主路径,运行下面的命令生成秘钥,最终的成品是一个名叫keystor的文件

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

解释:
keytool:这是Java密钥和证书管理工具的名称,用于管理和操作密钥库和密钥对。
-keystore keystore:这个参数指定了密钥库文件的名称。在这个例子中,密钥库文件被命名为keystore(没有指定路径,所以它会在当前目录下创建或查找)。密钥库文件可以存储密钥对(公钥和私钥)以及证书链。
-alias jetty:这个参数用于为生成的密钥对指定一个别名(alias)。在这个例子中,别名被设置为jetty。别名用于在密钥库中唯一标识密钥对。
-genkey:这个参数告诉keytool执行生成密钥对的操作。
-keyalg RSA:这个参数指定了要使用的密钥算法。在这个例子中,它指定了RSA算法。RSA是一种广泛使用的非对称加密算法,它使用一对密钥:一个公钥用于加密,一个私钥用于解密。

当运行上面的命令之后会进入证书文件生成的进程,根据我的提示输入就可以了,一般只有1、2、8、9、10需要输入其他可以直接回车,下面是输入提示

#这个密码是keystoreSSL认证时的密码
1、输入 keystore 密码: 
2、再次输入新密码:

#下面这几步回车跳过就可以
3、您的名字与姓氏是什么?
[Unknown]4、您的组织单位名称是什么?
[Unknown]5、您的组织名称是什么?
[Unknown]6、您所在的城市或区域名称是什么?
[Unknown]7、您所在的州或省份名称是什么?
[Unknown]:

#这一步开始再次输入
8、该单位的两字母国家代码是什么
[Unknown]: CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?
[]: y

#这个是jetty工具调用这个文件时的认证密码,一般为例后期配置文件不搞混两个密码,配置时和前面的密码保持一致
9、输入jetty的密码
10、再次输入密码

4、注意一下所有结点时间是否一致,如果不一样一定要修正时间,还要检查一下exe和web的lib下是否有mysql的驱动jar没有的话自己考进去一个和自己的mysql匹配的jar

5、分别进入exe和web的conf目录,以下面我提供的为模板修改配置文件

web的azkaban-users.xml:
<azkaban-users>
	<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
	<user username="metrics" password="metrics" roles="metrics"/>
	<!-- 这个文件一般不用改,但是要注意第三行的这个是登录azkaban时候的账户和密码有需要可以添加 -->
    <user username="admin" password="admin" roles="admin,metrics"/>	
	
	<role name="admin" permissions="ADMIN" />
	<role name="metrics" permissions="METRICS"/>
</azkaban-users>
------------------------------------------------------------
web的azkaban.properties,跟着√的都要特别注意改成大家自己的,其他的根据需要自己决定或者和我一致

#Azkaban Personalization Settings
#服务器UI名称,用于服务器上方显示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI颜色
azkaban.color=#FF3601
#进入首页的路径
azkaban.default.servlet.path=/index
#web存放web文件的目录,这个本身就自带的我们设置一下他的觉得路径就可以√
web.resource.dir=/opt/module/azkaban/server/web/
#时区,改为亚洲/上海 默认为美国
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#用户权限管理默认类(绝对路径)√
user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml

#Loader for projects
#global配置文件所在位置(绝对路径),这个在exe下有再带的,同样的该一个绝对路径即可√
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#数据库类型√
database.type=mysql
#端口号√
mysql.port=3306
#数据库连接IP√
mysql.host=hdp2
#数据库实例名√
mysql.database=azkaban
#数据库用户名√
mysql.user=root
#数据库密码√
mysql.password=000000
#最大连接数
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty服务器属性.
#最大线程数
jetty.maxThreads=25
#Jetty SSL端口
jetty.ssl.port=8443
#Jetty端口
jetty.port=8081
#SSL文件名(绝对路径)就是我们之前生成的那个文件√
jetty.keystore=/opt/module/azkaban/server/keystore
#SSL文件密码的密码√
jetty.password=111111
#Jetty工具调用文件的密码√
jetty.keypassword=111111
#SSL文件名(绝对路径)√
jetty.truststore=/opt/module/azkaban/server/keystore
#SSL文件密码√
jetty.trustpassword=111111

# Azkaban Executor settings
executor.port=12321

# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=

lockdown.create.projects=false

cache.directory=cache
----------------------------------------------------
exe的azkaban.properties:
#Azkaban
#时区
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
#jobtype 插件所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects√
executor.global.properties=/opt/module/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#mysql的配置√
database.type=mysql
mysql.port=3306
mysql.host=hdp2
mysql.database=azkaban
mysql.user=root
mysql.password=000000
mysql.numconnections=100

# Azkaban Executor settings
#最大线程数
executor.maxThreads=50
#端口号(如修改,请与web服务中的中一致)
executor.port=12321
#线程数
executor.flow.threads=30

6、最后分别执行exe和web的bin下的azkaban-*-start.sh命令,不报错则安装成功,但是启动的时候注意先启动executor的,最后访问https://服务器IP地址:8443就可以了,账户和密码是之前user文件里面的那个,最后我在提醒大家一句azkaban和mysql可以不再一个节点上,但是不要想着server和executor不再一个节点上,这个想法相当恶劣

7、如果你在访问的时候,后台报错javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?,不要慌这不是你搭建的问题,这个是因为你用的浏览器安全证书不允许你访问azkaban,你可以换一个版本较低的谷歌浏览器,或者你用https的请求头去访问,不过这样虽然可以访问成功,但是后天还会包其他的错误我们忽略就好

presto

presto是一个使用sql从多种,离线数据源中查询数据的查询引擎

0)官网地址

https://prestodb.github.io/

1)下载地址

https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.196.tar.gz

2)将presto-server-0.196.tar.gz导入服务器目录下,并解压到/opt目录,这个可以自定义

tar -zxvf presto-server-0.196.tar.gz -C /opt

3)修改名称为presto

mv presto-server-0.196/ presto

4)presto的安装比较特殊,我们需要先配置每个结点的运行环境,进入到/opt/presto目录,并创建存储运行数据的文件夹,一定要在presto的根目录下,否则在运行的时候需要另外指定,比较麻烦,文件夹名字先不要变

mkdir data

5)随后创建存储配置文件的文件夹,名字也不要变
mkdir etc

6)进入到etc目录下,我们开始配置presto

首先添加名为jvm.config的配置文件,并写入如下内容

# JVM以服务器模式运行  
-server
# 设置JVM堆的最大内存大小为4GB  
-Xmx4G
# 启用G1垃圾收集器  
-XX:+UseG1GC
# 设置G1垃圾收集器的堆区域大小为32MB  
-XX:G1HeapRegionSize=32M
# 启用GC开销限制  
-XX:+UseGCOverheadLimit
# 显式调用System.gc()时触发并发垃圾收集  
-XX:+ExplicitGCInvokesConcurrent
# 发生OutOfMemoryError时生成堆转储文件,既溢出文件
-XX:+HeapDumpOnOutOfMemoryError
# 发生OutOfMemoryError时直接终止JVM进程  
-XX:+ExitOnOutOfMemoryError
# 设置NIO库中缓存的最大缓冲区大小  
-Djdk.nio.maxCachedBufferSize=2000000
# 允许JVM自我附加  
-Djdk.attach.allowAttachSelf=true

上面这个文件注意,-XX:+HeapDumpOnOutOfMemoryError-XX:+ExitOnOutOfMemoryError配置一个就行,这两个是对于OOM错误的处理策略,如果服务搭建在容器基础上,就用后者,如果要深入分析内存泄漏和内存溢出问题的根本原因,那么建议使用-XX:+HeapDumpOnOutOfMemoryError参数,并指定一个堆转储文件的生成路径(通过-XX:HeapDumpPath参数)

7)Presto可以支持多个数据源,这些数据源在Presto里面大家习惯叫做catalog,这里我们配置一个Hive的数据源,注意同样在etc下,后期其他数据源也是同样的配置方式

在etc下创建一个名字为 catalog 的文件夹,存放各种数据源的配置文件

进入catalog文件夹准备一个名为 hive.properties 的数据源配置文件,注意这个文件名字中的hive部分,就是你后面在写circle时需要携带的catalog,就是说你在这里为数据源配置时写的文件名是什么 后面在调用的时候就写什么,添加如下内容

#这个是连接名字,不能随便写,可以通俗的理解为它是presto内部对于标识哪种数据源的一个枚举值,这个值,你可以去论坛上找
connector.name=hive-hadoop2
#这个是hive元数据服务地址,一般hive我们都是单机的,所以不用纠结ip,hive在哪里就写哪里
hive.metastore.uri=thrift://hdp2:9083
#这个是所有节点要显示的指定hadoop的两个配置文件位置,可以不配但是要有HADOOP_CONF_DIR环境变量或者把Hadoop的hdfs-site.xml与core-site.xml拷贝到etc下
hive.config.resources=/opt/hadoop-2.7.2/etc/hadoop/core-site.xml,/opt/hadoop-2.7.2/etc/hadoop/hdfs-site.xml

8)将presto分发到其他服务器上

9)分发之后,分别进入各机子的presto/etc的路径。创建名为node.properties的配置文件,并配置node属性,注意node id每个节点都不一样,id这个东西你自己安排逻辑就行,没有固定格式,以及node存放运行数据的路径就是之前准备的data路径

#集群的标识,所有节点都要一致
node.environment=production
#节点的id,每个节点都不同
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
#该节点存放数据的路径
node.data-dir=/opt/presto/data

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/presto/data

node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/presto/data

至此presto每个节点的运行环境就准备好了,下面我们要给每个节点配置角色了

10)Presto是由一个coordinator节点和多个worker节点组成。我准备的服务器有3台,我在hdp2上配置coordinator,在hdp1、hdp3上配置为worker,配置方式如下

第一步:hdp2上配置coordinator节点(主节点)

编辑etc/config.properties文件,添加内容如下

# 指定该节点是否为协调器  
coordinator=true
# 协调器节点是否充当计算节点(单机版通常设置为true)  
node-scheduler.include-coordinator=false
# 单个查询最大使用整个服务多大内存  
query.max-memory=50GB
# 查询在任意一台机器上最大使用内存  
#query.max-memory-per-node=10GB
# Presto内部和外部通信的HTTP端口
http-server.http.port=8881
# 是否启用discovery服务
discovery-server.enabled=true
# discovery服务的URI,用于管理存活节点,主节点该配置指向它自身
discovery.uri=http://hdp2:8881
# 查询历史记录配置 ,最多保存的历史记录数和记录保存的时长
query.max-history=1000
query.min-expire-age=60m

注意,query.max-memory-per-node一般情况下不配置,因为它涉及到一个可用堆的限制,设置不合适的话启动的时候会报错的

第二步:hdp1、hdp3配置worker节点,分别编辑etc/config.properties文件,区别和主节点的不大,主要是关闭协调器功能

# 指定该节点是否为协调器  
coordinator=false
# 单个查询最大使用整个服务多大内存  
query.max-memory=2GB
# 查询在任意一台机器上最大使用内存 
#query.max-memory-per-node=1GB
# Presto内部和外部通信的HTTP端口
http-server.http.port=8881
# discovery服务指向主节点的URI,用于管理存活节点
discovery.uri=http://hdp2:8881
# 查询历史记录配置 ,最多保存的历史记录数和记录保存的时长
query.max-history=1000
query.min-expire-age=60m

至此presto每个结点的角色就指定好了,下面我们就开始运行测试一下,看看能不能启动

11)在hdp2的/opt/hive目录下,启动Hive Metastore 服务,第一次先前台启动确定元数据服务没有问题在后台启动

bin/hive --service metastore >/dev/null 2>&1 &

12)分别在三台机器上启动Presto Server,第一次启动推荐先前台启动

#前台启动Presto,控制台显示日志
bin/launcher run
#后台启动Presto,日志输出到文件
bin/launcher start

13)后台启动,日志查看路径为presto/data/var/log

启动的时候日志不会一直输出当日志输出到下图中黑色底纹日志就会停止,要确保在这之前的日志没有错误日志,则表示安装成功

在这里插入图片描述

到此presto的服务我们安装完了,但是这还没有完全安装完毕,我们还要安装两个东西一个是presto的client这个相当于mysql的客户端一样的地位,还有一个是web页面

presto的client

1)下载Presto的客户端,下载地址如下
https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.196/presto-cli-0.196-executable.jar

2)将presto-cli-0.196-executable.jar上传到hdp2也就是主节点的/opt/presto文件夹下

3)修改文件名称
mv presto-cli-0.196-executable.jar prestocli

4)增加执行权限
chmod +x prestocli

5)启动prestocli,server是presto的主节点访问路径

 ./prestocli --server hdp2:8881 --catalog hive --schema default

6)Presto命令行操作,验证presto是否可用

Presto的命令行操作,相当于Hive命令行操作。但是注意操作的每个表必须要加上所在的schema

例如
要读取hive数据源default命名空间下的test表的数据,那么sql就写为
select * from hive.default.test limit 100

要查询hive数据源下的所有数据库
show schemas from hive

查询hive数据源下default库下的表
show tables from hive.default

如果不报错可以正常访问到数据则client安装成功

在这里插入图片描述

Presto操作其他数据源时所用到的Sql可能存在某些不同,不过大部分是通用的,如果你需要类似hive -e 'SQL'这种动态SQL执行方式的话,对于Presto本身来说是没有提供命令支持,但你可以使用echo "select * from hive.test;" | prestocli --server hdp2:8881 --catalog hive --schema default的方式来实现这一想法

presto-web可视化

单凭client还不行,工作中我们一般操作的是web页面,而可视化需要一个叫yanagishima的zip包我忘了在哪里下的了,大家自己在网上找一下,或者如果你安装的版本和我一样就从我网盘下载

链接: https://pan.baidu.com/s/1v-U19SZaZ8U2ib769223Yg 提取码: utae

1)将yanagishima-18.0.zip上传到主节点的的presto目录中

2)解压缩yanagishima

 unzip yanagishima-18.0.zip
cd yanagishima-18.0

3)进入到yanagishima-18.0/conf文件夹中,编写yanagishima.properties配置文件,添加如下内容,不要直接修改原来的yanagishima.properties,那是个模板,大家把原来的改个名字留存,新建一个空白文件去配置

jetty.port=7080
presto.datasources=atiguigu-presto
presto.coordinator.server.atiguigu-presto=http://hdp2:8881
catalog.atiguigu-presto=hive
schema.atiguigu-presto=default
sql.query.engines=presto

4)在yanagishima-18.0路径下启动yanagishima

nohup bin/yanagishima-start.sh >y.log 2>&1 &

5)访问web页面

http://hdp2:7080 

看到界面,就进行查询了,有的时候访问页面一片空白的话,那你就换一个浏览器就可以了

6)查看表结构

在这里插入图片描述

这里有个Tree View,可以查看所有表的结构,包括Schema、表、字段等。

比如执行select * from hive.dw_weather.tmp_news_click limit 10

在这里插入图片描述

每个表后面都有个复制键,点一下会复制完整的表名,然后再上面框里面输入sql语句,ctrl+enter键执行显示结果

在这里插入图片描述
最后说四点平常自己搭建的测试环境用不到的东西,第一个是presto自带的历史任务web直接访问前面配置的主节点端口就行,它的web和节点发现用的端口是一个
在这里插入图片描述
至于其他的日志,在presto的安装目录下,你可以进入data/var目录下查看presto的日志,其中:

launcher.log:此日志由启动器创建,并连接到服务器的stdoutstderr流。它将包含一些在服务器日志初始化时发生的日志消息,以及JVM产生的任何错误或诊断。

server.log:这是Presto使用的主要日志文件。如果服务器在初始化过程中出现故障,它通常会包含相关信息。它会自动旋转和压缩。

http-request.log:这是包含服务器接收的每个HTTP请求的HTTP请求日志。它会自动旋转和压缩。

第二点是presto允许你配置任务队列或者是任务资源组,一般是任务资源组用的多,配置方式见-》https://blog.csdn.net/dudadudadd/article/details/142407824

第三点是如果你后期对presto的配置做更改,那么理论上来讲,Coordinator节点负责meta管理、worker管理、query的解析和资源队列这些,而worker节点则负责实际的计算和读写操作的性能优化,如JVM配置、内存管理等,但是保险起见,所有配置除了已经明确可以不一样的,其他的都要同步集群所有节点。

第四点是任务发现节点其本身充当着和yarn类似的角色,如果你只有一台机器只想用来做测试的话,你的config配置文件可以写如下格式

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080

同时presto还支持在服务发现节点上面在配置一层资源管理器,如下

resource-manager=true
resource-manager-enabled=true
coordinator=false
node-scheduler.include-coordinator=false
http-server.http.port=8080
thrift.server.port=8081
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://自己的ip:8080 (Point to resource manager host/vip)
thrift.server.ssl.enabled=true
concurrency-threshold-to-enable-resource-group-refresh=1.0
resource-group-runtimeinfo-refresh-interval=100

当你配置了上面的资源管理器之后,你的服务发现节点的心跳发送地址就不再是自身,而是上面的资源管理器

coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery.uri=http://资源管理器ip:8080 (Point to resource manager host/vip)
resource-manager-enabled=true

任务资源节点的心跳发送地址任然保持服务发现节点不发生改变

coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
discovery.uri=http://example.net:8080
resource-manager-enabled=true

下面是一些关键配置的解释:

resource manager:汇总来自服务发现节点和任务资源节点的数据,并构建集群的全局视图。

coordinator:允许此Presto实例作为服务发现节点存在(接受来自客户端的查询并管理查询执行)。

node-scheduler.include-coordinator:是否允许服务发现节点自身也处理任务。对于较大的集群,如果该配置为true,处理工作可能会影响查询性能,因为机器的资源无法用于调度、管理和监控查询执行的关键任务。

http-server.http.port:指定当前节点的HTTP服务器端口。Presto使用HTTP进行所有内部和外部通信。

query.max-memory:查询可使用的最大分布式内存总量。

query.max-memory-per-node:查询在任何一台计算机上可以使用的最大节点内存量。

discovery-server.enabled:Presto使用Discovery服务来查找集群中的所有节点。每个Presto实例都会在启动时注册Discovery服务。为了简化部署并避免运行其他服务,Presto协调员可以运行Discovery服务的嵌入式版本。它与Presto共享HTTP服务器,因此使用相同的端口。

discovery.uri:发现服务器的URI。由于我们在Presto协调员中启用了Discovery的嵌入式版本,这应该是Presto服务发现节点的URI。替换example.net:8080,以匹配Presto服务发现的主机和端口。此URI不得以斜杠结尾。

concurrency-threshold-to-enable-resource-group-refresh:这个配置是当资源管理器下面的服务发现节点中拥有的资源被使用百分比都到的这个数的时候,不在允许提交任务,此时当你提交时会返回`Too large (XXX expected elements with load factor XXX)`类似的反馈

resource-group-runtimeinfo-refresh-interval:是资源管理器刷新服务发现节点把控资源占比的时间间隔

Druid

druid和prestio是一个极端的相反,它是从实时流中查询数据的一个工具

一、安装包下载

从https://imply.io/get-started 下载最新版本安装包

二、安装部署

1)将imply-2.7.10.tar.gz上传到hdp2的/opt目录下,并解压

tar -zxvf imply-2.7.10.tar.gz -C /opt

2)修改/opt/imply-2.7.10名称为/opt/imply

mv imply-2.7.10/ imply

3)修改配置文件

第一步:修改Druid的ZK配置,配置文件为conf/druid/_common/common.runtime.properties
修改如下内容

druid.zk.service.host=hdp1:2181,hdp2:2181,hdp3:2181

第二步:修改启动命令参数,使其不校验不启动内置ZK

编辑conf/supervise/quickstart.conf文件,向我这样将以下的配置注释掉

:verify bin/verify-java<br/>
#:verify bin/verify-default-ports<br/>
#:verify bin/verify-version-check<br/>
:kill-timeout 10<br/>
#!p10 zk bin/run-zk conf-quickstart<br/>

4)启动

先启动zookeeper,之后启动druid,启动命令如下

bin/supervise  -c conf/supervise/quickstart.conf

说明:每启动一个服务均会打印出一条日志。可以通过/opt/imply/var/sv/查看服务启动时的日志信息


三、web页面的使用案例

0)使用自己的产生数的方式,只要可以把数据发到kafka里面就可以,而且我在这里提醒各位我各人在工作中使用imply的次数只有一次,不知道是大数据环境用的少,还是我没有再遇到过的原因,总之大家真要使用的时候还是在其他地方多看看

1)登录hdp2:9095查看,如果你访问页面报错无法连接datasource,那么就等一会在刷新页面,这个报错是druid没启动完

在这里插入图片描述

2)点击Load data->点击Apache Kafka

在这里插入图片描述

3)添加Kafka Broker和要消费的topic,地址改成自己的,我的zk出了些问题,用的其他服务器的,就当hdp1、2、3使用了

在这里插入图片描述

4)确认数据样本格式在这里插入图片描述

5)加载数据,必须要有时间字段

在这里插入图片描述

6)配置要加载哪些列

在这里插入图片描述

7)创建数据库表名

在这里插入图片描述
8)重新观察一下配置
在这里插入图片描述

9)连接Kafka的topic_start

在这里插入图片描述

10)点击SQL

在这里插入图片描述

11)查询指标
select sum(mid) from “topic_start”

在这里插入图片描述
第一篇https://blog.csdn.net/dudadudadd/article/details/109647930

第二篇https://blog.csdn.net/dudadudadd/article/details/109659923

第三篇https://blog.csdn.net/dudadudadd/article/details/109679296

第四篇https://blog.csdn.net/dudadudadd/article/details/109719624

第六篇https://blog.csdn.net/dudadudadd/article/details/109744195

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值