大数据仓库实战项目-电商数仓3.0版.md

1. 56节KAFKA机器数据量的计算

kafka机器数量=2*(峰值生产速度副本数/100)+1
峰值生产速度50M/S副本为2则:2
(50*2/100)+1=3台

2. 57节:kafka生产压测(cpu,内存,io瓶颈)

kafka-consumer-perf-test.sh 消费者压测脚本
kafka-producer-perf-test.sh 生产者压测脚本

  1. kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer0props bootstrap.servers=xxxx:9092,yyyy:9092 
  • record-size 一条数据多大字节
  • num-records 总共发送多少条消息
  • throughput 是每秒多少条消息设成-1,标识不限流,可测出生产者最大吞吐量
    压测结果说明
    chrome_lA1N1jmDQX.png
  1. kafka-consumer-perf-test.sh --broker-list xxxx:9092,yyyy:9092 --topic test --fetch-size 10000 --messages 1000000 --threads 1 
  • borker-list 卡夫卡集群地址
  • topic topic名称
  • fetch-size 每次fetch的数据的擦小
  • 总共消费的小数个数
    测试结果说明
    chrome_mOE9sJDLGS.png

3. 111节环境准备metastore和hiveserver2想到与直接连mysql或者hive的所有客户端的统一代理入口

4. 131 kafka挂了_丢了

4-1. 挂了

  • 短期: flume channel 缓冲数据
  • 长期:日志服务器保留30天日志。

4-2. 丢了

ack 0 1 -1

  • 0 发送过来数据,不需要应答,可靠性最差,传输性能最好。
  • 1 发送过来数据,leader应答,可靠性一般,传输性能一般
  • -1 发送过来数据,leader和follower共同应答,可靠性最高,传输性能最低。

企业:0不用
如果是普通日志:1
如果是金融数据和钱相关:-1

5. 132 kafka_重复

事务,幂等性+ack=-1 效率低

在下一级处理:hive dwd,sparkstreaming,redis

  • 幂等性:单分区,单会话内数据不重复(kafka启动到挂掉是一个会话)

chrome_FWX14UiBmr.png
chrome_FWX14UiBmr.png

6. 133 kafka_积压

chrome_QaE2biE4EA.png
chrome_QaE2biE4EA.png

  1. 增加分区,同事增加消费者对应的cpu核数 (一个线程一个分区:最起码)
  2. 增加消费者batchsize

日志是1k大小 1000条/s

flume(2000条/s) spark flink

7. 134 kakfa优化

  • 日志保留时间增长 :log.retention.hours=72
  • 副本总为2:default.replication.factor:1 (默认副本1个)
  • 调大网络延迟时间:replica.socket.timeout.ms:30000 #集群网络不稳定时调大该参数;replica.lag.time.max.ms=600000 #如果网络不好,或者kafka集群压力较大会出现副本丢失,然后会频繁复制副本,导致集群压力更大,此时可以调大该参数。

chrome_PL6shUFRXh.png
chrome_PL6shUFRXh.png

  • producer优化:producer.properties压缩,compression.type:none;#默认不压缩可以用gzip,snappy,lz4;减轻网络压力和borker的存储压力
  • kafka内存调整:默认内存一个G,生产环境尽量不要超过6个G; export KAFKA_HEAP_OPTS="-Xms4g -Xmx4G"

8. 135 kafka杂七杂八

  1. 高效读写的原因:集群,分区,

  2. 顺序读写600M/s,随机读写100M/s

  3. 0拷贝
    chrome_au5Ttp9ksX.png

  4. 传输一条2M的日志文件:会发生?卡住,生产者无法推送数据到kafka,或者消费者无法消费kafka的数据;默认最大支持1M;修改server.properties
    replica.fetch.max.bytes:1048576,borker可复制的消息的最大字节数,默认1M
    message.max.bytes:1000012 kafka会接收单个消息size的最大限制,默认1M左右;后者必须小于上着(不能一样)。否则会导致replica之间数据同步失败。

chrome_OiEibFSwLt.png
chrome_OiEibFSwLt.png

  1. 数据过期清理:删除或者压缩
    log.cleanup.policy=delete #删除策略
    log.cleanup.policy=compact# 压缩策略

  2. kafka可以按照时间消费数据

  1. Map<TopicPartition,OffsetAndTimestamp> startOffsetMap=KafkaUtil.fetchOffsetsWithTimestamp(topic,sTime,kafkaProp); 
  1. kafka消费者角度数据是拉取数据

  2. kafka数据单分区内有序。多分区,分区与分区间无序。(疑惑)

一、superset 可视化工具

1. 305 可视化superset概述

Apache 开源轻量的BI分析工具,对接多种数据源(kylin,hive,impala,mysql),支持自定义仪表盘

使用场景:1. BI分析工具 2.可是化工具

2. 306 superset Miniconda(python环境)安装

  1. 基础环境python3.6(因为框架是python编写)
    Miniconda文件名.sh结尾
  1. wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-X86_64.sh 
  2. bash Miniconda3-latest-Linux-X86_64.sh 
  3. # 配置python基础环境不默认激活 
  4. conda config --set auto_activate_base false 

安装成功

chrome_pQ37wGqR8V.png
chrome_pQ37wGqR8V.png

3. 307 conda创建python环境

  1. #创建环境 
  2. conda create -n env_name  
  3. #查看所有环境 
  4. conda info -envs 
  5. #删除环境 
  6. conda remove -n env_name --all 
  7. #激活superset环境 
  8. conda activate superset 
  9. #退出当前激活环境 
  10. conda deactivate 

4. 308 创建python环境

  1. #配置conda国内镜像 
  2. conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free 
  3. conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main 
  4. conda config --set show_channel_urls yes 
  5. #创建环境 
  6. conda remove -n superset python=3.6 

5. 309 superset部署

5-1. 安装依赖

  1. yum -y install python-setuptools 
  2. yum -y install gcc gcc-c++ libffi-devel python-devel python-pip python-wheel openssl-devel cyrus-sasl-devel openldap-devel 

5-2. 安装superset

  1. #更新setuptools,pip 
  2. (superset) [atiguigu@hadoop102 ~]$ pip install --upgrade setuptools pip -i https://pypi.douban.com/simple/ 
  3. ## 安装superset 
  4. (superset) [atiguigu@hadoop102 ~]$ pip install apache-superset -i https://phpi.douban.com/simple #-i指定镜像 

