基于厦大开放的《网站用户购物行为》教程的记录与补充

通过对厦大开放的大数据教程进行学习,发现软件版本更新,按照教程走,会出现些许问题,故而通过转载和补充的方式记录该实验案例的完整操作流程。

《网站用户购物行为》的综合实验的链接地址:http://dblab.xmu.edu.cn/post/7499/

教程内使用的软件包在该网址内链接,请进入该网址提供的百度云盘链接进行下载:http://dblab.xmu.edu.cn/post/5663/


实验环境准备


 

1.安装Ubuntu16.04

  1. 我选择在vbox上安装Ubuntu,此处不赘述安装过程。tip:统一采用hadoop作为用户名
  2. 安装好Ubuntu后,在vbox上启动“安装增强功能”
  3. 同时根据需求是否需要设置共享文件夹挂载
    sudo mount -t vboxsf share /mnt # share是共享文件夹名称,/mnt是挂载与Ubuntu内具体文件夹

     

  4. 安装好“增强功能”,需要重启虚拟机,不然挂载等扩展功能无法生效。

 

2.安装Hadoop伪分布式

  1. 安装ssh
    sudo apt-get install openssh-server #安装ssh
    ssh localhost #测试ssh登录本地是否正常,此处需要输入密码登录
    exit #退出ssh
    
    # 为了避免每次ssh到本地需要输入密码,下面的指令为免密码登录设置
    cd ~/.ssh/ 
    ssh-keygen -t rsa #直接一路敲回车键
    cat ./id_rsa.pub >> ./authorized_keys #添加授权
    ssh localhost #测试免密码登录是否成功
    exit #退出ssh

     

  2. 安装Java7
    cd /usr/lib
    sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
    cd ~/Downloads #假设全部安装包都放在Download文件夹内
    sudo tar -zxvf ./jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
    gedit ~/.bashrc #初学者不习惯用vim,可以用gedit替换,直接文本操作。

    在bashrc文件的最后面添加如下环境变量:

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH

    添加后记得保存,刷新一下使得配置生效。

    source ~/.bashrc 
    java -version #查看jdk7是否能识别成功

    tip:教程是17年年底出的,里面提供apt下载jdk7,但是Ubuntu16已经不提供jdk7的下载,需要自己手动下载

  3. 安装Hadoop,配置伪分布式
    sudo tar -zxf ~/Downloads/hadoop-2.7.1.tar.gz -C /usr/local # 解压到/usr/local中
    cd /usr/local/
    sudo mv ./hadoop-2.7.1/ ./hadoop # 重命名
    sudo chown -R hadoop ./hadoop # 修改文件权限,我们用户名是hadoop,此处设置权限给hadoop用户
    /usr/local/hadoop/bin/hadoop version # 测试hadoop是否成功返回版本信息

    此处安装的hadoop是单机版本的。需要进行配置,变成伪分布式。先对core-site.xml进行修改

    gedit /usr/local/hadoop/etc/hadoop/core-site.xml

    修改为下面配置,然后保存:

    <configuration>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop/tmp</value>
            <description>Abase for other temporary directories.</description>
        </property>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>

    再对hdfs-site.xml进行配置

    gedit /usr/local/hadoop/etc/hadoop/hdfs-site.xml

    修改为下面配置,然后保存:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
    </configuration>

    对hadoop-env.sh进行配置

    gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh

    此处需要将JAVA_HOME的赋值进行替换

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80

    配置完毕,由于我们将单机版本改成伪分布式,因此需要对namenode进行格式化一下

    cd /usr/local/hadoop
    ./bin/hdfs namenode -format

     

3.安装Mysql

  1. 安装MySQL
    sudo apt-get update  #更新软件源
    sudo apt-get install mysql-server  #安装mysql,安装过程会提示为root设置密码,请记得设置密码

    如果忘记设置密码,请从该帖子内进行学习修改密码。

  2. 修改配置,便于数据库可以保存中文
    service mysql start #启动mysql服务器
    sudo netstat -tap | grep mysql #确认是否启动成功
    mysql -u root -p #进入mysql shell界面

    此时在MySQL的shell界面输入

    mysql> show variables like "char%"; 

    会发现character_set_server为latin1,我们需要修改配置使得变成utf8.

    sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
    
    #在[mysqld]下添加一行
    character_set_server=utf8

    修改好配置,我们需要重启MySQL服务

    service mysql restart
    mysql -u root -p

    再次进入MySQL,执行查看是否character_set_server变成utf8

    mysql> show variables like "char%"; 

