赞
踩
通过上面的命令,就进入到了data_format.zip文件所在的目录,并且可以看到有个data_format.zip文件。
$ cd /usr/local
$ ls
$ sudo mkdir dbtaobao
$ //下面给hadoop用户赋予针对dbtaobao目录的各种操作权限
$ sudo chown -R hadoop:hadoop ./dbtaobao
$ cd dbtaobao
$ //下面创建一个dataset目录,用于保存数据集
$ mkdir dataset
$ //下面就可以解压缩data_format.zip文件
$ cd ~ //表示进入hadoop用户的目录
$ cd Downloads
$ ls
$ unzip data_format.zip -d /usr/local/dbtaobao/dataset
$ cd /usr/local/dbtaobao/dataset
$ ls
$ head -5 user_log.csv
(1)删除文件的第一行记录,即字段名称
user_log.csv的第一行都是字段名称,我们在文件中的数据导入数据仓库Hive中时,不需要第一行字段名称,因此在做数据预处理时,删除第一行
$ //下面删除user_log.csv中的第1行
$ sed -i '1d' user_log.csv //1d表示删除第1行,同理,3d表示删除第3行,nd表示删除第n行
$ //下面再用head命令去查看文件的前5行记录,就看不到字段名称这一行了
$ head -5 user_log.csv
(2)获取数据集中双11的前100000条数据
由于数据集中交易数据太大,这里只截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv
下面我们建立一个脚本文件完成上面截取任务,请把这个脚本文件放在dataset目录下和数据集user_log.csv:
$ vim predeal.sh
上面使用vim编辑器新建了一个predeal.sh脚本文件,请在这个脚本文件中加入下面代码:
#!/bin/bash #下面设置输入文件,把用户执行predeal.sh命令时提供的第一个参数作为输入文件名称 infile=$1 #下面设置输出文件,把用户执行predeal.sh命令时提供的第二个参数作为输出文件名称 outfile=$2 #注意!!最后的$infile > $outfile必须跟在}’这两个字符的后面 awk -F "," 'BEGIN{ id=0; } { if($6==11 && $7==11){ id=id+1; print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11 if(id==10000){ exit } } }' $infile > $outfile
下面就可以执行predeal.sh脚本文件,截取数据集中在双11的前10000条交易数据作为小数据集small_user_log.csv,命令如下:
$ chmod +x ./predeal.sh
$ ./predeal.sh ./user_log.csv ./small_user_log.csv
(3)导入数据库
下面要把small_user_log.csv中的数据最终导入到数据仓库Hive中。为了完成这个操作,我们会首先把这个文件上传到分布式文件系统HDFS中,然后,在Hive中创建两个个外部表,完成数据的导入。
现在,我们要把Linux本地文件系统中的user_log.csv上传到分布式文件系统HDFS中,存放在HDFS中的“/dbtaobao/dataset”目录下。
首先,请执行下面命令,在HDFS的根目录下面创建一个新的目录dbtaobao,并在这个目录下创建一个子目录dataset,如下:
因为需要借助于MySQL保存Hive的元数据,所以,请首先启动MySQL数据库,之后在hive中创建数据库。
这里我们要分别在数据库dbtaobao中创建一个外部表user_log,它包含字段(user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gender,province),请在hive命令提示符下输入如下命令:
(1)创建临时表inner_user_log和inner_user_info
create table dbtaobao.inner_user_log(user_id INT,item_id INT,cat_id INT,merchant_id INT,brand_id INT,month STRING,day STRING,action INT,age_range INT,gender INT,province STRING) COMMENT 'Welcome to XMU dblab! Now create inner table inner_user_log ' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
(2)将user_log表中的数据插入到inner_user_log
INSERT OVERWRITE TABLE dbtaobao.inner_user_log select * from dbtaobao.user_log;
执行下面命令查询上面的插入命令是否成功执行:
hive> select * from inner_user_log limit 10;
(1)登录MySQL,创建数据库,查看数据库的编码
mysql –u root –p
mysql> show databases; #显示所有数据库
mysql> create database dbtaobao; #创建dbtaobao数据库
mysql> use dbtaobao; #使用数据库
mysql> show variables like "char%";
(2)创建表
mysql> CREATE TABLE `dbtaobao`.`user_log` (`user_id` varchar(20),`item_id` varchar(20),`cat_id` varchar(20),`merchant_id` varchar(20),`brand_id` varchar(20), `month` varchar(6),`day` varchar(6),`action` varchar(6),`age_range` varchar(6),`gender` varchar(6),`province` varchar(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)导入数据
cd /usr/local/sqoop
bin/sqoop export --connect jdbc:mysql://localhost:3306/dbtaobao --username root --password hadoop--table user_log --export-dir '/user/hive/warehouse/dbtaobao.db/inner_user_log' --fields-terminated-by ',';
(4)查看数据
mysql -u root -p
mysql> use dbtaobao;
mysql> select * from user_log limit 10;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。