安装成功
chrome_O5Ie67xHI8.png
chrome_3yZhjbbbh8.png

6. 310 superset初始化

  1. #初始化supetset数据库 
  2. (superset) [atiguigu@hadoop102 ~]$ superset db upgrade 
  3. #创建管理员用户 
  4. (superset) [atiguigu@hadoop102 ~]$ export FLASK_APP=superset 
  5. (superset) [atiguigu@hadoop102 ~]$ flask fab create-admin # flask是python web框架,superset使用的就是该框架 
  6. # superset初始化 
  7. (superset) [atiguigu@hadoop102 ~]$ superset init 

创建管理员用户成功
chrome_fEU6ifLqfm.png

7. 311 启停superset

  1. # 安装gunicorn 是一个python web server 和java中的tomcat类似 
  2. (superset) [atiguigu@hadoop102 ~]$ pip install gunicorn -i https://pypi.douban.com/simple/ 
  3. #启动superset 
  4. (superset) [atiguigu@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 "superset.app:create_app()" --daemon 
  5. #停止gunicorn进程(superset也停掉了) 
  6. (superset) [atiguigu@hadoop102 ~]$ ps -ef|awk '/superset/ && !/awk/{print $2}' | xargs kill -9 
  7. #启停脚本 
  8. #!/bin/bash 
  9. ###查看状态 
  10. superset_status(){ 
  11. result=`ps -ef| awk '/gunicorn/ && !/awk/{print $2}' |wc -l` 
  12. if [[ $result -eq 0 ]];then 
  13. return 0 
  14. else 
  15. return 1 
  16. fi 
  17. } 
  18. ###启动 
  19. superset_start(){ 
  20. # 该段内容取自~./bashrc,所用是进行conda初始化;启动superset环境准备 
  21. # >>>conda initialize >>> 
  22. #!! Contents within this block are managed by 'conda init' !! 
  23. __conda_setup="$('/opt/module/miniconda3/bin/conda' 'shell.bash' 'hook' 2 > /dev/null)" 
  24. if [[ $? -eq 0 ]];then 
  25. eval "$__conda_setup" 
  26. else 
  27. if [ -f "/opt/module/miniconda3/etc/profile.d/conda.sh" ];then 
  28. "/opt/module/miniconda3/etc/profile.d/conda.sh" 
  29. else 
  30. export PATH="/opt/module/miniconda3/bin:$PATH" 
  31. fi 
  32. fi 
  33. unset __conda_setup 
  34. #<<<conda initialize<<< 
  35. superset_status > /dev/null 2>&1 
  36. if [[ $? -eq 0 ]];then 
  37. conda activate superset; gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 --daemon superset.app 
  38. else 
  39. echo "superset正在运行" 
  40. fi 
  41. } 
  42.  
  43. ### 停止 
  44. superset_stop(){ 
  45. superset_status > /dev/null 2>&1 
  46. if [[ $? -eq 0 ]];then 
  47. echo "superset未在运行" 
  48. else 
  49. ps -ef|awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9 
  50. fi 
  51. } 
  52.  
  53. ### main入口 
  54. case $1 in 
  55. start ) 
  56. echo "启动supserset" 
  57. superset_start 
  58. ;; 
  59. stop ) 
  60. echo "停止superset" 
  61. superset_stop 
  62. ;; 
  63. status ) 
  64. supserset_status > /dev/null 2>&1 
  65. if [[ $? -eq 0 ]];then 
  66. echo "superset 未在运行" 
  67. else 
  68. echo "superset 在运行中" 
  69. fi 
  70. esac  

8. 312 安装数据库依赖

使用过程:配置数据源--》生成报表--》放到dashboard仪表盘

  1. #对接mysql数据源 
  2. ##安装依赖 
  3. (superset) [atiguigu@hadoop102 ~]$ conda install mysqlclient  
  4. #对接不同数据源安装不同依赖参考http://superset.apache.org/installation.html#database-dependencies 
  5. ## 重启superset 

9. 313 对接mysql数据源

数据库:连接对象名字不必跟数据库名称一致。
sql alchemy uri:python的连接规范

连接数据库:
chrome_Pteu5cGbco.png
连接数据表:
chrome_1p8iJqq2Z1.png

10. 314 配置图表

10-1. 创建仪表盘

10-2. 创建图表

chrome_52F8sXa2qt.png
chrome_52F8sXa2qt.png

配置图表维度和度量
chrome_633B9Eaxd6.png

11. 315 配置地图

chrome_mFHPIM61ZQ.png
chrome_mFHPIM61ZQ.png

12. 316 配置饼图

chrome_YuI9HKnh7v.png
chrome_YuI9HKnh7v.png

13. 317 调整布局(地图放大)

supersetlayout.gif
supersetlayout.gif

14. 318 调整仪表盘刷新频率

chrome_sMO1eocxnT.png
chrome_sMO1eocxnT.png

二、Atlas

1. 数据治理三大模块

  • 数据安全Ranger
  • 数据质量:shell+HQL,Griffin
  • 元数据管理:Atlas

2. 384 Atlas文档四个大章节

  • 入门
  • 安装+集成
  • 使用
  • 编译

3. 第一章 元数据管理

3-1. 385 Atlas介绍

  1. Atlas 功能:
    • 数据字段: 构建其数据资产目录,并对资产进行分类和管理;如total_money :所有订单的总金额;数据字典里面可以查到几乎所有的库的释义,表的介绍,字段的解释说明。
    • 血缘追溯,定位数据问题。
      表与表的血缘依赖
      chrome_4sNXC8H3qV.png
      字段与字段的血缘依赖
      chrome_wAoOvgKgPo.png

3-2. 386 架构原理

chrome_OuE95lexmj.png
chrome_OuE95lexmj.png

4. 第二章 安装及使用

4-1. 387 准备——hbase搭建

