日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

hadoop2.20+hive+sqoop+mysql数据处理案例

發(fā)布時間:2024/2/28 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hadoop2.20+hive+sqoop+mysql数据处理案例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、業(yè)務說明

使用Hadoop2及其他開源框架,對本地的日志文件進行處理,將處理后需要的數(shù)據(jù)(PV、UV...)重新導入到關系型數(shù)據(jù)庫(Mysql)中,使用Java程序對結果數(shù)據(jù)進行處理,組織成報表的形式在數(shù)據(jù)后臺進行展示。

?

二、為什么使用Hadoop(開發(fā)動機)

現(xiàn)有的日志處理方式,是采用純的java程序來計算的,對于大數(shù)據(jù)的日志文件來說,這種方案在處理速度、IO占用、數(shù)據(jù)備份及資源利用率方面都有一定的缺陷;

?

相比之下使用Hadoop完成數(shù)據(jù)存儲和計算有以下的好處:

(1)高可靠性:Hadoop支持對數(shù)據(jù)的多副本備份;
(2)高擴展性:Hadoop是在可用的計算機集簇間分配數(shù)據(jù)并完成計算任務的,這些集簇可以方便地擴展到數(shù)以千計? ??的節(jié)點中。
(3)高效性:通過分發(fā)數(shù)據(jù),hadoop可以在數(shù)據(jù)所在的節(jié)點上并行地(parallel)處理它們,這使得處理非常的快 ??速。
(4)高容錯性:Hadoop能夠自動保存數(shù)據(jù)的多個副本,并且能夠自動將失敗的任務重新分配。

(5)高資源利用率:管理員可以根據(jù)當前服務器的配置,來設置不同的資源調度方案(yarn),做到資源利用最大化。

三、數(shù)據(jù)處理流程圖

?

?

四、類目貢獻率案例流程

一、案例業(yè)務目標:?

統(tǒng)計2014年12月16日?全天,用戶點擊數(shù)top20的商品類別條目

?

二、開發(fā)步驟

?

(1)將2014年12月16日的日志(約16G)上傳到HDFS文件系統(tǒng)的?/input/log_2014-12-16目錄下

?

?

(2)、編寫MapReduce程序清洗數(shù)據(jù)

?

程序邏輯分析:

篩選出日志字段中url包含?id=...的行,該url表示的含義為用戶點擊了某個商品類目為id的條目,程序的目標是只篩選出含有此url的行數(shù)據(jù),對于不包含的行將舍棄。?清洗后的數(shù)據(jù)存放在HDFS的???/output/cleanItem_2014_12_16目錄下(清洗后的數(shù)據(jù)約為140MB)

?

?

?

?

(3)、將清洗后的數(shù)據(jù)映射到Hive表中

?

進入hive的client端,建立一個外部分區(qū)表mmb_ordercontribute,這個表的字段與日志的字段一一對應,但會多一個data的分區(qū)字段,這相當于Mysql中的索引,當按照日期查詢時,效率會高,以下是在hive中,mmb_ordercontribute的建表語句:

?

?

如圖所示,表的映射路徑location指向了清洗后的數(shù)據(jù)目錄

?

(4)操作hive表數(shù)據(jù)

?

????數(shù)據(jù)經(jīng)過映射后,就可以像mysql等數(shù)據(jù)庫一樣通過sql語句的形式來處理表數(shù)據(jù)了,比如:

統(tǒng)計當天所有用戶訪問條目的總次數(shù):

?

?

????統(tǒng)計的結果為:904423

雖然是一個類似mysql的查詢語句,但是處理的流程和mysql是天差地別的,hive會將這條語句解析成一個MapReduce程序進行統(tǒng)計,如圖所示,hive處理完這個查詢cup使用的總時間為6分鐘左右,而分配到邏輯cpu上,實際使用的時間為28.5秒,如果去除mapreduce的解析和準備工作,mapreduce的執(zhí)行時間是非常少的。

但hive并不是所有的sql語句都被映射成mapreduce程序,唯一的例外(不配置的話)就是:SELECT?*?FROM??table_name?LIMIT;因為這只是在截取表的前幾條數(shù)據(jù)而已;

?

?

(5)使用Hive處理清洗數(shù)據(jù)并導出到臨時表

?

真正需要的數(shù)據(jù)將在此步得出,即:統(tǒng)計出top20的用戶點擊類目,將統(tǒng)計出的數(shù)據(jù)作為hive的一張臨時表:

item_20141216表存儲,備后用:

sql語句:?

?

CREATE?TABLE?

item_20141216?

AS?SELECT?

itemId,COUNT(1)?as?nums??

FROM

?mmb_ordercontribute

???GROUP?BY?

itemId?

ORDER?BY

?nums?DESC;

?

導出后的表item_20141216?存放在hive的默認數(shù)據(jù)倉庫下:

?

?

注:每行數(shù)據(jù)其實由兩部分組成,行號和數(shù)量,看著像一個數(shù)字是因為hive表字段的分隔符不是空格或者tab鍵,而是?\001

?

?

?

(6)使用sqoop將臨時表數(shù)據(jù)導出到mysql對應的表中

在mysql中創(chuàng)建與item_20141216對應的表

?

CREATE?TABLE?`item_contribute`?(

??`itemId`?varchar(11)?default?NULL?COMMENT?'條目id',

??`nums`?int(11)?default?NULL?COMMENT?'出現(xiàn)的次數(shù)'

)?ENGINE=MyISAM?DEFAULT?CHARSET=utf8;

?

進入sqoop客戶端執(zhí)行一下命令輸入連接信息:?

?sqoop?export?--connect?jdbc:mysql://master:3306/test?--username?hive?--password?123456?--table??item_contribute?--fields-terminated-by?'\001'?--export-dir?'/user/hive/warehouse/db1.db/item_20141216';

?

將會看到mysql表中的數(shù)據(jù)被填充:?

?

?

?

(7)接下來就可以利用java程序將數(shù)據(jù)組織成報表進行展示了!

?


?

總結

以上是生活随笔為你收集整理的hadoop2.20+hive+sqoop+mysql数据处理案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。