项目实训第十一天

本文最后更新于:2021年7月23日 晚上


电信日志分析

数据导出

步骤

  1. 开启Hadooop

    1
    start-all.sh
  2. 进入MySQL,在MySQL中建表

    1
    2
    3
    4
    5
    6
    7
    8
    # 建库
    create database telecom;
    # 使用这个库
    use telecom;
    # 需要在库下建立事实表
    create table F_HTTP_APP_HOST( reporttime datetime, appType bigint, appSubtype bigint, userIP varchar(20), userPort bigint, appServerIP varchar(20), appServerPort bigint, host varchar(255), cellid varchar(20), attempts bigint, accepts bigint, trafficDL bigint, trafficUL bigint, retranUL bigint, retranDL bigint, failCount bigint, transDelay bigint);
    # 需要在库下建立受欢迎的APP的数据表
    create table D_H_HTTP_APPTYPE(hourid datetime, appType int, appSubtype int, attempts bigint, accepts bigint, succRatio double, trafficUL bigint, trafficDL bigint, totalTraffic bigint, retranUL bigint,retranDL bigint, retranTraffic bigint, failCount bigint, transDelay bigint);
  3. 利用Sqoop将数据导出

    1
    2
    3
    4
    # 导出事实表的数据
    sqoop export --connect jdbc:mysql://hadoop:3306/telecom --username root --password root --table F_HTTP_APP_HOST --export-dir '/user/hive/warehouse/telecom.db/f_http_app_host/000000_0' -m 1 --fields-terminated-by '|'
    # 导出受欢迎的APP的数据
    sqoop export --connect jdbc:mysql://hadoop:3306/telecom --username root --password root --table D_H_HTTP_APPTYPE --export-dir '/user/hive/warehouse/telecom.db/d_h_http_apptype/000000_1' -m 1 --fields-terminated-by '|'

可视化

概述

  1. 在实际开发过程中,在将数据处理完导出到MySQL之后,需要对数据进行直观展现,这个过程称之为可视化
  2. 目前市面上的可视化工具分为两类:BI工具和开源可视化工具。BI工具大部分都是收费的,所以在实际开发中,中小型公司一般会采用BI工具来降低开发成本,但是大型公司一般会使用开源的可视化框架或者会自定义可视化框架

HBase

简介

概述

  1. HBase由Yahoo!开发后来贡献给了Apache的一个基于Hadoop的、分布式的、可扩展的、能够存储到大量数据的非关系型数据库
  2. 当需要对大量的数据进行随机且实时的读写的时候,那么此时可以考虑使用HBase
  3. HBase能够管理非常大的表 - billions of rows X millions of columns(十亿行*百万列)
  4. HBase模仿了Google的BigTable来实现的,因此HBase和BigTable的实现原理一模一样,只是二者在底层的实现语言不一样。BigTable使用的是C语言,HBase使用的Java实现
  5. HBase依赖于HDFS来完成数据的存储过程

安装

Zookeeper安装

  1. 进入/opt目录下,上传Zookeeper的安装包

    1
    2
    3
    cd /opt
    rz
    # 选择上传Zookeeper的安装包
  2. 解压

    1
    tar -xvf apache-zookeeper-3.5.7-bin.tar.gz
  3. 重命名

    1
    mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7
  4. 进入Zookeeper的配置目录

    1
    cd zookeeper-3.5.7/conf/
  5. 编辑属性文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 复制文件
    cp zoo_sample.cfg zoo.cfg
    # 编辑文件
    vim zoo.cfg
    # 修改属性
    dataDir=/opt/zookeeper-3.5.7/tmp
    # 在文件末尾添加
    server.1=192.168.233.133:2888:3888
    server.2=192.168.233.134:2888:3888
    server.3=192.168.233.135:2888:3888
  6. 回到Zookeeper安装目录下,创建tmp目录

    1
    2
    3
    4
    5
    6
    # 回到Zookeeper安装目录下
    cd ..
    # 新建tmp目录
    mkdir tmp
    # 进到tmp中
    cd tmp
  7. 指定当前节点的编号

    1
    2
    3
    # 编辑文件
    vim myid
    # 在文件中添加在zoo.cfg文件中指定的编号
  8. 回到/opt目录下,远程拷贝给其他两个节点

    1
    2
    3
    cd /opt
    scp -r zookeeper-3.5.7 root@hadoop02:$PWD
    scp -r zookeeper-3.5.7 root@hadoop03:$PWD
  9. 修改第二个和第三个节点上的myid

    1
    2
    3
    cd /opt/zookeeper-3.5.7/tmp/
    vim myid
    # 修改对应的编号
  10. 修改环境变量

    1
    2
    3
    4
    5
    6
    vim /etc/profile.d/zookeeperhome.sh
    # 在文件中添加
    export ZOOKEEPER_HOME=/opt/zookeeper-3.5.7
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    # 保存退出,重新生效
    source /etc/profile.d/zookeeperhome.sh
  11. 启动Zookeeper

    1
    zkServer.sh start
  12. 查看Zookeeper的状态

    1
    2
    zkServer.sh status
    # 出现1个leader+2个follower就表示Zookeeper配置成功