4-2. 388 准备-solr安装

  1. #下载 
  2. wget http://archive.apache.org/dist/lucene/solr/5.2.1/solr-5.2.1.tgz 
  3. #解压 
  4. tar -zxvf solr-5.2.1.tgz -C /opt/module/ 
  5. #修改solr.in.sh文件 
  6. vim bin/solr.in.sh 
  7. ZK_HOST="hadoop102:2181,hadoop103:2181,hadoop104:2181" 
  8. SOLR_HOST="hadoop102" 
  9. SORL_PORT=8983 
  10. # 分发solr,进行cloud模式部署 
  11. xsync solr 
  12. # 分发完毕后,分别对hadoop103,hadoop104的solr.in.sh编辑SOLR_HOST修改为对应的主机名 
  13. # 对三台节点分别进行启动;启动前先启动zk 
  14. bin/solr start 
  15. # 启停脚本 
  16. #!/bin/bash 
  17. case $1 in 
  18. "start"){ 
  19. for i in hadoop102 hadoop103 hadoop104 
  20. do  
  21. ssh $i "/opt/module/solr/bin/solr start" 
  22. done 
  23. };; 
  24. "stop"){ 
  25. for i in hadoop102 hadoop103 hadoop104 
  26. do  
  27. ssh $i "/opt/module/solr/bin/solr stop" 
  28. done 
  29. };; 
  30. esac 

4-3. 389 元数据管理Atlas搭建

  1. #解压安装 
  2. #修改配置文件 
  3. vim atlas-appliation.properties 
  4. #修改atlas存储数据主机 
  5. atlas.graph.storage.hostname=hadoop102:2181,hadoop103:2181,hadoop104:2181 
  1. #集成hbase:添加hbase配置文件到atlas的安装目录 
  2. ln -s /opt/module/hbase/conf/ /opt/module/atlas/conf/hbase/ 
  3. ## 修改atlas-env.sh添加HBASE_CONF_DIR 
  4. vim atlas-env.sh 
  5. ### 添加Hbase配置文件路径 
  6. export HBASE_CONF_DIR=/opt/module/atlas/conf/hbase/conf 
  7.  
  8. #集成solr 
  9. vim atlas-application.properties 
  10. ##修改如下配置 
  11. atlas.graph.index.search.solr.zookeeper-url="hadoop102:2181,hadoop103:2181,hadoop:104:2181" 
  12. ## 将自带的solr文件夹拷贝到外部solr集群的各个节点 
  13. [atgyugy@hadoop102 conf]$ cp -r /opt/module/atlas/conf/solr /opt/module/solr/ 
  14.  
  15. ## 进入/opt/module/solr路径,修改拷贝过来的配置文件名称为atlas_conf 
  16. [atgyugy@hadoop102 conf]$ mv solr atlas_conf 
  17.  
  18. ## 在cloud模式下,启动solr(均需提前启动zookeeper集群),并创建collection 
  19.  
  20. bin/solr create -c vertex index -d /opt/module/solr/atlas_conf -shards 3 -replicationFactor 2 
  21. bin/solr create -c edge index -d /opt/module/solr/atlas_conf -shards 3 -replicationFactor 2 
  22. bin/solr create -c fulltext index -d /opt/module/solr/atlas_conf -shards 3 -replicationFactor 2 
  23.  
  24. -shards 3:标识该集合分片数为3 
  25. -replicationFactor 2:表示每个分片数都有2个备份 
  26. vertex_index,edge_index,fulltext_index:标识集合的名称 
  27.  
  28. ##删除集合 
  29. bin/solr delete -c ${collection_name} 

效果
chrome_K2gQJIuTmc.png

  1. #集成kafka 
  2. ## 进入/opt/module/atlas/conf 目录修改配置文件atlas-application.properties 
  3. vim atlas-application.properties 
  4.  
  5. ####Notification Configs ####### 
  6. atlas.notification.embedded=false 
  7. atlas.kafka.data=/opt/module/kafka/logs 
  8. atlas.kafka.zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181 
  9. atlas.kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092 
  10. atlas.kafka.zookeeper.session.timeout.ms=4000 
  11. atlas.kafka.zookeeper.connection.timeout.ms=2000 
  12.  
  13. atlas.kafka.enable.auto.commit=true 
  14.  
  15. ## 启动kafka集群并创建topic 
  16. bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka --create --replication-factor 3 --partitions 3 --topic _HOATLASOK 
  17. bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka --create --replication-factor 3 --partitions 3 --topic ATLAS_ENTITIES 
  18.  
  19. #atlas其他配置 
  20. ##进入atlas conf目录 
  21. vim atlas-application.properties 
  22.  
  23. #####Server Properties ##### 
  24. atlas.reset.address=http://hadoop102:21000 
  25. ## IF enabled and set to true,this will run setup setps whe the server starts 
  26. atlas.server.run.setup.on.start=false 
  27.  
  28. #####Entity Audit Confits ##### 
  29. atlas.audit.hbase.zookeeper.quorum=hadoop102:2181,hadoop103:2181,hadoop104:2181 
  30.  
  31. ## 记录性能指标修改atlas-log4j.xml 
  32. ###去掉以下代码注释 
  33. <appender name="perf_appender" class="org.apache.log4j.DailyRollingFileAppender"> 
  34. <param name="file" value="${atlas.log.dir}/atlas_perf.log" /> 
  35. <param name="datePattern" value="'.'yyyy-MM-dd" /> 
  36. <layout class="org.apache.log4j.PatternLayout"> 
  37. <param name="ConversionPattern" value="%d|%t|%m%n" /> 
  38. </layout> 
  39. </appender> 
  40. <logger name="org.apache.atlas.perf" additivity="false"> 
  41. <level value="debug" /> 
  42. <appender-ref ref="perf_appender" /> 
  43. </logger> 
  44.  

