Advertisement

32 大数据项目之电商数仓(业务数据采集平台)

阅读量:

文章目录

  • 第 1 章 电商业务简介

    • 1.1 电商业务流程

    • 1.2 电商常识(SKU、SPU)

    • 1.3 电商业务表结构

      • 1.3.1 订单表(order_info)
      • 1.3.2 订单详情表(order_detail)
      • 1.3.3 SKU 商品表(sku_info)
      • 1.3.4 用户表(user_info)
      • 1.3.5 商品一级分类表(base_category1)
      • 1.3.6 商品二级分类表(base_category2)
      • 1.3.7 商品三级分类表(base_category3)
      • 1.3.8 支付流水表(payment_info)
      • 1.3.9 省份表(base_province)
      • 1.3.10 地区表(base_region)
      • 1.3.11 品牌表(base_trademark)
      • 1.3.12 订单状态表(order_status_log)
      • 1.3.13 SPU 商品表(spu_info)
      • 1.3.14 商品评论表(comment_info)
      • 1.3.15 退单表(order_refund_info)
      • 1.3.16 加购表(cart_info)
      • 1.3.17 商品收藏表(favor_info)
      • 1.3.18 优惠券领用表(coupon_use)
      • 1.3.19 优惠券表(coupon_info)
      • 1.3.20 活动表(activity_info)
      • 1.3.21 活动订单关联表(activity_order)
      • 1.3.22 优惠规则表(activity_rule)
      • 1.3.23 编码字典表(base_dic)
      • 1.3.24 活动参与商品表(activity_sku)(暂不导入)
    • 1.4 时间相关表

  • 第 2 章 业务数据采集模块

    • 2.1 MySQL 安装

      • 2.1.1 安装包准备
      • 2.1.2 安装 MySql 服务器(切换到root用户)
      • 2.1.3 安装 MySql 客户端
      • 2.1.4 MySql 中 user 表中主机配置
    • 2.2 Sqoop 安装 (切换回dw用户)

      • 2.2.1 下载并解压
      • 2.2.2 修改配置文件
      • 2.2.3 拷贝 JDBC 驱动
      • 2.2.4 验证 Sqoop
      • 2.2.5 测试 Sqoop 是否能够成功连接数据库
    • 2.3 业务数据生成

      • 2.3.1 连接 MySQL
      • 2.3.2 建表语句
      • 2.3.2 生成业务数据
    • 2.4 同步策略

      • 2.4.1 全量同步策略
      • 2.4.2 增量同步策略
      • 2.4.3 新增及变化策略
      • 2.4.4 特殊策略
    • 2.5 业务数据导入 HDFS

      • 2.5.1 分析表同步策略
      • 2.5.2 脚本编写
  • 第 3 章 数据环境准备

    • 3.1 安装 Hive2.3

    • 3.2 Hive 集成引擎 Tez

      • 3.2.1 安装包准备
      • 3.2.2 集成 Tez
      • 3.2.3 测试
      • 3.2.4 注意事项
    • 更新集群启动脚本

    • 总结

第 1 章 电商业务简介

1.1 电商业务流程

在这里插入图片描述

1.2 电商常识(SKU、SPU)

在这里插入图片描述
在这里插入图片描述

1.3 电商业务表结构

在这里插入图片描述

1.3.1 订单表(order_info)

在这里插入图片描述
在这里插入图片描述

1.3.2 订单详情表(order_detail)

在这里插入图片描述

1.3.3 SKU 商品表(sku_info)

在这里插入图片描述

1.3.4 用户表(user_info)

在这里插入图片描述
在这里插入图片描述

1.3.5 商品一级分类表(base_category1)

在这里插入图片描述

1.3.6 商品二级分类表(base_category2)

在这里插入图片描述

1.3.7 商品三级分类表(base_category3)

在这里插入图片描述

1.3.8 支付流水表(payment_info)

在这里插入图片描述

1.3.9 省份表(base_province)

在这里插入图片描述

1.3.10 地区表(base_region)

在这里插入图片描述

1.3.11 品牌表(base_trademark)

在这里插入图片描述

1.3.12 订单状态表(order_status_log)