4.安装HBase

  1. 安装HBase
    #新建一个终端
    sudo tar -zxf ~/Downloads/hbase-1.1.2-bin.tar.gz -C /usr/local
    sudo mv /usr/local/hbase-1.1.2 /usr/local/hbase
    cd /usr/local
    sudo chown -R hadoop ./hbase
    /usr/local/hbase/bin/hbase version
    gedit ~/.bashrc
    

    在bashrc上添加环境变量

    export PATH=$PATH:/usr/local/hbase/bin

    然后刷新一下bashrc

    source ~/.bashrc
  2. 配置分布式
    gedit /usr/local/hbase/conf/hbase-env.sh

    首先为hbase-env.sh添加参数,

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
    export HBASE_CLASSPATH=/usr/local/hadoop/conf 
    export HBASE_MANAGES_ZK=true

    然后编辑hbase-site.xml

    gedit /usr/local/hbase/conf/hbase-site.xml
    <configuration>
            <property>
                    <name>hbase.rootdir</name>
                    <value>hdfs://localhost:9000/hbase</value>
            </property>
            <property>
                    <name>hbase.cluster.distributed</name>
                    <value>true</value>
            </property>
    </configuration>

    启动HBase

    cd /usr/local/hbase
    bin/start-hbase.sh

    进入HBase的shell界面

    bin/hbase shell

5.安装Hive

  1. 安装Hive
    #新建一个终端
    sudo tar -zxf ~/Downloads/apache-hive-1.2.1-bin.tar.gz -C /usr/local
    cd /usr/local/
    sudo mv apache-hive-1.2.1-bin hive
    sudo chown -R hadoop ./hive
    gedit ~/.bashrc

    在bashrc上添加环境变量

    export HIVE_HOME=/usr/local/hive
    export PATH=$PATH:$HIVE_HOME/bin
    export HADOOP_HOME=/usr/local/hadoop

    刷新一下bashrc

    source ~/.bashrc

    将hive-default.xml.template重命名为hive-default.xml

    cd /usr/local/hive/conf
    mv hive-default.xml.template hive-default.xml

    修改hive-site.xml文件

    cd /usr/local/hive/conf
    gedit hive-site.xml

    在hive-site.xml中添加如下配置信息:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?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>hive</value>
        <description>username to use against metastore database</description>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
        <description>password to use against metastore database</description>
      </property>
    </configuration>
  2. 连接MySQL,tip:从官网上下载的最新版本的MySQL插件跟跟hive1.2.1版本不兼容,推荐下载mysql-connector-java-5.1.21.jar的包,可以从mvnrepository上去查找下载
    cp ~/Downloads/mysql-connector-java-5.1.21.jar /usr/local/hive/lib

    步骤4安装了MySQL,此处我们如果没有关闭MySQL的shell界面直接操作,有则从新打开MySQL的shell

    service mysql start #启动mysql服务
    mysql -u root -p  #登陆shell界面
    
    #下面的指令是在MySQL的shell界面操作的
    mysql> create database hive;
    mysql> grant all on *.* to hive@localhost identified by 'hive';   #将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
    mysql> flush privileges;  #刷新mysql系统权限关系表
  3. 启动Hive
    cd /usr/local/hive
    ./bin/hive

    tip:如果以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。启动hive会报错,用下面指令统一一下版本即可

    schematool -dbType mysql -initSchema

     

