zoukankan      html  css  js  c++  java
  • 大数据仓库实战项目-电商数仓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

    money怎么来?
  • 相关阅读:
    Ubuntu16.04 + OpenCV源码 + Qt5.10 安装、配置
    DML和DQL
    初识MySql
    表单校验
    使用jQuery操作DOM
    jQuery中的事件与动画
    jQuery选择器
    初识jQuery
    JavaScript对象及初识OOP
    JavaScript操作DOM对象
  • 原文地址:https://www.cnblogs.com/bchjazh/p/14518794.html
Copyright © 2011-2022 走看看