4-4. 390 元数据管理_atlas集成hive

  1. # 修改atlas-application配置文件 
  2. vim atlas-application.properties 
  3. ####Hive Hook Confifgs ##### 
  4. atlas.hook.hive.synchronous=false 
  5. atlas.hook.hive.numRetries=3 
  6. atlas.hook.hive.queueSize=10000 
  7. atlas.cluster.name=primary 
  8. #将atlas-application.properties复制到/opt/module/hive/conf下 
  9. cp /opt/module/atlas/conf/atlas-application.propertie /opt/module/hive/conf/ 
  10.  
  11. ## 解压apache-atlas-2.0.0-hive-hook.tar.gz 到/opt/module 
  12. tar -zxvf apache-atlas-2.0.0-hive-hook.tar.gz -C /opt/module/ 
  13. ## 剪切hook和hook-bin 目录到/opt/module/atlas文件夹中 
  14. mv /opt/module/apache-atlas-hive-hook-2.0.0/hook-bin/ /opt/module/atlas/ 
  15. mv /opt/module/apache-atlas-hive-hook-2.0.0/hook /opt/module/altas/ 
  16.  
  17. ## atlas-application.properties 配置文件加入到atlas-plugin-classloader-1.10.0.jar中 
  18. [atgyugy@hadoop102 hive]$ zip -u /opt/module/atlas/hook/hive/atlas-plugin-classloader-2.0.0.jar /opt/module/atlas/conf/atlas-application.propertie 
  19. [atgyugy@hadoop102 hive]$ cp /opt/module/atlas/conf/atlas-application.propertie /opt/module/hive/conf/ ## 原因:之歌配置不能参照官网,讲配置文件拷到hive的conf中,参考官网做法一直读取不到atlas-application.properties文件,读了源码发现是在classpath读取的这个文件,所以把它压倒jar里面 
  20.  
  21. ## 修改/opt/module/hive/conf/hive-site.xml文件增加atlas hook配置 
  22. vim hive-site.xml 
  23. <property> 
  24. <name>hive.exec.post.hooks</name> 
  25. <value>org.apache.atlas.hive.hook.HiveHook</value> 
  26. </property> 
  27.  
  28. vim hive-env.sh 
  29.  
  30. ## 在tez 引擎依赖的jar包后面最佳hive插件相关的jar包 
  31.  
  32. export HIVE_AUX_JARS_PATH=/opt/module/atlas/hook/hive 

4-5. 391 atlas启动特慢

先把依赖zk,hadoop,kafka,hbase,solr启动

  1. # 启动atlas 
  2. bin/altas_start.py 
  3. ll -rt #以时间顺序排序文件 
  4. tail -f logs/application.log # 即使控制台启动完成但是日志还在生成,启动还是没有完成,需要等到日志不跳了 

4-6. 392 元数据管理导入hive元数据

  1. # 启动hive  
  2. hive(default) >show databases; 
  3. hive(default) >use gmall; 
  4. #在/opt/module/atlas/hook-bin 路径,讲hive元数据导入到atlas 
  5. ./import-hive.sh ##中间有很多info级别的404日志,问题不大因为是通过rest api方式把数据发送到kafka,atlas再消费kafka写入。 

导入成功
chrome_PZe6LVQk0F.png

4-7. 393 元数据管理atlas的常用配置

  1. 配置内存
  1. # 内存配置修改atlas-env.sh 
  2. export ATLAS_SERVER_OPTS="-server -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+PrintTenuringDistribution -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpPath=dumps/atlas_server.hprof -Xloggc:logs/gc-work.log -verbose:gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1m -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps" 
  3.  
  4. # 建议JDK1.7使用以下配置 
  5. export ATLAS_SERVER_HEAP="-Xms15360m -Xmx15360m -XX:MaxNewSize=3072m -XX:PermSize=100M -XX:MaxPermSize=512m" 
  6. # 建议JDK1.78使用以下配置 
  7. export ATLAS_SERVER_HEAP="-Xms15360m -Xmx15360m -XX:MaxNewSize=5120m -XX:PermSize=100M -XX:MaxPermSize=512m" 

-XX:SoftRefLRUPolicyMSPerMB 参数对管理具有许多并发用户的查询繁重工作负载的GC性能特别有用

  1. 配置用户名密码

Atlas支持FIle,Kerberos,LDAP三种身份验证方法
通过修改atlas-application.properties文件开启或者关闭三种验证方式

  1. atlas.authentication.method.kerberos=true|false 
  2. atlas.authentication.method.ldap=true|false 
  3. atlas.authentication.method.file=true|false 
  4.  
  5. # 查看用户名密码conf/users-credentials.propertie 
  6. vim users-credentials.propertie 
  7. #username=group::sha256-password #这是用户配置的格式 
  8. admin=Admin::8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 
  9. rangertagsync=RANGER_TAG_SYNC::e3f67.....fb9d 
  10. ## admin使用户名Admin是组;sha256是密码加密方式;可以反解密8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918是密码"admin"加密后的一串字符。 

4-8. 394 元数据管理Atals初体验

模糊搜索不太准:有时候可以查到有时候不可以

如下:ods_log表

chrome_nBdS8Vh2xs.png
chrome_nBdS8Vh2xs.png

4-9. 395 元数据管理——血缘关系案例

  • 导入血缘关系:光靠import不能智能导入数据==》需要从新跑一遍azkaban任务调度的所有脚本流程=》生成血缘关系

4-10. 396 元数据管理——血缘关系追溯

血缘追溯截图:hive-hook捕获任务事件字段与字段之间的关系发到kafka;仅限于hive的任务.sparkSQL没有很好的钩子(hook)
chrome_pFtMQfYbJg.png

4-11. 397 spark监控不可用

spark-hook(开源项目非官方)的代码有bug
chrome_bHHA0UotGZ.png

4-12. 398 元数据管理——Atlas API和编译

4-12-1. 编译

4-12-1-1. maven安装
  1. #1. maven下载 
  2. wget https://maven.apache.org/download.cgi 
  3. #2.maven解压 
  4. tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /opt/module/ 
  5. #3. 做软连 maven->apache-maven-3.6.1 
  6. #4. 添加环境变量 
  7. vim /etc/profile 
  8. export MAVEN_HOME=/opt/module/maven 
  9. export PATH=$PATH:$MAVEN_HOME/bin 
  10. #5. 测试maven 
  11. source /etc/profile 
  12. mvn -v 
  13. #6、 把镜像改成阿里云 
4-12-1-2. 编译atlas
  1. #1. 获取atlas源码 
  2. #2. 下载atlas依赖及调整maven内存 
  3. export MAVEN_OPTS="-Xms2g -Xmx2g" 
  4. mvn clean -DskipTests install 
  5. mvn clean -DskipTests package -Pdis 
  6. ##一定要在atlas源码路径下执行 
  7. #3.获取编译后的安装包 
  8. cd distro/target/ 
  9. mv apache-atlas-2.0.0-server.tar.gz /opt/software/ 
  10. mv apache-atlas-2.0.0-hive-hook.tar.gz /opt/software/ 
  11.  
  12. ## 执行时间比较长,会下载很多依赖,期间如果报错可能是因为Timeout造成网络中断重试即可,好多包国内镜像没有。 

4-13. 399 元数据管理-总结

介绍-架构-安装-使用(特性血缘关系)

5. 400 数据治理 三大模块之数据安全总结

ranger 的作用
ranger的架构(solr只有用到ranger审计功能才需要安装)
ranger安装:插件安装
ranger使用:hive的表基本权限管理,数据脱敏展示。