在这里插入图片描述

1.3.13 SPU 商品表(spu_info)

在这里插入图片描述

1.3.14 商品评论表(comment_info)

在这里插入图片描述

1.3.15 退单表(order_refund_info)

在这里插入图片描述
在这里插入图片描述

1.3.16 加购表(cart_info)

在这里插入图片描述

1.3.17 商品收藏表(favor_info)

在这里插入图片描述

1.3.18 优惠券领用表(coupon_use)

在这里插入图片描述

1.3.19 优惠券表(coupon_info)

在这里插入图片描述
在这里插入图片描述

1.3.20 活动表(activity_info)

在这里插入图片描述

1.3.21 活动订单关联表(activity_order)

在这里插入图片描述

1.3.22 优惠规则表(activity_rule)

在这里插入图片描述

1.3.23 编码字典表(base_dic)

在这里插入图片描述
在这里插入图片描述

1.3.24 活动参与商品表(activity_sku)(暂不导入)

在这里插入图片描述

1.4 时间相关表

在这里插入图片描述
在这里插入图片描述

第 2 章 业务数据采集模块

2.1 MySQL 安装

2.1.1 安装包准备

1)查看 MySQL 是否安装,如果安装了,卸载 MySQL

复制代码
    (1)查看 [dw@dw1 logs]$ rpm -qa|grep mysql
    (2)卸载 [dw@dw1 software]$ rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64

2)解压 mysql-libs.zip 文件到当前目录

复制代码
    [dw@dw1 software]$ unzip mysql-libs.zip

3)进入到 mysql-libs 文件夹下

复制代码
    [dw@dw1 mysql-libs]$ tar -xzvf mysql-connector-java-5.1.27.tar.gz

2.1.2 安装 MySql 服务器(切换到root用户)

1)安装 mysql 服务端

复制代码
    [root@dw1 mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

2)查看产生的随机密码

复制代码
    [root@dw1 mysql-libs]# cat /root/.mysql_secret

3)查看 mysql 状态

复制代码
    [root@dw1 mysql-libs]# service mysql status

4)启动 mysql

复制代码
    [root@dw1 mysql-libs]# service mysql start

2.1.3 安装 MySql 客户端

1)安装 mysql 客户端

复制代码
    [root@dw1 mysql-libs]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

2)链接 mysql

复制代码
    [root@dw1 mysql-libs]# mysql -uroot -puYNHCsXlmwtU_0pt

3)修改密码

复制代码
    mysql>SET PASSWORD=PASSWORD('123456');

4)退出 mysql

复制代码
    mysql>exit

2.1.4 MySql 中 user 表中主机配置

配置只要是 root 用户+密码,在任何主机上都能登录 MySQL 数据库。
1)进入 mysql

复制代码
    [root@dw1 mysql-libs]# mysql -uroot -p123456

2)显示数据库

复制代码
    mysql> show databases;

3)使用 mysql 数据库

复制代码
    mysql>use mysql;

4)展示 mysql 数据库中的所有表

复制代码
    mysql>show tables;

5)展示 user 表的结构

复制代码
    mysql>desc user;

6)查询 user 表

复制代码
    mysql>select User, Host, Password from user;

7)修改 user 表,把 Host 表内容修改为%

复制代码
    mysql>update user set host='%' where host='localhost';

8)删除 root 用户的其他 host

复制代码
    delete from user where Host='dw1.com';
    delete from user where Host='127.0.0.1'; 
    delete from user where Host='::1';

9)刷新并退出

复制代码
    mysql>flush privileges;		mysql>quit;

2.2 Sqoop 安装 (切换回dw用户)

2.2.1 下载并解压

1)下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
2)上传安装包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到 dw1的/opt/software 路径中
3)解压 sqoop 安装包到指定目录,如:

复制代码
    [dw@dw1 software]# tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ../module/

4)修改名字

复制代码
    [dw@dw1 module]# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop

2.2.2 修改配置文件

1) 进入到/opt/module/sqoop/conf 目录,重命名配置文件

复制代码
    [dw@dw1 conf]$ mv sqoop-env-template.sh sqoop-env.sh

