实验手册——搜狗搜索日志分析系统

阅读: 评论:0

实验⼿册——搜狗搜索⽇志分析系统
前奏:请提前搭建好你的集和必要的软件:hadoop + jdk + hive + Sqoop + HBase;
⼀:数据预处理(Linux 环境):
1搜狗数据的数据格式:
2访问时间\t ⽤户 ID\t[查询词]\t 该 URL 在返回结果中的排名\t ⽤户点击的顺序号\t ⽤户点击的 URL
3其中,⽤户 ID 是根据⽤户使⽤浏览器访问搜索引擎时的 Cookie 信息⾃动赋值,即同⼀次使⽤浏览器输⼊的不同查询对应同⼀个⽤户 ID。
1:查看数据,构建系统前,需要了解如何进⾏数据相关的预处理:
  进⼊实验数据⽂件夹,然后进⾏less 查看:
解决中⽂显⽰乱码问题:
本步骤已经完成从 gbk 转化为 utf-8 格式,不需要再操作。见下⾯⽬录,该⽬录是乱码清洗的 Java 代码:
查看总⾏数,如下所⽰(⼩等⽚刻):
1 [root@master data_hadoop]# wc -l /home/hadoop/data_hadoop/sogou.500w.utf8
25000000 /home/hadoop/data_hadoop/sogou.500w.utf8
3 [root@master data_hadoop]#
截取部分数据数据(此操作没卵⽤):
1 [root@master data_hadoop]# head -100 sogou.500w.utf8 >  sogou.500w.utf8.demo
2 [root@master data_hadoop]# ls
  sogou.500w.utf8  sogou.500w.utf8.demo  tb_buck
4 [root@master data_hadoop]# wc -l sogou.500w.utf8.demo
5100 sogou.500w.utf8.demo
2:数据扩展:
  将时间字段拆分并拼接,添加年、⽉、⽇、⼩时字段;
利⽤bash命令执⾏sogou-log-extend.sh⽂件,该⽂件的内容如下:
1 #!/bin/bash
2 #infile=/data/sogou-data/sogou.500w.utf8
3 infile=$1
4 #outfile=/data/sogou-data/sogou.500w.utf8.final
5 outfile=$2
6 awk -F '\t''{print $0"\t"substr($1,0,4)"\t"substr($1,4,2)"\t"substr($1,6,2)"\t"substr($1,8,2)}' $infile > $outfile
3:数据过滤
  过滤第 2 个字段(UID)或者第 3 个字段(搜索关键词)为空的⾏(需要⽤第 2 步数据扩展的结果):
利⽤bash命令执⾏sogou-log-filter.sh⽂件,⽂件内容如下:
1 #!/bin/bash
2 #infile=/data/sogou-data/sogou.
3 infile=$1
4 #outfile=/data/sogou-data/sogou.500w.utf8.flt
5 outfile=$2
6 awk -F "\t"'{if($2 != "" && $3 != "" && $2 != " " && $3 != " ") print $0}' $infile > $outfile
最后,将数据加载到 HDFS 上,操作如下所⽰(上传到hdfs略慢,记得先启动你的集哈):
创建hadoop fs -mkdir -p /sougou/20111230的时候多了⼀个u,my god,导致后来创建数据表的时候未导⼊数据。可以选择重新删除表,建表,或者直接使
⽤命令导⼊;
⼆、基于 Hive 构建⽇志数据的数据仓库(要求:Hadoop 集正常启动):
1:打开 Hive 客户端:
基本操作:利⽤bin⽂件夹下hive打开Hive客户端。
2:Hive的基本操作:
1 # 查看数据库
2 show databases;
3 # 创建数据库
4 create databases sogou;
5 # 使⽤数据库
6 use sogou;
7 # 查看所有表名
8 show tables;
9 # 创建外部表,使⽤相对路径绝对URI, # 创建数据库要⼩⼼关键字冲突,不能使⽤date,order,user等关键字。
10 create external table sogou.sogou_20111230(ts string,uid string,keyword string,rank int,sorder int,url string)Row FORMAT DELIMITED FIELDS TERMINATED BY '\t' stored as TEXTFILE location 'hdfs://master:9000/sogou/20111230
11 # 查看新创建的表结构
12 show create table sogou.sogou_20111230;
13 describe sogou.sogou_20111230;
14 # 删除表
15 drop table sogou.sogou_20111230;
2:创建分区表(按照年、⽉、天、⼩时分区):
  创建扩展 4 个字段(年、⽉、⽇、⼩时)数据的外部表:
create external table sogou.sogou_ext_20111230(ts string,uid string,keyword string,rank int,sorder int,url string,year int,month int,day int,hour int)row format delimited fields terminated by '\t' stored as textfile location '/sogou_ext/20111230操作如下所⽰:
创建带分区的表:
hive> CREATE EXTERNAL TABLE sogou.sogou_partition(ts STRING,uid STRING,keyword STRING,rank INT,order INT,url STRING)
> COMMENT 'This is the sogou search data by partition'
> partitioned by (year INT,month INT,day INT,hour INT)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY '\t'
> STORED AS TEXTFILE;
OK
灌⼊数据(sogou_ext_20111230这个表⾥⾯的数据是创建的时候加载进去的,location 'hdfs://master:9000/sogou_ext/20111230';):
1 # 设置动态分区。nonstrict全分区字段是动态的
de=nonstrict;
3 insert overwrite table sogou.sogou_partition partition(year,month,day,hour) select * from sogou.sogou_ext_20111230;
查询结果,如下所⽰:
1 hive> select * from sogou_ext_20111230 limit 10;
2 hive> select url from sogou_ext_20111230 limit 10;
3 hive> select * from sogou_ext_20111230 where uid='96994a0480e7e1edcaef67b20d8816b7';
四、实现数据分析需求⼀:条数统计:
1:数据总条数:
hive> select count(*) from sogou.sogou_ext_20111230;
2:⾮空查询条数:
1 hive> select count(*) from sogou.sogou_ext_20111230 where keyword is not null and keyword!='';
3:⽆重复总条数(根据 ts、uid、keyword、url):
1 hive> select count(*) from (select * from sogou.sogou_ext_20111230 group by ts,uid,keyword,url having count(*)=1) a; 4:独⽴ UID 总数:
1 hive> select count(distinct(uid)) from sogou.sogou_ext_20111230;
五、实现数据分析需求⼆:关键词分析:
1:查询关键词长度统计:
split是hive字符串分割函数:
split(str,regex),对于特殊字符,需要使⽤两个\.eg:\\s表⽰空⽩字符。
1 hive> select ) from (select size(split(keyword,'\\s+')) as cnt from sogou.sogou_ext_20111230) a;
2:查询频度排名(频度最⾼的前 50 词):
1 hive> select keyword,count(*) as cnt from sogou.sogou_ext_20111230 group by keyword order by cnt desc limit 50;可以看看⼴⼤⽹友最爱搜的词汇,哈哈哈哈,查询结果如下所⽰:
1百度38441
2 baidu    18312
3⼈体艺术14475
4 4399⼩游戏11438
5 qq空间10317
6优酷10158
7新亮剑9654
8馆陶县县长闫宁的⽗亲9127
9公安卖萌8192
10百度⼀下你就知道7505
11百度⼀下7104
1243997041
13魏特琳6665
14 qq⽹名6149
15 7k7k⼩游戏5985
16⿊狐5610
17⼉⼦与母亲不正当关系5496
18新浪微博5369
19李宇春体5310
20新疆被击毙图⽚4997
21 hao123    4834
221234829
23 4399洛克王国4112
24 qq头像4085
25 nba    4027
26龙门飞甲3917
27 qq个性签名3880
28张3848
29 cf官⽹3729
30凰图腾3632
31快播3423
32⾦陵⼗三钗3349
33吞噬星空3330
34 dnf官⽹3303
35武动乾坤3232
36新亮剑全集3210
37电影3155
38优酷⽹3115
39两次才处决美⼥罪犯3106
40电影天堂3028
41⼟⾖⽹2969
42 qq分组2940
43全国各省最低⼯资标准2872
44清代姚明2784
45 youku    2783
46争产案2755
47 dnf    2686
48123062682
49⾝份证号码⼤全2680
50⽕影忍者2604
六、实现数据分析需求三:UID 分析
1:UID 的查询次数分布(查询 1 次的 UID 个数,...查询 N 次的 UID个数):
1 hive> select SUM(=1,1,0)),SUM(=2,1,0)),SUM(=3,1,0)),SUM(>3,1,0)) from
2    > (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid) uids;
2:UID 平均查询次数:
1 hive> select )/count(a.uid) from (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid) a; 3:查询次数⼤于
2 次的⽤户总数:
1 hive> select count(a.uid) from (
2    > select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2) a;
4:查询次数⼤于 2 次的⽤户占⽐:
1 A UID 总数:
2 hive> select count(distinct (uid)) from sogou.sogou_ext_20111230;
3 B UID2 次以上的数量:
4select count(a.uid) from (
5 > select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2) a;
6结果 C=B/A
5:查询次数⼤于 2 次的数据展⽰:
1 hive> select b.* from
2 >(select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2) a
3 >join sogou.sogou_ext_20111230 b on a.uid=b.uid
4 >limit 50;
七、实现数据分析需求四:⽤户⾏为分析:
1:点击次数与 Rank 之间的关系分析:
1 Rank 在10以内的点击次数占⽐
2 A:
3
4 hive> select count(*) from sogou.sogou_ext_20111230 where rank < 11;
5
6 B:
7
8 hive> select count(*) from sogou.sogou_ext_20111230;
9
10占⽐:A/B
11⽤户只翻看搜索引擎返回结果的前10个结果,即返回结果页⾯的第⼀页。这个⽤户⾏为决定了尽管搜索
12引擎返回的结果数⽬⼗分庞⼤,但真正可能被绝⼤部分⽤户所浏览的,只有排在最前⾯的很⼩⼀部分⽽已。
13所以传统的基于整个结果集合查准率和查全率的评价⽅式不再适⽤于⽹络信息检索的评价,我们需要着重
14强调在评价指标中有关最靠前结果⽂档与⽤户查询需求的相关度的部分。
2:直接输⼊ URL 作为查询词的⽐例:
1(1)直接输⼊ URL 查询的⽐例
2 A:
3 hive> select count(*) from sogou.sogou_ext_20111230 where keyword    like '%www%';
4
5 B:
6 hive> select count(*) from sogou.sogou_ext_20111230;
7
8占⽐:A/B
9
10(2)直接输⼊URL的查询中,点击数点击的结果就是⽤户输⼊的URL的⽹址所占的⽐例
11 C:
12 hive> select SUM(IF(instr(url,keyword)>0,1,0)) from
13 > (select * from sogou.sogou_ext_20111230 where keyword    like '%www%') a;
14占⽐:C/A
15从这个⽐例可以看出,很⼤⼀部分⽤户提交含有URL的查询是由于没有记全⽹址等原因⽽想借助搜索引擎来到⾃⼰想浏览的⽹页。因此搜索引擎在处理这部分查询的时候,⼀个可能⽐较理想的⽅式是⾸先把相关的完整URL地址返回给⽤户,这样3:独⽴⽤户⾏为分析(搜索具备多样性,因⼈⽽异,主要注意个性化需求):
1(1)查询搜索过”仙剑奇侠传“的 uid,并且次数⼤于3
2
3 hive> select uid,count(*) as cnt from sogou.sogou_ext_20111230 where keyword='仙剑奇侠传' group by uid having cnt > 3;
4
5
6(2)查 uid 是 653d48aa356d5111ac0e59f9fe736429 和 e11c6273e337c1d1032229f1b2321a75 的相关搜索记录
7
8 hive> select * from sogou.sogou_ext_20111230 where uid='653d48aa356d5111ac0e59f9fe736429' and keyword like '%
9
10仙剑奇侠传%';
11
12 hive> select * from sogou.sogou_ext_20111230 where uid='e11c6273e337c1d1032229f1b2321a75' and keyword like '%
13
14仙剑奇侠传%';
15
16(3)分析打印结果
17 653d48aa356d5111ac0e59f9fe736429 影视4 e11c6273e337c1d1032229f1b23
21a75 信息20
⼋、实现数据分析需求五:实时数据:
1每个 UID 在当天的查询点击次数
2
3(1)创建临时表
4
5 hive> create table sogou.uid_cnt(uid STRING, cnt INT) COMMENT 'This is the sogou search data of one day'
6
7 >ROW FORMAT DELIMITED
8
9 >FIELDS TERMINATED BY '\t'
10
11 >STORED AS TEXTFILE;
12
13
14(2)查询并插⼊
15
16 hive> INSERT OVERWRITE TABLE sogou.uid_cnt select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid;
九、使⽤ Sqoop 将数据导⼊ MySQL:
1要求:
2 MySQL 服务启动且运⾏正常,命令为:
3 [zkpk@master ~]$ /etc/init.d/mysqld status
4 Hadoop 集启动且运⾏正常,命令为:
5 [zkpk@master ~]$ jps
6
7将前⾯⽣成的实时数据从 HDFS 导⼊到 MySQL 中,步骤如下:
8以下操作都是在 MySQL 交互客户端执⾏。
然后创建数据表和使⽤sqoop将hive表⾥⾯的数据导⼊到mysql中:
1(1)登录 MySQL
2 mysql -uhadoop -phadoop
3(2)创建数据库
4查看 test 数据库是否存在:
5 mysql> show databases;
6如果不存在就创建:
7 mysql> create database test;
8(2)创建表
9提⽰:语句中的引号是反引号`,不是单引号’。
10创建成功后,退出 MySQL。
11 mysql> CREATE TABLE `test`.`uid_cnt` (
12 ->    `uid` varchar(255) DEFAULT NULL,
13 ->    `cnt` int(11) DEFAULT NULL
14 -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
15(3)导⼊数据
16进⼊ sqoop 安装主⽬录:
17 [zkpk@master ~]$ cd /home/zkpk/sqoop-1.4.5.bin__hadoop-2.0.4-alpha
18导⼊命令:
19 [zkpk@master    sqoop-1.4.5.bin__hadoop-2.0.4-alpha]$    bin/sqoop    export    --connect
20
21
22 jdbc:mysql://192.168.190.147:3306/test --username hadoop --password hadoop --table uid_cnt --export-dir '/user/hive/warehouse/sogou.db/uid_cnt' --fields-terminated-by '\t'
23
24注意:红⾊ IP 部分需要使⽤ HadoopMaster 节点对应的 IP 地址
25
26代码解释:
27 bin/sqoop export    ##表⽰数据从 hive 复制到 mysql 中\
28 --connect jdbc:mysql://192.168.1.113:3306/test \
29 --username root \
30 --password admin \
31 --table bb    ##mysql 中的表,即将被导⼊的表名称 \
32 --export-dir '/user/hive/warehouse/sogou.db/uid_cnt' ##hive 中被导出的⽂件 \ --fields-terminated-by '\t' ##hive 中被导出的⽂件字段的分隔符
实验内容还有如下所⽰的操作,这⾥就不列了,下⾯开始进⾏⾃⼰的操作:
⼗、HBase Shell 操作命令实验
⼗⼀、使⽤ Sqoop 将数据导⼊ HBase
⼗⼆、HBase Java API 访问统计数据
---------------------------------------------------------------------分割线------------------------------------------------------------------------------
⼗三:实现数据分析需求五:实时数据:
根据,实现数据分析需求⼆:关键词分析,将分析的结果存到新建的数据表⾥⾯,这样⽅便使⽤sqoop将hive转换为mysql,进⾏web分析和统计。具体的业
务可以根据具体的需求进⾏统计,然后将统计结果插⼊到对应的新建的数据表中。
1:业务指标⼀:分析频度最⾼的前 50 词;
1(1)创建频度排名临时表sogou_frequency_ranking,将查询频度排名(频度最⾼的前50词)的结果保存到这个临时表中。
2 hive> create table sogou.sogou_frequency_ranking(keyword string,keywordCount int)
3    > comment 'this is the sogou search data of one day'
4    > row format delimited
5    > fields terminated by '\t'
6    > stored as textfile ;
7
8(2)查询并插⼊
9 hive> insert overwrite table sogou.sogou_frequency_ranking
10    > select keyword,count(*) as cnt from sogou.sogou_ext_20111230 group by keyword order by cnt desc limit 50;
11(3)查看是否插⼊到临时表sogou_frequency_ranking
12 hive> select * from sogou.sogou_frequency_ranking;
⼗四:使⽤ Sqoop 将数据从Hive导⼊到 MySQL:
11: MySQL 服务启动且运⾏正常,命令为:
2  [root@master hadoop]# /etc/init.d/mysql status
3  SUCCESS! MySQL running (2086)
42:Hadoop 集启动且运⾏正常,命令为:
5 [root@master hadoop]# jps
63115 ResourceManager
72957 SecondaryNameNode
82812 DataNode
93341 NodeManager
102692 NameNode
1111038 Jps
1210883 RunJar
13 [root@master hadoop]#
将前⾯⽣成的实时数据从 HDFS 导⼊到 MySQL 中,步骤如下:
以下操作都是在 MySQL 交互客户端执⾏。
登录,查看数据库,创建数据库,使⽤数据库,创建数据表:
然后创建数据表,如下所⽰:
然后使⽤sqoop将hive数据表⾥⾯的数据导⼊到mysql中的数据表中;
1 #⽅式⼀:
2 bin/sqoop export    ##表⽰数据从 hive 复制到 mysql 中\
3 --connect jdbc:mysql://192.168.3.129:3306/test \
4 --username root \
5 --password 12345
6 \
6 --table bb    ##mysql 中的表,即将被导⼊的表名称 \
7 --export-dir '/user/hive/warehouse/sogou.db/sogou_frequency_ranking' ##hive 中被导出的⽂件 \
8 --fields-terminated-by '\t' ##hive 中被导出的⽂件字段的分隔符
9
10
11 #⽅式⼆
12 [root@master sqoop]# bin/sqoop export --connect jdbc:mysql://192.168.3.129:3306/sogou --username root --password 123456 --table sogou_frequency_ranking --export-dir '/user/hive/warehouse/sogou.db/sogou_frequency_ranking' --fields-term 操作如下所⽰:
导⼊以后可以去mysql查看数据是否正确导⼊,如下所⽰:
好吧,乱码了,解决⼀下乱码问题(hive数据表导⼊到mysql数据表乱码了):
问题:Linux安装mysql 在/etc下没有myf 解决办法?
1 Linux下⽤rpm包安装的MySQL是不会安装/f⽂件的,
2⾄于为什么没有这个⽂件⽽MySQL却也能正常启动和作⽤,在点有两个说法,
3第⼀种说法,myf只是MySQL启动时的⼀个参数⽂件,可以没有它,这时MySQL会⽤内置的默认参数启动,
4第⼆种说法,MySQL在启动时⾃动使⽤/usr/share/mysql⽬录下的f⽂件,这种说法仅限于rpm包安装的MySQL,
5解决⽅法,只需要复制⼀个/usr/share/mysql⽬录下的f ⽂件到/etc⽬录,并改名为myf即可。
操作如下所⽰:
1 [root@master sqoop]# bin/sqoop export --connect"jdbc:mysql://192.168.3.129:3306/sogou?useUnicode=true&characterEncoding=utf-8" --username root --password 123456 --table sogou_frequency_ranking --export-dir '/user/hive/warehouse/sog
2 Warning: /home/hadoop/sqoop/../hbase does not exist! HBase imports will fail.
3 Please set $HBASE_HOME to the root of your HBase installation.
4 Warning: /home/hadoop/sqoop/../hcatalog does not exist! HCatalog jobs will fail.
5 Please set $HCAT_HOME to the root of your HCatalog installation.
6 Warning: /home/hadoop/sqoop/../accumulo does not exist! Accumulo imports will fail.
7 Please set $ACCUMULO_HOME to the root of your Accumulo installation.
8 Warning: /home/hadoop/sqoop/../zookeeper does not exist! Accumulo imports will fail.
9 Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
1017/12/2209:58:28 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
1117/12/2209:58:28 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
1217/12/2209:58:29 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
1317/12/2209:58:29 INFO tool.CodeGenTool: Beginning code generation
1417/12/2209:58:30 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `sog
ou_frequency_ranking` AS t LIMIT 1
1517/12/2209:58:30 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `sogou_frequency_ranking` AS t LIMIT 1
1617/12/2209:58:30 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoop/hadoop-2.4.1
17 Note: /tmp/sqoop-root/compile/34b1a9d0c31df6785032f464c8bd9211/sogou_frequency_ranking.java uses or overrides a deprecated API.
18 Note: Recompile with -Xlint:deprecation for details.
1917/12/2209:58:36 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/34b1a9d0c31df6785032f464c8bd9211/sogou_frequency_ranking.jar
2017/12/2209:58:36 INFO mapreduce.ExportJobBase: Beginning export of sogou_frequency_ranking
2117/12/2209:58:37 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
2217/12/2209:58:38 INFO Configuration.deprecation: duce.ution is deprecated. Instead, duce.speculative
2317/12/2209:58:38 INFO Configuration.deprecation: mapred.map.ution is deprecated. Instead, use mapreduce.map.speculative
2417/12/2209:58:38 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
2517/12/2209:58:39 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.3.129:8032
2617/12/2209:58:54 INFO input.FileInputFormat: Total input paths to process : 1
2717/12/2209:58:54 INFO input.FileInputFormat: Total input paths to process : 1
2817/12/2209:58:56 INFO mapreduce.JobSubmitter: number of splits:4
2917/12/2209:58:56 INFO Configuration.deprecation: mapred.map.ution is deprecated. Instead, use mapreduce.map.speculative 3017/12/2209:58:59 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1513907030061_0001
3117/12/2209:59:03 INFO impl.YarnClientImpl: Submitted application application_1513907030061_0001
3217/12/2209:59:04 INFO mapreduce.Job: The url to track the job: master:8088/proxy/application_1513907030061_0001/
3317/12/2209:59:04 INFO mapreduce.Job: Running job: job_1513907030061_0001
3417/12/2209:59:35 INFO mapreduce.Job: Job job_1513907030061_0001 running in uber mode : false
3517/12/2209:59:35 INFO mapreduce.Job:  map 0% reduce 0%
3617/12/2209:59:56 INFO mapreduce.Job:  map 100% reduce 0%
3717/12/2209:59:58 INFO mapreduce.Job: Job job_1513907030061_0001 completed successfully
3817/12/2209:59:59 INFO mapreduce.Job: Counters: 30
39    File System Counters
40        FILE: Number of bytes read=0
41        FILE: Number of bytes written=442056
42        FILE: Number of read operations=0
43        FILE: Number of large read operations=0
44        FILE: Number of write operations=0
45        HDFS: Number of bytes read=3096
46        HDFS: Number of bytes written=0
47        HDFS: Number of read operations=19
48        HDFS: Number of large read operations=0
49        HDFS: Number of write operations=0
50    Job Counters
51        Launched map tasks=4
52        Data-local map tasks=4
53        Total time spent by all maps in occupied slots (ms)=71883
54        Total time spent by all reduces in occupied slots (ms)=0
55        Total time spent by all map tasks (ms)=71883
56        Total vcore-seconds taken by all map tasks=71883
57        Total megabyte-seconds taken by all map tasks=73608192
58    Map-Reduce Framework
59        Map input records=50
60        Map output records=50
61        Input split bytes=741
62        Spilled Records=0
63        Failed Shuffles=0
64        Merged Map outputs=0
65        GC time elapsed (ms)=765
66        CPU time spent (ms)=2130
67        Physical memory (bytes) snapshot=206630912
68        Virtual memory (bytes) snapshot=1462874112
69        Total committed heap usage (bytes)=40493056
70    File Input Format Counters
71        Bytes Read=0
72    File Output Format Counters
73        Bytes Written=0
7417/12/2209:59:59 INFO mapreduce.ExportJobBase: Transferred 3.0234 KB in80.053 seconds (38.6744 bytes/sec)
7517/12/2209:59:59 INFO mapreduce.ExportJobBase: Exported 50 records.
76 [root@master sqoop]#
导⼊以后查看mysql数据表,已经导⼊成功了,解决乱码问题:
然后⾃⼰弄了ssh,把流程略通,就可以做报表展⽰了,这⾥省略ssh框架的搭建,将核⼼代码贴⼀下:
No1:JSONUtil⼯具类,针对Json转换通⽤,如下所⽰:
1 package com.bie.utils;
2
3 import java.io.IOException;
4 import java.util.List;
5
6 dehaus.jackson.JsonProcessingException;
7 dehaus.jackson.map.ObjectMapper;
8 pe.JavaType;
9
10public class JsonUtils {
11
12// 定义jackson对象
13private static final ObjectMapper mapper = new ObjectMapper();
14/**
15    * 将对象转换成json字符串
16    * @param data
17    * @return
18    * @throws IOException
19*/
20public static String toJSONString(Object data) throws IOException {
21try {
22            String string = mapper.writeValueAsString(data);
23return string;
24        } catch (JsonProcessingException e) {
25            e.printStackTrace();
26        }
27return null;
28    }
29
30/**
31    * 将json结果集转化为对象
32    * @param jsonData
33    * @param beanType
34    * @return
35*/
36public static <T> T parseObject(String jsonData, Class<T> beanType) {
37try {
38            T t = adValue(jsonData, beanType);
39return t;
40        } catch (Exception e) {
41            e.printStackTrace();
42        }
43return null;
44    }
45
46/**
47    * 将json数据转换成list
48    * @param jsonData
49    * @param beanType
50    * @return
51*/
52public static <T> List<T> parseArray(String jsonData, Class<T> beanType) {
53        JavaType javaType = TypeFactory().constructParametricType(List.class, beanType);
54try {
55            List<T> list = adValue(jsonData, javaType);
56return list;
57        } catch (Exception e) {
58            e.printStackTrace();
59        }
60return null;
61    }

本文发布于:2023-05-03 15:38:56,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/4/116667.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   查询   结果   创建
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图