HBase安装

  1. 进入/opt目录下,上传HBase的安装包

    1
    cd /optrz# 选择HBase安装包上传
  2. 解压

    1
    tar -xvf hbase-2.4.2-bin.tar.gz
  3. 进入HBase的配置目录

    1
    cd hbase-2.4.2/conf/
  4. 编辑文件

    1
    vim hbase-env.sh# 在文件中添加export JAVA_HOME=/opt/jdk1.8export HBASE_MANAGES_ZK=false# 保存退出,重新生效source hbase-env.sh
  5. 编辑文件

    1
    vim hbase-site.xml

    在这个文件中添加

    1
    <!--指定HBase在HDFS上的存储位置--><property>        <name>hbase.rootdir</name>        <value>hdfs://hadoop:9000/hbase</value></property><!--开启HBase的分布式--><property>        <name>hbase.cluster.distributed</name>        <value>true</value></property><!--配置Zookeeper的连接地址--><property>        <name>hbase.zookeeper.quorum</name>        <value>hadoop:2181,hadoop02:2181,hadoop03:2181</value></property><!--关闭容量流机制--><property>        <name>hbase.unsafe.stream.capability.enforce</name>        <value>false</value></property><!--指定WAL的存放地址--><property>        <name>hbase.wal.provider</name>        <value>filesystem</value></property>
  6. 编辑文件

    1
    vim regionservers # 在这个文件中添加三台主机的主机名
  7. 回到opt目录下,远程拷贝给其他两个节点

    1
    cd /optscp -r hbase-2.4.2 root@hadoop02:$PWDscp -r hbase-2.4.2 root@hadoop03:$PWD
  8. 配置变量(三台虚拟机)

    1
    vim /etc/profile.d/hbasehome.sh# 在文件中添加export HBASE_HOME=/opt/hbase-2.4.2export PATH=$PATH:$HBASE_HOME/bin# 保存退出,重新生效source /etc/profile.d/hbasehome.sh
  9. 查看版本

    1
    hbase version
  10. 启动HBase

    1
    start-hbase.sh
  11. 通过jps查看,如果三台虚拟机上出现了1个HMaster+3个HRegionServer那么表示启动成功

  12. 通过浏览器输入IP:16010来访问HBase的主页面

基本命令

基本概念

  1. Rowkey:行键
    1. 在HBase中,不同于传统的关系型数据库,没有主键的概念,取而代之的是行键
    2. HBase在定义表的时候,不需要定义行键列,而是在添加数据的时候手动指定行键
  2. Column Family:列族/列簇
    1. 在HBase中,强调列族不强调列,即在定义表的时候需要同时定义好列族,但是可以不定义列,列在使用过程中动态增删
    2. 一个表中,至少包含1个列族,理论上可以包含多个列族,列族的数量并不限制;但是到了实际开发中,一般而言,一个表中的列族数量不会超过3个
    3. 一个列族中可以包含0到多个列,列可以实现动态增删

注意问题

  1. HBase本身作为一个非关系型数据库,本身不支持SQL,提供了一套单独的命令
  2. HBase可以存储稀疏的数据,因此适合于存储结构化、半结构化数据
  3. append在添加数据的时候,如果是同一列,那么会在原来的值上进行拼接
  4. put表示修改数据,但是在修改过程中,如果列名写错,那么put命令会认为是新添了一列而不是去检查列名

基本命令

命令 解释
hbase shell 进入HBase的客户端
processlist 查看所有在运行的任务
status 查看HBase的运行状态
version 查看HBase的版本
whoami 当前当前的用户
create ‘person’, {NAME => ‘basic’}, {NAME => ‘info’}, {NAME => ‘other’}
或者
create ‘person’, ‘basic’, ‘info’, ‘other’
建立person表,包含3个列族:basic、info和other
append ‘person’, ‘p1’, ‘basic:name’, ‘Bruce’ 在person表中添加行键为p1的数据
get ‘person’, ‘p1’ 获取p1行键整个一行的数据
get ‘person’, ‘p1’, {COLUMN => ‘basic’}
或者
get ‘person’, ‘p1’, ‘basic’
查看指定行键指定列族的数据
get ‘person’, ‘p1’, {COLUMN => [‘basic’, ‘info’]}
或者
get ‘person’, ‘p1’, ‘basic’, ‘info’
查看指定行键多个列族的数据
get ‘person’, ‘p1’, {COLUMN => ‘basic:name’}
或者
get ‘person’, ‘p1’, ‘basic:name’
查看指定行间指定列的数据
scan ‘person’ 扫描整表
scan ‘person’, {COLUMNS => ‘basic’} 扫描指定列族
scan ‘person’, {COLUMNS => ‘basic:name’} 扫描指定列
put ‘person’, ‘p3’, ‘basic:name’, ‘Darl’ 修改数据
delete ‘person’, ‘p3’, ‘basic:naem’ 删除指定列
deleteall ‘person’, ‘p2’ 删除一行数据
deleteall ‘person’, ‘p3’, ‘basic:name’ 删除指定列

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!