2)修改配置文件

复制代码
    [dw@dw1 conf]$ vim sqoop-env.sh

增加如下内容

复制代码
    export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
    export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
    #export HIVE_HOME=/opt/module/hive
    #export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
    #export ZOOCFGDIR=/opt/module/zookeeper-3.4.10/conf
    #export HBASE_HOME=/opt/module/hbase

2.2.3 拷贝 JDBC 驱动

1)进入到/opt/software/mysql-libs 路径,解压 mysql-connector-java-5.1.27.tar.gz 到当前路径 (已解压)
2)进入到/opt/software/mysql-libs/mysql-connector-java-5.1.27 路径,拷贝 jdbc 驱动到 sqoop 的 lib 目录下。

复制代码
    [dw@dw1 mysql-connector-java-5.1.27]$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop/lib/

2.2.4 验证 Sqoop

我们可以通过某一个 command 来验证 sqoop 配置是否正确:

复制代码
    [dw@dw1 sqoop]$ bin/sqoop help
在这里插入图片描述

2.2.5 测试 Sqoop 是否能够成功连接数据库

[dw@dw1 sqoop]$ bin/sqoop list-databases --connect jdbc:mysql://dw1:3306/ --username root --password 123456
在这里插入图片描述

2.3 业务数据生成

2.3.1 连接 MySQL

在这里插入图片描述

2.3.2 建表语句

在这里插入图片描述

2.3.2 生成业务数据

1)在 dw1的/opt/module/目录下创建 db_log 文件夹

复制代码
    [dw@dw1 module]$ mkdir db_log/

2)把 gmall-mock-db-2020-03-16-SNAPSHOT.jar 和 application.properties 上传到 dw1的/opt/module/db_log 路径上。
3)根据需求修改 application.properties 相关配置

复制代码
    logging.level.root=info
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://dw1:3306/gmall?charac terEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    spring.datasource.username=root
    spring.datasource.password=123456
    logging.pattern.console=%m%n mybatis-plus.global-config.db-config.field-strategy=not_null
    #业务日期
    mock.date=2020-03-10
    #是否重置  1为删除,0为不删除
    mock.clear=1
    #是否生成新用户
    mock.user.count=50
    #男性比例
    mock.user.male-rate=20
    #收藏取消比例
    mock.favor.cancel-rate=10
    #收藏数量
    mock.favor.count=100
    #购物车数量
    mock.cart.count=10
    #每个商品最多购物个数
    mock.cart.sku-maxcount-per-cart=3
    #用户下单比例
    mock.order.user-rate=80
    #用户从购物中购买商品比例
    mock.order.sku-rate=70
    #是否参加活动
    mock.order.join-activity=1
    #是否使用购物券
    mock.order.use-coupon=1
    #购物券领取人数
    mock.coupon.user-count=10
    #支付比例 mock.payment.rate=70
    #支付方式 支付宝:微信 :银联
    mock.payment.payment-type=30:60:10
    #评价比例 好:中:差:自动
    mock.comment.appraise-rate=30:10:10:50
    #退款原因比例:质量问题 商品描述与实际描述不一致 缺货 号码不合适 拍错 不想 买了 其他
    mock.refund.reason-rate=30:10:20:5:15:5:5

4)并在该目录下执行,如下命令,生成 2020-03-10 日期数据:

复制代码
    [dw@dw1 db_log]$ java -jar gmall-mock-db-2020-03-16-SNAPSHOT.jar

5)在配置文件 application.properties 中修改

复制代码
    mock.date=2020-03-11
    mock.clear=0

6)再次执行命令,生成 2020-03-11 日期数据:

复制代码
    [dw@dw1 db_log]$ java -jar gmall-mock-db-2020-03-16-SNAPSHOT.jar

2.4 同步策略

在这里插入图片描述

2.4.1 全量同步策略

在这里插入图片描述

2.4.2 增量同步策略

在这里插入图片描述

2.4.3 新增及变化策略

在这里插入图片描述

2.4.4 特殊策略

在这里插入图片描述

2.5 业务数据导入 HDFS

2.5.1 分析表同步策略

