大数据——综合案例
一、本地数据集上传到到数据仓库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、分析国内哪个省份的消费者最有购买欲望



浙公网安备 33010602011771号