大数据——综合案例

  • 大数据——综合案例已关闭评论
  • 127 次浏览
  • A+
所属分类:linux技术
摘要

一、本地数据集上传到到数据仓库Hive 1、 实验数据集的下载 1. 将user.zip下载到指定目录

一、本地数据集上传到到数据仓库Hive

1、 实验数据集的下载

1. 将user.zip下载到指定目录

 大数据——综合案例

2.给hadoop用户赋予针对bigdatacase目录的各种操作权限

 大数据——综合案例

3.创建一个dataset目录用于保存数据集

 大数据——综合案例

4.解压缩user.zip文件

 大数据——综合案例

 5.可以看到dataset目录下由两个文件

 大数据——综合案例

 6.查看文件前五条记录

 大数据——综合案例

 

2、 数据集的预处理

1. 删除文件第一行记录(即字段名称)

 大数据——综合案例

2. 对字段进行预处理

1)新建一个脚本文件pre_deal.sh并放在dataset目录下

 大数据——综合案例

2)在pre_deal.sh下面加入以下代码

 大数据——综合案例

3)执行pre_deal.sh脚本文件,对small_user.csv进行数据预处理操作

 大数据——综合案例

4)用head命令查看前10行数据

 大数据——综合案例

 

3、 导入数据库

1. 启动hdfs

 大数据——综合案例

执行jps命令查看当前运行的进程

 大数据——综合案例

 

2.把user_table.txt上传到hadoop中

1)在hdfs根目录下创建新目录

 大数据——综合案例

2)把本地文件系统中的user_table.txt上传到hdfs系统的目录下

 大数据——综合案例

3)查看HDFS中的user_table.txt的前10条记录

 大数据——综合案例

 

3. 在Hive上创建数据

1)启动MySQL数据库

 大数据——综合案例

2)进入hive

 大数据——综合案例

3)在Hive中创建一个数据库dblab

 大数据——综合案例

4. 创建外部表

 大数据——综合案例

 

5. 查询数据

1)查看bigdata_user表的信息

 大数据——综合案例

2)查看表的简单结构

 大数据——综合案例

 

3)查询相关数据

 大数据——综合案例

 

 

二、 Hive数据分析

1、 简单查询分析

1. 查看前10位用户对商品的行为

 大数据——综合案例

 

2.查询前20位用户购买商品时的时间和商品的种类

 大数据——综合案例

 

3.设置列的别名

 大数据——综合案例

 

2、 查询条数统计分析

1.用聚合函数count()计算出表内由多少行数据

 大数据——综合案例

 

2.在函数内部加上distinct,查出uid不重复的数据由多少条

 大数据——综合案例

 

3.查询不重复的数据有多少条(为了排除客户刷单情况)

 大数据——综合案例

 

3、关键字条件查询分析

1.以关键字的存在区间为条件的查询

(1)查询2014年12月10日到2014年12月13日有多少人浏览了商品

 大数据——综合案例

执行结果:

 大数据——综合案例

 

(2)以月的第n天为统计单位,依次显示第n天网站卖出去的商品的个数。

 大数据——综合案例

执行结果:

 大数据——综合案例

 

2.关键字赋予定值为条件,对其他数据进行分析

取给定时间和给定地点,求当天发出到该地点的货物的数量。

 大数据——综合案例

执行结果:

 大数据——综合案例

 

4、 根据用户行为分析

1.查询一件商品在某天的购买比例

 大数据——综合案例

执行结果:

 大数据——综合案例

查询一件商品在某天的浏览比例

 大数据——综合案例

执行结果:

 大数据——综合案例

 

2.查询某个用户在某一天点击网站占该天所有点击行为的比例

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

 

3.给定购物商品的数量范围,查询某一天在该网站的购买该数量商品的用户id

 大数据——综合案例

 大数据——综合案例

 

5、 用户实时查询分析

查询某个地区的用户当天浏览网站的次数,语句如下:

创建新的数据表进行存储

 大数据——综合案例

导入数据

 大数据——综合案例

显示结果

 大数据——综合案例

执行结果如下:

 大数据——综合案例

 

三、 Hive、MySQL、HBase数据互导

1、 Hive预操作

1.创建临时表user_action

 大数据——综合案例

查看是否创建成功

 大数据——综合案例

 

2.将bigdata_user表中的数据插入到user_action

 大数据——综合案例

查看是否插入成功

 大数据——综合案例

 

 

 