在这里插入图片描述

2.5.2 脚本编写

1)在/home/dw/bin 目录下创建

复制代码
    [dw@dw1 bin]$ vim mysql_to_hdfs.sh
复制代码
    #!/bin/bash
    
    
    sqoop=/opt/module/sqoop/bin/sqoop
    do_date=`date -d '-1 day' +%F`
    
    if [[ -n "$2" ]]; then
    	do_date=$2
    fi
    
    
    
    import_data(){
    $sqoop import \
    --connect jdbc:mysql://dw1:3306/gmall \
    --username root \
    --password 123456 \
    --target-dir /origin_data/gmall/db/$1/$do_date \
    --delete-target-dir \
    --query "$2 and \$CONDITIONS" \
    --num-mappers 1 \
    --fields-terminated-by '\t' \
    --compress \
    --compression-codec lzop \
    --null-string '\ N' \
    --null-non-string '\ N'
    hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/gmall/db/$1/$do_date
    }
    
    import_order_info(){
    import_data order_info "select
    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
    from order_info
    where (date_format(create_time,'%Y-%m-%d')='$do_date'
    or date_format(operate_time,'%Y-%m-%d')='$do_date')"
    }
    
    import_coupon_use(){
    import_data coupon_use "select
    id,
    coupon_id,
    user_id,
    order_id,
    coupon_status,
    get_time,
    using_time,
    used_time
    from coupon_use
    where (date_format(get_time,'%Y-%m-%d')='$do_date'
    or date_format(using_time,'%Y-%m-%d')='$do_date'
    or date_format(used_time,'%Y-%m-%d')='$do_date')"
    }
    
    import_order_status_log(){
    import_data order_status_log "select
    id,
    order_id,
    order_status,
    operate_time
    from order_status_log
    where date_format(operate_time,'%Y-%m-%d')='$do_date'"
    }
    
    import_activity_order(){
    import_data activity_order "select
    id,
    activity_id,
    order_id,
    create_time
    from activity_order
    where date_format(create_time,'%Y-%m-%d')='$do_date'"
    }
    
    import_user_info(){
    import_data "user_info" "select
    id,
    name,
    birthday,
    gender,
    email,
    user_level,
    create_time,
    operate_time
    from user_info
    where (DATE_FORMAT(create_time,'%Y-%m-%d')='$do_date'
    or DATE_FORMAT(operate_time,'%Y-%m-%d')='$do_date')"
    }
    
    import_order_detail(){
    import_data order_detail "select
    od.id,
    order_id,
    user_id,
    sku_id,
    sku_name,
    order_price,
    sku_num,
    od.create_time
    from order_detail od
    join order_info oi
    on od.order_id=oi.id
    where DATE_FORMAT(od.create_time,'%Y-%m-%d')='$do_date'"
    }
    
    import_payment_info(){
    import_data "payment_info" "select
    id,
    out_trade_no,
    order_id,
    user_id,
    alipay_trade_no,
    total_amount,
    subject,
    payment_type,
    payment_time
    from payment_info
    where DATE_FORMAT(payment_time,'%Y-%m-%d')='$do_date'"
    }
    
    import_comment_info(){
    import_data comment_info "select
    id,
    user_id,
    sku_id,
    spu_id,
    order_id,
    appraise,
    comment_txt,
    create_time
    from comment_info
    where date_format(create_time,'%Y-%m-%d')='$do_date'"
    }
    
    import_order_refund_info(){
    import_data order_refund_info "select
    id,
    user_id,
    order_id,
    sku_id,
    refund_type,
    refund_num,
    refund_amount,
    refund_reason_type,
    create_time
    from order_refund_info
    where date_format(create_time,'%Y-%m-%d')='$do_date'"
    }
    # 全量
    import_sku_info(){
    import_data sku_info "select
    id,
    spu_id,
    price,
    sku_name,
    sku_desc,
    weight,
    tm_id,
    category3_id,
    create_time
    from sku_info
    where 1=1"
    }
    
    import_base_category1(){
    import_data "base_category1" "select
    id,
    name
    from base_category1
    where 1=1"
    }
    
    import_base_category2(){
    import_data "base_category2" "select
    id,
    name,
    category1_id
    from base_category2
    where 1=1"
    }
    
    import_base_category3(){
    import_data "base_category3" "select
    id,
    name,
    category2_id
    from base_category3
    where 1=1"
    }
    
    import_base_province(){
    import_data base_province "select
    id,
    name,
    region_id,
    area_code,
    iso_code
    from base_province
    where 1=1"
    }
    
    import_base_region(){
    import_data base_region "select
    id,
    region_name
    from base_region
    where 1=1"
    }
    
    import_base_trademark(){
    import_data base_trademark "select
    tm_id,
    tm_name
    from base_trademark
    where 1=1" }
    
    import_spu_info(){
    import_data spu_info "select
    id,
    spu_name,
    category3_id,
    tm_id
    from spu_info
    where 1=1"
    }
    
    import_favor_info(){
    import_data favor_info "select
    id,
    user_id,
    sku_id,
    spu_id,
    is_cancel,
    create_time,
    cancel_time
    from favor_info
    where 1=1"
    }
    
    import_cart_info(){
    import_data cart_info "select
    id,
    user_id,
    sku_id,
    cart_price,
    sku_num,
    sku_name,
    create_time,
    operate_time,
    is_ordered,
    order_time
    from cart_info
    where 1=1"
    }
    
    import_coupon_info(){
    import_data coupon_info "select
    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
    from coupon_info
    where 1=1"
    }
    
    import_activity_info(){
    import_data activity_info "select
    id,
    activity_name,
    activity_type,
    start_time,
    end_time,
    create_time
    from activity_info
    where 1=1"
    }
    
    import_activity_rule(){
    import_data activity_rule "select
    id,
    activity_id,
    condition_amount,
    condition_num,
    benefit_amount,
    benefit_discount,
    benefit_level
    from activity_rule
    where 1=1"
    }
    
    import_base_dic(){
    import_data base_dic "select
    dic_code,
    dic_name,
    parent_code,
    create_time,
    operate_time
    from base_dic
    where 1=1"
    }
    
    case $1 in
    "order_info")
    	import_order_info
    ;;
    "base_category1")
    	import_base_category1
    ;;
    "base_category2")
    	import_base_category2
    ;;
    "base_category3")
    	import_base_category3
    ;;
    "order_detail")
    	import_order_detail
    ;;
    "sku_info")
    	import_sku_info
    ;;
    "user_info")
    	import_user_info
    ;;
    "payment_info")
    	import_payment_info
    ;;
    "base_province")
    	import_base_province
    ;;
    "base_region")
    	import_base_region
    ;;
    "base_trademark")
    	import_base_trademark
    ;;
    "activity_info")
    	import_activity_info
    ;;
    "activity_order")
    	import_activity_order
    ;;
    "cart_info")
    	import_cart_info
    ;;
    "comment_info")
    	import_comment_info
    ;;
    "coupon_info")
    	import_coupon_info
    ;;
    "coupon_use")
    	import_coupon_use
    ;;
    "favor_info")
    	import_favor_info
    ;;
    "order_refund_info")
    	import_order_refund_info
    ;;
    "order_status_log")
    	import_order_status_log
    ;;
    "spu_info")
    	import_spu_info
    ;;
    "activity_rule")
    	import_activity_rule
    ;;
    "base_dic")
    	import_base_dic
    ;;
    "first")
    	import_base_category1
    	import_base_category2
    	import_base_category3
    	import_order_info
    	import_order_detail
    	import_sku_info
    	import_user_info
    	import_payment_info
    	import_base_province
    	import_base_region
    	import_base_trademark
    	import_activity_info
    	import_activity_order
    	import_cart_info
    	import_comment_info
    	import_coupon_use
    	import_coupon_info
    	import_favor_info
    	import_order_refund_info
    	import_order_status_log
    	import_spu_info
    	import_activity_rule
    	import_base_dic
    ;;
    "all")
    	import_base_category1
    	import_base_category2
    	import_base_category3
    	import_order_info
    	import_order_detail
    	import_sku_info
    	import_user_info
    	import_payment_info
    	import_base_trademark
    	import_activity_info
    	import_activity_order
    	import_cart_info
    	import_comment_info
    	import_coupon_use
    	import_coupon_info
    	import_favor_info
    	import_order_refund_info
    	import_order_status_log
    	import_spu_info
    	import_activity_rule
    	import_base_dic
    ;;
    esac

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)修改脚本权限