5-1. 401 数据治理之数据质量总结(数据质量管理就是HQL等数据处理)

数据质量的高低代表了该数据满足数据消费者期望的成都,这种成都基于他们对数据的使用预期,主要分为数据的健康标准量化,监控和保障。

5-1-1. 标准

  • 数据完整性:数据不存在大量的缺失值,不缺少某一日期/部门/地点等部分维度的数据,同事在ETL过程中英保证数据的完整不丢失。验证数据时总数应符合正常规律时间推移,记录数总数的增长符合正常的趋势。
  • 数据一致性:数仓各层的数据,应与上一层保持数据一致,最终经过数据清洗转化(ETL)的宽表/指标能和数据源保持一致。
  • 数据不重复性:一个数据集当中同一条数据记录不能出现多次,数据不能大量重复冗余,保证数据的唯一性。

5-1-2. 解决方案

shell命令和hive脚本的方式,通过验证增量数据的记录数,全表空值记录数,全表重复值记录数是否在合理的范围之内,以及验证数据来源表和目标表一致性,确定当日的数据是否符合健康标准,达到数据质量的监控和管理。

Griffin数据质量解决方案管理问题
chrome_B9DVDO08rL.png

shell和hql数据质量管理解决方案:和ods比较一致:空值,重复,总数三方面比较。
chrome_1m0UsyMcht.png

数据质量频率KPI要求解决:
chrome_GRQ88PAk6O.png

5-2. 402 数据治理-元数据管理总结

5-3. 403 数据治理-总结

5-3-1. 离线数仓搭建阶段:

搭框架/集群->建立离线数仓->自动化调度/宽表/建模/ETL/BI->数据仓库成型,数据治理-->数据中台/数据湖/数据交换平台

加上实时 spark+flink

sh,sql,python->spark,flink=>使用多的

chrome_9f3e7kXPI3.png
chrome_9f3e7kXPI3.png

6. 数据质量

6-1. 404 数据质量Griffin介绍

  • 编译难
  • 数据对比不准确
  • 不支持spark3版本

6-2. 405 数据质量概述:肯定不是100%准确的。

你的用户:数据分析师,经理,普通员工,程序员拿你的数据会根据他的数据对比有一个对比结果评估准确性,因而对你数据质量有要求。

44fbed20cf4d9fa2ce3d571f0897265f.png
44fbed20cf4d9fa2ce3d571f0897265f.png

  1. 在数据丢了的问题时:指落地hdfs过程后丢了:dt进行分区,修复脚本:删除该分区所有数据重新导入该分区数据
  2. 数据重复导入问题:分区表:删除该分区所有数据,从新导入该分区数据 或者insert overwrite ...select * from 重复表 group by keys;全量表重复:再导一次。
  3. 有一个表计算完了,发现不符合正常的规律。
    用Atlas追踪血缘关系,逐层定位数据质量问题所在,测试原有脚本或者数据源是否发生改变,维护脚本和数据。

6-3. 406 数据质量:发现数据问题的数据标准判定

  • 完整性:保证不丢数据,关键字段无null值,保证数据记录数符合短期和长期的增长规律

  • 一致性:前后两层(数据源表和目标表)相同的数据需要保证值一致的。

  • 不重复性:同一条记录不重复
    orders记录
    10001 丝袜 3块 wsl 深圳 18888****
    10001 丝袜 3块 gxd 深圳 18888*****

    唯一标识不重复(10001)

6-4. 407 数据质量解决方案

ods-->dwd--->dws---->dwt-->ads

  1. ads层:
    增量记录数
    全量记录数
    空值
    重复值需要验证(对不为空的字段校验即可):分两种,增量表,全量表
    没有上层源数据比较一致性。

  2. dwd需要一致性校验,重复

  3. dws,dwt 基本和ods保持一致

  4. ads 需要定制比较校验。