6.安装Sqoop

  1. 安装Sqoop
    ​#新建一个终端
    sudo tar -zxf ~/Downloads/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local
    cd /usr/local/
    sudo mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop #修改文件名
    sudo chown -R hadoop:hadoop sqoop

    修改配置文件sqoop-env.sh

    cd sqoop/conf/
    cat sqoop-env-template.sh  >> sqoop-env.sh  #将sqoop-env-template.sh复制一份并命名为sqoop-env.sh
    gedit sqoop-env.sh #编辑sqoop-env.sh

    在sqoop-env.sh文件的最后面添加下面几行参数

    export HADOOP_COMMON_HOME=/usr/local/hadoop
    export HADOOP_MAPRED_HOME=/usr/local/hadoop
    export HBASE_HOME=/usr/local/hbase
    export HIVE_HOME=/usr/local/hive

    配置环境变量

    gedit ~/.bashrc

    在bashrc的最后添加如下内容

    export SQOOP_HOME=/usr/local/sqoop
    export PATH=$PATH:$SBT_HOME/bin:$SQOOP_HOME/bin
    export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib

    刷新一下bashrc

    source ~/.bashrc
  2. 测试与MySQL连接,tip:这里还会需要继续使用MySQL的连接插件
    ​cp ~/Downloads/mysql-connector-java-5.1.21.jar /usr/local/sqoop/lib #拷贝到sqoop
    
    sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P 

7.安装R语言

  1. 安装R语言,tip:由于版本升级,教程里面的R语言安装无效,我们从网上找了其他教程安装R语言
    sudo echo "deb http://cran.rstudio.com/bin/linux/ubuntu xenial/" | sudo tee -a /etc/apt/sources.list
    gpg --keyserver keyserver.ubuntu.com --recv-key 51716619E084DAB9
    gpg -a --export 51716619E084DAB9 | sudo apt-key add -
    sudo apt-get update
    sudo apt-get install r-base r-base-dev

    由于我们在R语言内还有安装其他库,这会涉及其他工具的调用和依赖,这里我们需要先从apt上下载

    sudo apt-get install libmariadb-client-lgpl-dev libssl-dev libssh2-1-dev libcurl4-openssl-dev libxml2-dev git
  2. 启动R语言,在R里面安装相关库,安装好后,退出R语言时,需要选择“y”确定保存本次操作。
    #以下指令是在R语言内执行的
    
    > install.packages('RMySQL')
    > install.packages('ggplot2')
    > install.packages('devtools')
    
    #tip:此处注意一下
    > devtools::install_github('taiyun/recharts')
    #上面的install_github指令可以执行成功,则下面的三条指令则不需要考虑,跳过即可
    #如果上面的install_github指令执行不成功,替换成下面的三条指令执行看看
    > install_github('ramnathv/htmlwidgets')
    > install_github('rstudio/htmltools')
    > install_github('taiyun/recharts@htmlwidgets')

 

 


实验操作《网站用户购物行为》


1.本地数据集上传到数据仓库Hive

  1. 下载user数据集到Downloads,并且解压,网址:https://pan.baidu.com/s/1nuOSo7B
  2. 创建个文件夹放在/usr/local存放数据集
    cd /usr/local
    sudo mkdir bigdatacase
    sudo chown -R hadoop:hadoop ./bigdatacase
    cd bigdatacase
    mkdir dataset
    cd ~/Downloads
    unzip user.zip -d /usr/local/bigdatacase/dataset
    cd /usr/local/bigdatacase/dataset
    head -5 raw_user.csv #查看一下数据集的前五行
    
    #数据集的预处理
    sed -i '1d' raw_user.csv # 删除raw_user中的第1行
    sed -i '1d' small_user.csv # 删除small_user中的第1行
    head -5 raw_user.csv
    head -5 small_user.csv
    
    #对字段进行预处理
    gedit pre_deal.sh

    以下内容是复制到pre_deal.sh文件内

    #!/bin/bash
    #下面设置输入文件,把用户执行pre_deal.sh命令时提供的第一个参数作为输入文件名称
    infile=$1
    #下面设置输出文件,把用户执行pre_deal.sh命令时提供的第二个参数作为输出文件名称
    outfile=$2
    #注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面
    awk -F "," 'BEGIN{
            srand();
            id=0;
            Province[0]="山东";Province[1]="山西";Province[2]="河南";Province[3]="河北";Province[4]="陕西";Province[5]="内蒙古";Province[6]="上海市";
            Province[7]="北京市";Province[8]="重庆市";Province[9]="天津市";Province[10]="福建";Province[11]="广东";Province[12]="广西";Province[13]="云南"; 
            Province[14]="浙江";Province[15]="贵州";Province[16]="新疆";Province[17]="西藏";Province[18]="江西";Province[19]="湖南";Province[20]="湖北";
            Province[21]="黑龙江";Province[22]="吉林";Province[23]="辽宁"; Province[24]="江苏";Province[25]="甘肃";Province[26]="青海";Province[27]="四川";
            Province[28]="安徽"; Province[29]="宁夏";Province[30]="海南";Province[31]="香港";Province[32]="澳门";Province[33]="台湾";
        }
        {
            id=id+1;
            value=int(rand()*34);       
            print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
        }' $infile > $outfile

    运行pre_deal.sh对数据集进行处理

    cd /usr/local/bigdatacase/dataset
    bash ./pre_deal.sh small_user.csv user_table.txt 
    head -10 user_table.txt

    启动hdfs,如果前面启动了,没有关闭则跳过

    cd /usr/local/hadoop
    ./sbin/start-dfs.sh
    jps
    ./bin/hdfs dfs -mkdir -p /bigdatacase/dataset
    ./bin/hdfs dfs -put /usr/local/bigdatacase/dataset/user_table.txt /bigdatacase/dataset
    ./bin/hdfs dfs -cat /bigdatacase/dataset/user_table.txt | head -10
    
  3. 在Hive上创建数据库

    #如果前面启动MySQL没有关闭则跳过
    service mysql start

    启动Hive

    cd /usr/local/hive
    ./bin/hive

    下面的指令是在Hive中进行操作

    hive>  create database dblab;
    hive>  use dblab;
    hive>  CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,uid STRING,item_id STRING,behavior_type INT,item_category STRING,visit_date DATE,province STRING) COMMENT 'Welcome to xmu dblab!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdatacase/dataset';
    hive>  select * from bigdata_user limit 10;
    hive>  select behavior_type from bigdata_user limit 10;

     