复制代码
    [dw@dw1 bin]$ chmod 777 mysql_to_hdfs.sh

3)初次导入

复制代码
    [dw@dw1 bin]$ mysql_to_hdfs.sh first 2020-03-10

4)每日导入

复制代码
    [dw@dw1 bin]$ mysql_to_hdfs.sh all 2020-03-11

第 3 章 数据环境准备

3.1 安装 Hive2.3

1)上传 apache-hive-2.3.0-bin.tar.gz 到/opt/software 目录下,并解压到/opt/module

复制代码
    [dw@dw1 software]$ tar -xzvf apache-hive-2.3.6-bin.tar.gz -C ../module/

2)修改 apache-hive-2.3.6-bin 名称为 hive

复制代码
    [dw@dw1 module]$ mv apache-hive-2.3.6-bin/ hive

3)将 Mysql 的 mysql-connector-java-5.1.27-bin.jar 拷贝到/opt/module/hive/lib/

复制代码
    [dw@dw1 module]$ cp /opt/software/mysql-libs/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar hive/lib/

4)在/opt/module/hive/conf 路径上,创建 hive-site.xml 文件

复制代码
    [dw@dw1 conf]$ vim hive-site.xml
复制代码
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    	<property>
    		<name>javax.jdo.option.ConnectionURL</name>
    		<value>jdbc:mysql://dw1:3306/metastore?createDatabaseIfNotExist=true</value>
    		<description>JDBC connect string for a JDBC metastore</description>
    	</property>
    	<property>
    		<name>javax.jdo.option.ConnectionDriverName</name>
    		<value>com.mysql.jdbc.Driver</value>
    		<description>Driver class name for a JDBC metastore</description>
    	</property>
    	<property>
    		<name>javax.jdo.option.ConnectionUserName</name>
    		<value>root</value>
    		<description>username to use against metastore database</description>
    	</property>
    	<property>
    		<name>javax.jdo.option.ConnectionPassword</name>
    		<value>123456</value>
    		<description>password to use against metastore database</description>
    	</property>
    	<property>
    		<name>hive.metastore.warehouse.dir</name>
    		<value>/user/hive/warehouse</value>
    	<description>location of default database for the warehouse</description>
    	</property>
    	<property>
    		<name>hive.cli.print.header</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>hive.cli.print.current.db</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>hive.metastore.schema.verification</name>
    		<value>false</value>
    	</property>
    	<property>
    		<name>datanucleus.schema.autoCreateAll</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>hive.metastore.uris</name>
    		<value>thrift://dw1:9083</value>
    	</property>
    </configuration>