2、 使用Sqoop将数据从Hive导入MySQL

1.将前面生成的临时表数据从Hive导入到MySQL中

1)、登录MySQL

新建终端,执行以下命令

 大数据——综合案例

2)、创建数据库

 大数据——综合案例

使用以下命令查看数据库编码是否utf8

 大数据——综合案例

3)创建表

在MySQL数据库中dblab中创建一个新表user_action,并设置编码为utf8

 大数据——综合案例

Exit

 大数据——综合案例

查看是否创建成功

 大数据——综合案例

4)导入数据

 大数据——综合案例

大数据——综合案例

 

2.查看MySQL中的user_action表数据

启动MySQL数据库

 大数据——综合案例

执行命令查询user_action表中的数据

 大数据——综合案例

 

3、使用sqoop将数据从MySQL导入HBase

1.启动Hadoop、MySQL、HBase

因为前面的操作所以除了HBase以外都启动了,故此次启动HBase,新建一个终端

 大数据——综合案例

 

2.启动Hbase shell

 大数据——综合案例

 

3.创建表user_action

 大数据——综合案例

 

4.新建终端,进入sqoop,导入数据

 大数据——综合案例

 大数据——综合案例

5.查看hbase中user_action表数据

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

 

4、 使用HBase Java API 把数据从本地导入到HBase中

1.启动Hadoop、HBase

 大数据——综合案例

 大数据——综合案例

 

2.数据准备

将之前的user_action数据从hdfs复制到linux系统的本地文件系统中,操作如下

先进入/usr/local/bigdatacase/dataset中

 大数据——综合案例

将hdfs上的user_action数据复制到本地当前目录中

 大数据——综合案例

查看前10行数据

 大数据——综合案例

将00000*文件复制一份重命名为user_action.output(*表示通配符)

 大数据——综合案例

查看user_action.output前十行

 大数据——综合案例

 

3.编写数据导入程序

启动eclipse

 大数据——综合案例

创建java project并命名为ImportHBase

 大数据——综合案例

 

新建HBaseImportTest class,并输入以下代码

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.List;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;

import org.apache.hadoop.hbase.KeyValue;

import org.apache.hadoop.hbase.client.Get;

import org.apache.hadoop.hbase.client.HBaseAdmin;

import org.apache.hadoop.hbase.client.HTable;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Result;

import org.apache.hadoop.hbase.client.ResultScanner;

import org.apache.hadoop.hbase.client.Scan;

import org.apache.hadoop.hbase.util.Bytes;

public class HBaseImportTest extends Thread {

    public Configuration config;

    public HTable table;

    public HBaseAdmin admin;