2.Hive数据分析

  1. Hive的查询操作,在教程内没有出现任何错误,此处给链接,自行当官网教程学习,网址:http://dblab.xmu.edu.cn/blog/1005/
  2. 用户实时查询分析,以下的指令是在Hive的shell执行的

    hive> create table scan(province STRING,scan INT) COMMENT 'This is the search of bigdataday' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;//创建新的数据表进行存储
    hive> insert overwrite table scan select province,count(behavior_type) from bigdata_user where behavior_type='1' group by province;//导入数据
    hive> select * from scan;//显示结果

     

3.Hive、MySQL、HBase数据互导

  1. 在Hive里面创建临时表user_action
    hive> create table dblab.user_action(id STRING,uid STRING, item_id STRING, behavior_type STRING, item_category STRING, visit_date DATE, province STRING) COMMENT 'Welcome to XMU dblab! ' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
    hive>select * from user_action limit 10; #空的,没有任何数据

    该创建数据表指令与先去相似,差异在于没有指定HDFS上的文件路径,所以不会从hdfs上把数据导入到表中

    hive> INSERT OVERWRITE TABLE dblab.user_action select * from dblab.bigdata_user; #导入数据
    hive>select * from user_action limit 10; #显示前十行数据成功

     

  2. MySQL创建数据库和数据表

    mysql –u root –p 
    mysql> show databases; #显示所有数据库
    mysql> create database dblab; #创建dblab数据库
    mysql> use dblab; #使用数据库
    mysql> CREATE TABLE `dblab`.`user_action` (`id` varchar(50),`uid` varchar(50),`item_id` varchar(50),`behavior_type` varchar(10),`item_category` varchar(50), `visit_date` DATE,`province` varchar(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  3. 使用Sqoop将数据从Hive导入MySQL

    #新建一个终端窗口
    cd /usr/local/sqoop
    ./bin/sqoop export --connect jdbc:mysql://localhost:3306/dblab --username root --password hadoop --table user_action --export-dir '/user/hive/warehouse/dblab.db/user_action' --fields-terminated-by '\t'; #导入命令

    在MySQL的shell界面查看数据表是否成功导入数据

    mysql> use dblab;
    mysql> select * from user_action limit 10;
  4. 启动HBase,在启动HBase前,先确认启动了HDFS方可执行

    #启动hdfs
    cd /usr/local/hbase
    ./bin/start-hbase.sh
    #启动HBase
    cd /usr/local/hbase
    ./bin/hbase shell

    在HBase内创建数据表

    hbase> create 'user_action', { NAME => 'f1', VERSIONS => 5}
  5. 使用Sqoop将数据从MySQL导入HBase

    这里需要注意以下,MySQL的root用户的密码要根据自身设置修改

    cd /usr/local/sqoop
    ./bin/sqoop  import  --connect jdbc:mysql://localhost:3306/dblab --username root --password 123 --table user_action --hbase-table user_action --column-family f1 --hbase-row-key id --hbase-create-table -m 1

    导入成功了,在HBase内查询数据是否成功导入

    habse> scan 'user_action',{LIMIT=>10}
  6. 安装eclipse

    sudo apt-get update
    sudo apt-get install eclipse
    
    #往eclipse添加Hadoop插件
    unzip -qo ~/Downloads/hadoop2x-eclipse-plugin-master.zip -d ~/下载    # 解压到 ~/下载 中
    sudo cp ~/Downloads/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar /usr/lib/eclipse/plugins/    # 复制到 eclipse 安装目录的 plugins 目录下
    /usr/lib/eclipse/eclipse -clean    # 添加插件后需要用这种方式使插件生效

    安装Hadoop插件后,会在Project Explorer中看到 DFS Locations,eclipse的插件安装和配置跟着教程走即可。

    当创建的项目使用的是jdk8的话,需要切换一下库部分代码在jdk8环境下运行会报错,兼容性问题,在jdk7下不会报错。

  7. 使用HBase Java API把数据从本地导入到HBase中

    eclipse创建Java project,名字叫ImportHBase,新建一个类,名字叫HBaseImportTest,注意观察jdk版本是否是jdk7,源代码如下:

    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");
        }
     
    }

    可以在eclipse里面添加run config参数为/usr/local/bigdatacase/dataset/user_action.output,也把Java程序导出来执行,

    /usr/local/hadoop/bin/hadoop jar /usr/local/bigdatacase/hbase/ImportHBase.jar HBaseImportTest /usr/local/bigdatacase/dataset/user_action.output

     