注意:hive安装在哪个服务器节点thrift://dw1:9083中的主机名需要更换成相应的主机名
5)启动服务

复制代码
    [dw@dw1 hive]$ nohup bin/hive --service metastore &
    [dw@dw1 hive]$ nohup bin/hive --service hiveserver2 &

在这里插入图片描述
4)服务启动完毕后启动hive

复制代码
    [dw@dw1 hive]$ bin/hive

3.2 Hive 集成引擎 Tez

在这里插入图片描述
在这里插入图片描述

3.2.1 安装包准备

1)下载 tez 的依赖包:http://tez.apache.org
2)拷贝 apache-tez-0.9.1-bin.tar.gz 到 dw1 的/opt/software 目录
3)将 apache-tez-0.9.1-bin.tar.gz 上传到 HDFS 的/tez 目录下。

复制代码
    [dw@dw1 hive]$ hdfs dfs -mkdir /tez
    [dw@dw1 hive]$ hdfs dfs -put /opt/software/apache-tez-0.9.1-bin.tar.gz/ /tez

4)解压缩 apache-tez-0.9.1-bin.tar.gz

复制代码
    [dw@dw1 software]$ tar -zxvf apache-tez-0.9.1-bin.tar.gz -C /opt/module

5)修改名称

复制代码
    [dw@dw1 module]$ mv apache-tez-0.9.1-bin/ tez-0.9.1