    public HBaseImportTest() {

        config = HBaseConfiguration.create();

//      config.set("hbase.master", "master:60000");

//      config.set("hbase.zookeeper.quorum", "master");

        try {

            table = new HTable(config, Bytes.toBytes("user_action"));

            admin = new HBaseAdmin(config);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    public static void main(String[] args) throws Exception {

        if (args.length == 0) {       //第一个参数是该jar所使用的类,第二个参数是数据集所存放的路径

            throw new Exception("You must set input path!");

        }

        String fileName = args[args.length-1];  //输入的文件路径是最后一个参数

        HBaseImportTest test = new HBaseImportTest();

        test.importLocalFileToHBase(fileName);

    }

    public void importLocalFileToHBase(String fileName) {

        long st = System.currentTimeMillis();

        BufferedReader br = null;

        try {

            br = new BufferedReader(new InputStreamReader(new FileInputStream(

                    fileName)));

            String line = null;

            int count = 0;

            while ((line = br.readLine()) != null) {

                count++;

                put(line);

                if (count % 10000 == 0)

                    System.out.println(count);

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            if (br != null) {

                try {

                    br.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            try {

                table.flushCommits();

                table.close(); // must close the client

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

        long en2 = System.currentTimeMillis();

        System.out.println("Total Time: " + (en2 - st) + " ms");

    }

    @SuppressWarnings("deprecation")

    public void put(String line) throws IOException {

        String[] arr = line.split("t", -1);

        String[] column = {"id","uid","item_id","behavior_type","item_category","date","province"};

 

        if (arr.length == 7) {

            Put put = new Put(Bytes.toBytes(arr[0]));// rowkey

            for(int i=1;i<arr.length;i++){

                put.add(Bytes.toBytes("f1"), Bytes.toBytes(column[i]),Bytes.toBytes(arr[i]));

            }

            table.put(put); // put to server

        }

    }

    public void get(String rowkey, String columnFamily, String column,

            int versions) throws IOException {

        long st = System.currentTimeMillis();

        Get get = new Get(Bytes.toBytes(rowkey));

        get.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column));

        Scan scanner = new Scan(get);

        scanner.setMaxVersions(versions);

        ResultScanner rsScanner = table.getScanner(scanner);

        for (Result result : rsScanner) {

            final List<KeyValue> list = result.list();

            for (final KeyValue kv : list) {

                System.out.println(Bytes.toStringBinary(kv.getValue()) + "t"

                        + kv.getTimestamp()); // mid + time

            }

        }

        rsScanner.close();

        long en2 = System.currentTimeMillis();

        System.out.println("Total Time: " + (en2 - st) + " ms");

    }

}

 大数据——综合案例

 

在/usr/local/bigdatacase下新建hbase子目录,用来存放导出的ImportHBase.jar

 大数据——综合案例

打包成可执行jar包并导出至/usr/local/bigdatacase/hbase目录下

 大数据——综合案例

 

4.数据导入

在导入数据前,先把user_action表清空

 大数据——综合案例

 

运行hadoop jar命令来运行刚刚的jar包

 大数据——综合案例

 大数据——综合案例

 

5.查看HBase中user_action表数据

 大数据——综合案例

 大数据——综合案例

 

四、利用R进行数据可视化分析

1、安装R

用vim编辑器打开/etc/apt/sources.list文件

 大数据——综合案例

在文件的最后一行添加厦门大学的镜像源

 大数据——综合案例

保存文件退出vim编辑器,执行如下命令更新软件源列表

 大数据——综合案例

 大数据——综合案例

执行如下命令安装R语言

 大数据——综合案例

 大数据——综合案例

用vim编辑器打开/etc/apt/sources.list文件

 大数据——综合案例

在文件最后一行添加下列语句

 大数据——综合案例

保存文件退出vim编辑器,执行如下命令更新软件源列表

 大数据——综合案例

执行如下命令安装R语言

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

启动R

 大数据——综合案例

执行以下命令退出

 大数据——综合案例

 

2、安装依赖库

进入R命令模式,输入以下命令

 大数据——综合案例

出现以下错误信息

 大数据——综合案例

执行下列语句

 大数据——综合案例

再次执行RMySQL下载命令

 大数据——综合案例

 大数据——综合案例

执行如下命令安装绘图包ggplot2

 大数据——综合案例

 大数据——综合案例

运行以下命令安装devtools

 大数据——综合案例

安装相应的包

 大数据——综合案例

 

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

 大数据——综合案例

 

Install.packages(‘相应的依赖’)

 大数据——综合案例

 大数据——综合案例

 

再次尝试下载devtools,成功。

 大数据——综合案例

最后执行如下命令安装taiyun/recharts.

 大数据——综合案例

 大数据——综合案例

 

3、可视化分析

1、连接MySQL,并获取数据

新建终端,并启动mysql

 大数据——综合案例

进入mysql命令提示符状态

 大数据——综合案例

输入SQL语句查询数据

 大数据——综合案例

切换到R命令窗口,连接到MySQL数据库

 大数据——综合案例

 

2、分析消费者对商品的行为

使用summary()函数查看MySQL数据库表user_action的字段behavior_type的类型

 大数据——综合案例

看出user_action表中字段behavior_type的类型是字符型,这样不方便作比较,需要将其转换为数值型,命令与执行结果如下

 大数据——综合案例

用柱状图展示消费者的行为类型的行为类型分布情况

 大数据——综合案例

 

 大数据——综合案例

 

3、分析销量排名前十的商品及其销量

获取子数据集,排序,并获取第1个到第10个排序结果(第一行是商品分类,第二行表示该类的销量)

 大数据——综合案例

采用散点图展示上面的分析结果

将count矩阵结果转换成数据框,完成散点图绘制

 大数据——综合案例

 

 大数据——综合案例

 

4、分析每年的哪个月销量最大

在数据集中增加一列关于月份的数据

visti_date变量中截取月份,user_ation中增加一列月份数据

 大数据——综合案例

用柱状图展示消费者在一年的不同月份的购买量情况

 大数据——综合案例

 

 大数据——综合案例

 

5、分析国内哪个省份的消费者最有购买欲望

 大数据——综合案例

 

 大数据——综合案例