4.利用R进行数据可视化分析

  1. 使用eclipse查看数据
    mysql -u root -p
    
    # 以下指令在MySQL的shell执行
    mysql> use dblab;
    mysql> select * from user_action limit 10;
  2. 使用R语言连接MySQL,注意MySQL的密码需要改成自身设置的

    library(RMySQL)
    conn <- dbConnect(MySQL(),dbname='dblab',username='root',password='123',host="127.0.0.1",port=3306)
    user_action <- dbGetQuery(conn,'select * from user_action')
  3. 在R语言里面分析消费者对商品的行为

    #统计
    summary(user_action$behavior_type)
    
    summary(as.numeric(user_action$behavior_type))
    
    #画柱状图
    library(ggplot2)
    ggplot(user_action,aes(as.numeric(behavior_type)))+geom_histogram()
    
    #分析哪一类商品被购买总量前十的商品和被购买总量
    temp <- subset(user_action,as.numeric(behavior_type)==4) # 获取子数据集
    count <- sort(table(temp$item_category),decreasing = T) #排序
    print(count[1:10]) # 获取第1到10个排序结果
    
    #散点图表示
    result <- as.data.frame(count[1:10]) #将count矩阵结果转换成数据框
    ggplot(result,aes(Var1,Freq,col=factor(Var1)))+geom_point()
    
    #分析每年的哪个月份购买商品的量最多
    month <- substr(user_action$visit_date,6,7) # visit_date变量中截取月份
    user_action <- cbind(user_action,month) # user_action增加一列月份数据
    
    #柱状图分别表示消费者购买量
    ggplot(user_action,aes(as.numeric(behavior_type),col=factor(month)))+geom_histogram()+facet_grid(.~month)
    
    #分析国内哪个省份的消费者最有购买欲望
    #此处采用emap绘制全国地图,并嵌入数据
    library(recharts)
    rel <- as.data.frame(table(temp$province))
    provinces <- rel$Var1
    x = c()
    
    for(n in provinces){
    x[length(x)+1] = nrow(subset(temp,(province==n)))
    }
    
    mapData <- data.frame(province=rel$Var1, count=x, stringsAsFactors=F) # 设置地图信息
    eMap(mapData, namevar=~province, datavar = ~count) #画出中国地图

     

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值