3.2.2 集成 Tez

1)进入到 Hive 的配置目录:/opt/module/hive/conf
2)在 Hive 的/opt/module/hive/conf 下面创建一个 tez-site.xml 文件
添加以下内容

复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    	<property>
    		<name>tez.lib.uris</name>
    		<value>${fs.defaultFS}/tez/apache-tez-0.9.1-bin.tar.gz</value>
    	</property>
    	<property>
    		<name>tez.use.cluster.hadoop-libs</name>
    		<value>true</value>
    	</property>
    	<property>
    		<name>tez.history.logging.service.class</name>
    		<value>org.apache.tez.dag.history.logging.ats.ATSHistoryLoggingService</value>
    	</property>
    </configuration>

3)在 hive-env.sh 文件中添加 tez 环境变量配置和依赖包环境变量配置

复制代码
    [dw@dw1 conf]$ mv hive-env.sh.template hive-env.sh
    [dw@dw1 conf]$ vim hive-env.sh

底部添加以下内容

复制代码
    export TEZ_HOME=/opt/module/tez-0.9.1 #是你的 tez 的解压目录
    export TEZ_JARS=""
    for jar in `ls $TEZ_HOME |grep jar`; do
    	export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/$jar
    done
    for jar in `ls $TEZ_HOME/lib`; do
    	export TEZ_JARS=$TEZ_JARS:$TEZ_HOME/lib/$jar
    done
    export HIVE_AUX_JARS_PATH=/opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar$TEZ_JARS

3)将hive/conf中hive-site.xml 文件中添加如下配置,更改 hive 计算引擎

复制代码
    <property>
        <name>hive.execution.engine</name>
        <value>tez</value>
    </property>

3.2.3 测试

1)启动 Hive

复制代码
    [dw@dw1 hive]$ bin/hive

2)创建表

复制代码
    hive (default)> create table if not exists student( id int, name string);

3)向表中插入数据

复制代码
    hive (default)> insert into student values(1,"zhangsan");

4)如果没有报错就表示成功了

复制代码
    hive (default)> select * from student; 
    1 zhangsan

3.2.4 注意事项

1)运行 Tez 时检查到用过多内存而被 NodeManager 杀死进程问题:
在这里插入图片描述

2)解决方法:
(1)关掉虚拟内存检查,修改 yarn-site.xml

复制代码
    <property>
    	<name>yarn.nodemanager.vmem-check-enabled</name>
    	<value>false</value>
    </property>

(2)修改后一定要分发,并重新启动 hadoop 集群。

复制代码
    [dw@dw1 hadoop]$ xsync yarn-site.xml
    [dw@dw1 hadoop]$ cluster.sh stop
    [dw@dw1 hadoop]$ cluster.sh start

更新集群启动脚本

复制代码
    #!/bin/bash
    
    case $1 in
    "start"){
    	echo "-----------启动集群------------"
    	/opt/module/hadoop-2.7.2/sbin/start-dfs.sh
    	
    	ssh dw2 "/opt/module/hadoop-2.7.2/sbin/start-yarn.sh"
    	zk.sh start
    	
    	sleep 6s;
    
    	f1.sh start
    
    	kf.sh start
    	
    	sleep 6s;
    
    	f2.sh start
    	
    	nohup /opt/module/hive/bin/hive --service metastore & 
    };;
    "stop"){
    	echo "-----------停止集群------------"
    	
    	ps -ef | grep RunJar | grep -v grep | awk '{print \$2}' | xargs kill -kill
    	
    	f2.sh stop
    	
    	kf.sh stop
    	
    	sleep 6s;
    
    	f1.sh stop
    	
    	zk.sh stop
    	
    	ssh dw2 "/opt/module/hadoop-2.7.2/sbin/stop-yarn.sh"
    	
    	/opt/module/hadoop-2.7.2/sbin/stop-dfs.sh
    };;
    esac

总结

能够画出这些表
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~