6-5. 408 数据质量——ods层数据校验通用脚本

  1. #1. 创建检查脚本文件夹 
  2. mkdir -p data_check/sh 
  3. pwd 
  4. #2. HIVE中创建数据质量检查记录表,记录数据校验的各个指标 
  5. hive 
  1.  
  2. -- 创建数据库,用于存放数据质量校验的结果数据 
  3. hive> create database datacheck; 
  4. -- 创建数据表,用于存放ods层的数据校验结果 
  5. hive> create table datacheck.table_count_add_standard(data_date string comment '数据时间分区dt',database_name string comment '库名',table_name string comment '表名', table_type string comment '表类型(全量/增量)',add_count bigint comment '当日增量数据的记录数',null_count bigint comment '表控制记录数',duplicate_count bigint comment '表重复值记录数', total_count bigint comment '全表记录数'); 
  6. hive>quit; 
  1. #3. 在data_check/sh目录下创建数据检验增量记录表通用shell脚本 
  2. vim increment_data_chek_public.sh 
  3. #!/bin/bash 
  4. #增量数据所在的日期分区 
  5. do_date=$1 
  6. #校验数据的表名 
  7. table_name=$2 
  8. #需要校验控制的列名,以逗号分隔 
  9. null_column=$3 
  10. #初始化SQL查询语句 
  11. null_where_sql_str='' 
  12. #将控制检验字符串切成列名数组 
  13. array=(${null_column//,/}) 
  14. #遍历数组,拼接空值查询条件 
  15. for(( i=0;i<${#array[@]};i++)) do 
  16. if [ $i -eq 0 ];then 
  17. null_where_sql_str=" where ${array[i]} is null " 
  18. else  
  19. null_where_sql_str="$null_where_sql_str or ${array[i]} is null " 
  20. fi 
  21. done; 
  22. echo "------------校验增量记录数-------------------------" 
  23. #执行当日增量数据记录数量SQL查询语句 
  24. add_count_query_result=`hive -e "select count(*) from gmall $table_name where dt='$do_date'"` 
  25. #去除当日增量数据记录数量 
  26. add_count=${add_count_query_result:3} 
  27. echo "----------------------------检验全表记录数------------------" 
  28. #执行当日全表数据记录数量SQL查询语句 
  29. total_count_query_result=`hive -e "select count(*) from gmall.$table_name"` 
  30. #取出档期全量数据记录数量 
  31. total_count=${total_count_query_result:3} 
  32. echo "----------------检验控制记录数----------------" 
  33. #执行全表空值数据记录数量SQL查询语句 
  34. table_null_query_result=`hive -e "select count(*) from gmall.$table_name $null_where_sql_str"` 
  35. #取出全表空值数据记录数量 
  36. null_count=${table_null_query_result:3} 
  37. echo "--------------------------------检验重复值记录数----------------------------------------------------------------" 
  38. #执行全表重复值的记录数量SQL查询语句 
  39. table_duplicate_query_result=`hive -e "select sum(tmp.duplicate_count) as duplicate_sum from (select count(*) as duplicate_count from gmall.$table_name group by $null_column having count(*)>1)as tmp" 
  40. #取出全表重复值数据记录数量 
  41. duplicate_count=${table_duplicate_query_result:3} 
  42. echo "-------------------插入所有结果数据-------------" 
  43. hive -e "insert into tdatacheck.table_count_add_standard values('$do_date','gmall','$table_name','increment_table','$add_count','$null_count','$duplicate_count','$total_count')" 
  44.  

6-6. 409数据质量ods层脚本增量记录数校验测试。

  1. chmod 777 increment_data_check_public.sh 
  2. ./increment_data_check_public.sh 2020-06-14 ods_activity_rule id,activity_id 

6-7. 410数据质量ods层脚本全量记录数校验测试。

  1. #只不过拷贝上述增量脚本的后半部分,去掉增量查询的语句,插入语句修改为如下:然后执行新脚本total_data_check_publick.sh。 
  2. hive -e "insert into tdatacheck.table_count_add_standard values('$do_date','gmall','$table_name','total_table','null','$null_count','$duplicate_count','$total_count')" 

chrome_g176lQUMnN.png
chrome_g176lQUMnN.png

6-8. 411ods层数据校验:需要检查的表;可用azkaban分开调度执行检查

  1. vim ods_data_check.sh 
  2. #!/bin/bash 
  3. data_date=$1 
  4. #增量检查 
  5. #订单详情表 
  6. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_detail id,order_id,user_id,sku_id,sku_name,order_price,sku_num,create_time 
  7. #用户表 
  8. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_user_info id,name,birthday,gender,email,user_level,create_time,operate_time 
  9. #支付流水表 
  10. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_payment_info id,out_trade_no,order_id,user_id,alipay_trade_no,total_amount,subject,payment_type,payment_time 
  11. #订单状态表 
  12. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_status_log id,order_id,order_status,operate_time 
  13. #商品评论表 
  14. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_comment_info id,user_id,sku_id,spu_id,order_id,appraise,create_time 
  15. #退单表 
  16. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods_order_refund_info id,user_id,order_id,sku_id,refund_type,refund_Num,refund_ammount,refund_reason_tyupe,create_time 
  17. #活動點單關聯表 
  18. /opt/module/data_check/sh/increment_data_check_public.sh $data_date ods__activity_order id,activity_id,order_id,crate_time 
  19.  
  20. #全量检查 
  21. #订单表 
  22. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_order_info id,final_total_amount,order_status,user_id,out_trade_no,create_time,operate_time,province_id,benefit_reduce_amount,original_total_amount,feight_fee 
  23. #SKU 商品表 
  24. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_sku_info id,spu_id,price,sku_name,sku_desc,weight,tm_id,category3_id,create_time 
  25. #商品一级分类表 
  26. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category1 id,name 
  27. #商品二级分类表 
  28. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category2 id,name,category1_id 
  29. #商品三级分类表 
  30. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_category3 id,name,category2_id 
  31. #品牌表 
  32. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_trademark tm_id,tm_name 
  33. #SPU商品表 
  34. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_spu_info id,spu_name,category3_id,tm_id 
  35. #加购表 
  36. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_cart_info id,user_id,sku_id,cart_price,sku_num,sku_name,create_time,operate_time,is_ordered,order_time 
  37. #商品收藏表 
  38. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_favor_info id,user_id,sku_id,spu_id,is_cancel,create_time,cancel_time 
  39. #优惠券领用表 
  40. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_coupon_use id,coupon_id,user_id,order_id,coupon_status,get_time,using_time,used_time 
  41. #优惠券表 
  42. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_coupon_info id,coupon_name,coupon_type,condition_amount,condition_num,activity_id,benefit_amount,benefit_discount,create_time,range_type,spu_id,tm_id,category3_id,limit_num,operate_time,expire_time 
  43. #活动表 
  44. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_activity_info id,activity_name,activity_type,start_time,end_time,create_time 
  45. #优惠规则表 
  46. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_activity_rule id,activity_id,condition_amount,condition_num,benefit_amount,benefit_discount,benefit_level 
  47. #编码字典表 
  48. /opt/module/data_check/sh/total_data_check_public.sh $data_date ods_base_dic dic_code,dic_name,parent_code,create_time,operate_time 

6-9. 412 DWD层数据校验建表

  1. -- 1. 创建数据表,用于存放dwd层的数据校验结果 
  2. hive> create table datacheck.dwd_table_data_check( 
  3. data_date string comment '数据时间分区dt', 
  4. database_name string comment '库名', 
  5. source_table_name string comment '数据源表表名', 
  6. source_column string comment '数据源表字段名', 
  7. target_table_name string comment '数据目标表表名', 
  8. target_column string comment '数据目标表字段名', 
  9. consistent_data_count bigint comment '全表数据一致记录数', 
  10. source_table_count bigint comment '数据源表全表记录数', 
  11. target_table_count bigint comment '数据目标表全表记录数', 
  12. target_duplicate_count bigint comment '数据目标表重复记录数' 
  13. ); 
  14. hive>quit; 

6-10. 413 dwd层数据质量校验脚本

  1. #2. 创建校验脚本 
  2. vim table_consistent_check_public.shell 
  3. #!/bin/bash 
  4. #增量数据所在的日期分区 
  5. do_date=$1 
  6. #校验数据原表的表名 
  7. source_table_name=$2 
  8. #校验数据源表的字段(与目标表顺序一致才能对比亮哥哥字段) 
  9. source_column=$3 
  10. #校验数据目标表的表名 
  11. target_table_name=$4 
  12. #校验数据目标表的字段(与原表顺序一致才能对比两个字段) 
  13. target_column=$5 
  14. #初始化SQL语句 
  15. join_on_sql_str='' 
  16. #将校验数据源表的字段切割成列名数组 
  17. source_column_array=(${source_column//,/ }) 
  18. #将校验数据目标表的字段切成列名数组 
  19. target_column_array=(${target_column//,/ }) 
  20. #遍历数组,拼接表关联条件,输入字段全部关联 
  21. for(( i=0;i<${#source_column_array[@]};i++ )) do 
  22. if [ $i -eq 0 ]; then 
  23. join_on_sql_str=" on $source_table_name.${source_column_array[i]}=$target.table_name.${target_column_array[i]} " 
  24. else 
  25. join_on_sql_str="$join_on_sql_str and $source_table_name.${source_column_array[i]}=$target_table_name.${target_column_array[i]}" 
  26. fi 
  27. done; 
  28.  
  29. echo "--------ods-dwd 一致性检查-------" 
  30. #执行数据源表和目标表关联查询sql语句,查询数据一致性的条数 
  31. consistent_data_query_result=`hive -e "select count(*) from gmall.$source_table_name join gmall.$target_table_name $join_on_sql_str"` 
  32. #取出全表查询数据一致的条数 
  33. consistent_data_count=${consistent_data_query_result:3} 
  34. echo "-------ods 层记录条数-------" 
  35. #执行查询数据源表的记录条数 
  36. source_table_query_result=`hive -e "select count(*) from gmall.$source_table_name"` 
  37. #取出全表数据源表的记录条数 
  38. source_table_count=${source_table_query_result:3} 
  39. echo "---------dwd层记录条数-------" 
  40. # 执行查询数据目标表的记录条数 
  41. target_table_query_result=`hive -e "select count(*) from gamll.$target_table_name"` 
  42. # 取出全表数据目标表的记录条数 
  43. target_table_count=${target_table_query_result:3} 
  44.  
  45. #执行全表重复值的记录数量sql查询语句 
  46. table_duplicate_query_result=`hive -e "select sum(tmp.duplicate_count)as duplicate_sum from (select count(*) as duplicate_count from gmall.$target_table_name group by $target_column having count(*) >1 ) as tmp"` 
  47. #取出全表重复值的数据记录数量 
  48. duplicate_count=${table_duplicate_query_result:3} 
  49.  
  50. #将所有数据检验结果插入到表中 
  51.  
  52. hive -e "insert into datacheck.dwd_table_data_check value('$do_date','gmall','$source_table_name','$source_column',$target_table_name','$target_column','$consistent_data_count','$source_table_count','$target_table_count','$duplicate_count')" 

6-11. 414 数据质量dwd层数据一致性校验

  1. #校验 
  2. ./table_consisitent_check.sh 2020-06-14 ods_base_province name dwd_dim_base_profince province_name 

需要校验的dwd层各表:
1.优惠券信息表2.订单明细事实表3.支付事实表4.退款事实表5.评价事实表6.加购事实表,7.收藏事实表。
chrome_CPAW3uROQp.png

6-12. 415 数据质量dwd层数据校验

总的脚本类似ods_data_check.sh

6-13. 416 数据质量-回顾

6-14. 417 数据质量dws层数据校验

1.因为dws层数据是聚合数据,无法一致性判断,和ods层一样只能通过表记录数和控制等判断,dws层将检验当日宽表记录数据是否在合理范围之内,关键字端是否为空的记录数量。
2.数据校验涉及表:每日会员行为,每日商品行为,每日活动行为,每日地区行为。

还用ods层的increm和total增量全量校验脚本去校验dws层4种行为的表数据校验。

6-15. 418 数据质量dwt层数据校验

dwt层是宽表,数据已经经过了一定的判断,过滤和转换等操作,因此在dwt层也将校验当日宽表记录数量是否符合合理范围之内,关键字段是否为空的记录的数量

需要校验的表:设备主题宽表,会员主题宽表,商品主题宽表,活动主题宽表,地区主题宽表。

只需要按照ods层的校验规则校验全量数据记录数。即使用ods层的total全量校验脚本进行校验。

6-16. 419 数据质量ads层数据校验介绍

6-17. 420 数据质量ads层数据校验-建表

orders-->ods:订单总金额

正常规律:70w<=订单总金额<=200w
10w<=订单商品数量<=20w

不同KPI需要定制化校验

  1. hive> create database datacheck; 
  2. --创建数据表,用于存放ads层的数据校验结果 
  3. hive>create table_datacheck.ads_table_data_check( 
  4. data_date string comment '数据时间分区dt', 
  5. database_name string comment '库名', 
  6. table_name string comment '表名', 
  7. column_name string comment '指标名', 
  8. healthy_value string comment '该指标合理值', 
  9. now_value bigint comment '该指标当前值', 
  10. is_healthy bigint comment '该指标是否合理:1合理/0不合理' 
  11. ); 
  12. hive>quit; 

6-18. 421 数据质量ads层数据:设备数校验脚本

  1. #!/bin/bash 
  2. #增量数据所在的日期分区 
  3. do_date=$1 
  4.  
  5. hive -e "insert into datacheck.ads_table_data_check select 
  6. temp.data_date, 
  7. temp.database_name, 
  8. temp.table_name, 
  9. temp.column_name, 
  10. temp.healthy_value, 
  11. temp.new_mid_count, 
  12. temp.is_healthy 
  13. from ( 
  14. select \"$do_date\" as data_date, 
  15. \"gmall\" as database_name, 
  16. \"ads_new_mid_count\" as table_name, 
  17. \"new_mid_count\" as column_name, 
  18. \"bigger than 300\" as healthy_value, 
  19. new_mid_count, 
  20. if(new_mid_count >300,1,0) as is_healthy 
  21. from gmall.ads_new_mid_count 
  22. ) as temp 
  23. " 

6-19. 422 数据质量总结-增加数据报警机制

  1. 数据质量:为谁服务
  2. 数据质量标准:
    • 完整性
    • 一致性
    • 不重复性
  3. 解决方案

6-20. 433 数据质量出现问题频率

  • 数据多了几条
  • 用户状态没更新
  • stock 库存金额等对不上

同一个表一个月出现两次问题:维护

三、presto

1. 319即席查询概述(presto,kylin。。。。:查询sql比较快的计算引擎,durid用于实时查询多)

一类固定的KPI查询:如日活
一类灵活的kPI查询:要求灵活,延迟低,数据分析师

2. 320 presto概述(OLAP:存储用hive,hdfs多)

  • SQL 查询引擎
  • 支持GB到PB字节
  • 秒级查询场景
  • 不能处理在线事务(OLTP-存储用关系库)

chrome_fqfMyugZnw.png
chrome_fqfMyugZnw.png

优点:跨数据源连表查询(因为统一了数据结构schemal+table结构)

缺点:普通的聚合与美元,变读数据边计算,再清内存再计算快;连表查会产生大量临时数据,速度会慢。

连表查询可以晚上先join在一起,第二天早上单标查询。

impala性能稍优于presto;但是presto数据源丰富支持hive,图数据库,关系数据库,redis等。

3. 321 presto安装部署server:coodirator和worker都是server;discovery和coodirator一起占用一个端口两个服务。

主要三个东西
服务端
CLI端
可视化端yanagishima-18.0.zip

  1. # 下载解压 
  2. wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.196/presto-server-0.196.tar.gz 
  3.  
  4. tar -zxvf presto-server-0.196.tar.gzip -C /opt/module/ 
  5.  
  6. #进入安装路径 
  7. # 创建数据存储目录 
  8. mkdir data 
  9.  
  10. # 创建配置文件存储目录 
  11. mkdir etc 
  12.  
  13. # 添加jvm.config配置文件 
  14. -servers 
  15. -Xmx16G 
  16. -XX:+UseG1GC 
  17. -XX:G1HeapRegionSize=32M 
  18. -XX:+UseGCOverheadLimit 
  19. -XX:+ExplicitGCInvokesConcurrent 
  20. -XX:+HeapDumpOnOutOfMemoryError 
  21. -XX:+ExitOnOutOfMemoryError 
  22.  
  23. # 配置HIVE数据源 
  24. #创建数据源配置目录文件 
  25. cd etc 
  26. mkdir catalog 
  27.  
  28. cd catalog/ 
  29.  
  30. vim hive.properties 
  31.  
  32. connector.name=hive-hadoop2 #指hadoop第二套API 
  33. hive.metastore.uri=thrift://hadoop102:9083 
  34.  
  35. # 分发prosto 安装目录到所有节点并分别配置node属性 
  36.  
  37. vim node.properties 
  38.  
  39. node.environment=production 
  40. node.id= 
  41. node.data-dir=/opt/module/presto/data 

4. 322 presto server配置

presto是coordinator节点和多个worker节点组成

  1. #一台节点配置coordinator 
  2. vim config.properties 
  3.  
  4. coordinator=true 
  5. node-scheduler.include-coordinator=false 
  6. http-server.http.port=8881 
  7. query.max-memory=50GB 
  8. discovery-server.enabled=true 
  9. discovery.uri=http://hadoop102:8881 
  10.  
  11. #其他节点配置woker 
  12. vim config.properties 
  13. coordinator=false 
  14. http-server.http.port=8881 
  15. query.max-memory=50GB 
  16. discovery.uri=http://hadoop102:8881 
  17.  
  18. #启动:日志目录$PRESTO_HOME/data/var/log 
  19. ./launcher start 

5. 323 presto cli 安装(jar包在linux实现了可执行的效果)

6. 324 presto cli 使用

  1. mv presto-cli-0.196-executable.jar prestocli 
  2. chmod +x prestocli 
  3. #启动prestocli 
  4. ./prestocli --server hadoop102:8881 --catalog hive --schema default # 本质底层是exec java -jar 命令 
  5. # presto 命令行操作 
  6. select * from schema.table limit 100 

7. 325 presto lzo说明:发现读lzo存储的数据报错:说明缺jar包依赖

parquet内部使用lzo? 列式存储

因为对接hive数据源:lzo依赖需要放到 plugin/hive-hadoop2/

  1. cp /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar $PRESTO_HOMEplugin/hive-hadoop2/ 
  2.  
  3. #分发jar包 
  4. cd $PRESTO_HOMEplugin/hive-hadoop2/ 
  5. xsync hadoop-lzo-0.4.20.jar 
  6.  
  7. # 重启presto服务 
  8.  
  9. # 重启客户端查询 
  10.  
  11. ## 发现读取parquet存储的lzo压缩的文件是ok的; 
  12. ## 直接读取lzo文件报错如下:presto不支持 

chrome_av4Y8IKM85.png
chrome_av4Y8IKM85.png

8. 326 presto web客户端

  1. # zip包指定解压目录-d参数,tar包解压目录-C参数 
  2. #解压可视化压缩包 
  3. unzip yanagishima-18.0.zip -d /opt/module/ 
  4. #配置文件追加配置 
  5. vim yanagishima.preperties  
  6.  
  7. jetty.port=7080 
  8. presto.datasources=atguigu-presto #给一个presto数据源(类似链接mysql某个数据库的源链接)起个名称 
  9. presto.coordinator.server.atguigu-presto=http://hadoop102:8881 
  10. catalog.atguigu-presto=hive 
  11. schema.atguigu-presto=default 
  12. sql.query.engines=presto 
  13.  
  14. # 启动web客户端 
  15. nohup bin/yanagishima-start.sh >y.log 2>&1 & 
  16.  

9. 327 presto 注意事项

  1. 列式存储presto对orc相对parquet支持更好;压缩建议snappy解压快查询快。即orc+snappy

  2. presto识别hive分区,建议优化分区存储

  3. 列式存储的查询sql优化:避免select *

  4. 加分区字段进行数据过滤

  5. group by字段安装字段distinct 数据多少进行降序排列

  1.  
  2. --good 
  3. select ...group by uid, gender 
  4. --bad 
  5. select ... group by gender,uid 
  1. order by 时使用limit

chrome_KuQAt3TQnh.png
chrome_KuQAt3TQnh.png

  1. join语句大表放左:join算法介绍

默认算法是broadcast join:左表切割到多个worker;右表广播复制到每个worker进行计算。如果右表太大就会可能内存溢出的错误。

hashjoin 是用于大表join大表的算法。按照join条件字段作为key取值该字段值进行hash:相同的值hash到同一个worker进行计算。

  1. 字段名是关键字用双引号分割不同于mysql的`

  2. timestamp (时间数据)进行比较的时候要加Timestamp关键字,mysql可以直接进行比较

  1. select t from a where t > timestamp '2017-01-01 00:00:00'; 
  1. 不支持insert overwrite写法:智能先delete在insert into;presto是查询引擎。

  2. 支持parquet查询不支持insert

posted @ 2021-03-11 16:29  编程未来  阅读(905)  评论(0编辑  收藏  举报