本課程的視頻教程地址:《用戶行爲分析之編碼實踐》html
本課程以用戶行爲分析案例爲基礎,帶着你們去完成對各個KPI的編碼工做,以及應用調度工做,讓你們經過本課程掌握Hadoop項目的編碼、調度流程。下面咱們來看看本課程有哪些課時,以下圖所示:前端
首先,咱們來學習第一課時:《Hadoop項目基礎代碼》。java
本課時介紹編寫Hadoop基礎代碼及腳本,在前面搭建好的Hadoop項目工程上, 完成項目的基本代碼的編寫,以及一些注意事項,爲編寫核心代碼作準備,讓你們掌握Hadoop項目的基礎代碼開發。mysql
本課時主要包含如下知識點,以下圖所示:sql
下面,我爲你們介紹Hadoop項目工程的基本信息配置,因爲本課程屬於編碼實踐,因此設計到編碼的相關流程。 因此你們在學習的時候,請事先將集羣啓動,IDE打開。下面我給你們演示以下內容,他們分別是:數據庫
基礎代碼實現包含的內容,以下圖所示:apache
具體演示細節,你們能夠觀看視頻,這裏我就很少作贅述了。《觀看地址》服務器
本課時介紹如何去實現Hadoop的核心代碼模塊, 在基礎代碼模塊上,完成核心代碼的實現,讓你們掌握項目相關指標的統計開發。socket
下面咱們來看看本課時有那些知識點,以下圖所示:工具
下面咱們來看看離線結果統計的處理方式有哪些,這裏,我用一個圖來講明,在離線統計中的統計方式,以下圖所示:
這裏,從圖中咱們能夠看出,咱們可使用編寫Hive腳本或Hive應用程序來統計, 也能夠編寫MapReduce程序來完成統計,也能夠組合使用,這裏,本課程的案例, 我使用的是組合使用,用Hive和MapReduce組合來完成。
接着來看核心代碼實現的內容,以下圖所示:
腳本以下所示:
#建立分區 CREATE EXTERNAL TABLE ubas(ip string, timespan string, url string,hour string)PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/home/hdfs/ubas/out/meta'
統計的KPI腳本,以下所示:
# clean hdfs data and output /home/hadoop/hadoop-2.6.0/bin/hadoop jar ubas-1.0.0-jar-with-dependencies.jar $1 # use hive to stats ## 1.location data to partition /home/hadoop/hive-0.14.0-bin/bin/hive -e "ALTER TABLE ubas ADD PARTITION(logdate='$1') LOCATION '/home/hdfs/ubas/out/meta/$1';" ## 2.stats pv /home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE pv_$1 AS SELECT COUNT(1) AS PV FROM ubas WHERE logdate='$1';" ## 3.stats ip /home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE ip_$1 AS SELECT COUNT(DISTINCT ip) AS IP FROM ubas WHERE logdate='$1';" ## 4.stats amount hour /home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE amount_$1 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS SELECT '$1',hour AS HOUR_TAG, COUNT(hour) AS HOUR,'' AS UPDATE_DATE FROM ubas WHERE logdate='$1' GROUP BY hour;" ## 5.stats jr /home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE jr_$1 AS SELECT COUNT(1) AS JR FROM (SELECT COUNT(ip) AS times FROM ubas WHERE logdate='$1' GROUP BY ip HAVING times=1) e;" ## 6.combine pv,ip,jr and tr to ubas table /home/hadoop/hive-0.14.0-bin/bin/hive -e "CREATE TABLE ubas_$1 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' AS SELECT '$1', a.pv, b.ip, c.jr, ROUND(COALESCE(CAST(b.ip AS DOUBLE), 0)/a.pv, 2),'' AS UPDATE_DATE FROM pv_$1 a JOIN ip_$1 b ON 1=1 JOIN jr_$1 c ON 1=1 ;" # sqoop data to mysql ## 1.sqoop t_kpi_day /home/hadoop/sqoop-1.4.5/bin/sqoop export -D sqoop.export.records.per.statement=100 --connect jdbc:mysql://10.211.55.26:3306/hadoop_ubas --username root --password root --table t_kpi_day --fields-terminated-by ',' --export-dir "/home/hive/warehouse/ubas_$1" --batch --update-key createdate --update-mode allowinsert; ## 2.sqoop t_kpi_hour /home/hadoop/sqoop-1.4.5/bin/sqoop export -D sqoop.export.records.per.statement=100 --connect jdbc:mysql://10.211.55.26:3306/hadoop_ubas --username root --password root --table t_kpi_hour --fields-terminated-by ',' --export-dir "/home/hive/warehouse/amount_$1" --batch --update-key createdate,kpi_code --update-mode allowinsert; # drop tmp table to hive warehouse /home/hadoop/hive-0.14.0-bin/bin/hive -e "drop table amount_$1;drop table ip_$1;drop table jr_$1;drop table pv_$1;drop table ubas_$1;"
本課時介紹將統計好的數據導出到關係型數據庫,以及對外提供數據共享接口,讓你們掌握導出數據的流程及共享接口程序的編寫。
本課時主要有一下知識點,以下圖所示:
下面咱們來看看使用 Sqoop 如何將 HDFS 上的統計結果導出到 MySQL 數據庫, 接下來,咱們來看看 Sqoop 的導出流程,以下圖所示:
首先,咱們是將統計結果存放在 HDFS 集羣上,而後咱們使用 Sqoop 工具去將 HDFS 的數據導出到關係型數據庫,如 MySQL 整個基本流程就是這樣。下面咱們來使用 Sqoop 工具對HDFS 上的數據進行導出,一樣,在使用導出功能時,這樣你們須要 安裝 Sqoop 工具,Sqoop 的安裝較爲簡單,你們能夠下去補充學習下,這裏就很少作贅述了。
接下來,咱們來看看數據共享流程,以下圖所示:
從圖中咱們能夠看出,咱們將統計後的結果存放在mysql數據庫中,這時咱們須要編寫一個rpc將數據共享出去,這裏我採用的共享方式是, 編寫一個thrift的服務接口,將數據經過這個接口共享出去,而後,前端同窗獲取數據後,能夠將數據結果以圖表的方式進行展現。
Thrift接口代碼,以下所示:
namespace java cn.jikexueyuan.ubas.service service UBASService { map<string, double> queryDayKPI(1:string beginDate,2:string endDate), map<double, double> queryHourKPI(1:string beginDate,2:string endDate) }
package cn.jikexueyuan.ubas.main; import org.apache.thrift.TProcessorFactory; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.server.THsHaServer; import org.apache.thrift.server.TServer; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TNonblockingServerSocket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cn.jikexueyuan.ubas.service.UBASService; import cn.jikexueyuan.ubas.service.impl.UBASServiceImpl; /** * @Date Mar 23, 2015 * * @Author dengjie */ public class StatsServer { private static Logger logger = LoggerFactory.getLogger(StatsServer.class); private final int PORT = 9090; @SuppressWarnings({ "rawtypes", "unchecked" }) private void start() { try { TNonblockingServerSocket socket = new TNonblockingServerSocket(PORT); final UBASService.Processor processor = new UBASService.Processor(new UBASServiceImpl()); THsHaServer.Args arg = new THsHaServer.Args(socket); /* * Binary coded format efficient, intensive data transmission, The * use of non blocking mode of transmission, according to the size * of the block, similar to the Java of NIO */ arg.protocolFactory(new TCompactProtocol.Factory()); arg.transportFactory(new TFramedTransport.Factory()); arg.processorFactory(new TProcessorFactory(processor)); TServer server = new THsHaServer(arg); server.serve(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { try { logger.info("start thrift server..."); StatsServer stats = new StatsServer(); stats.start(); } catch (Exception ex) { ex.printStackTrace(); logger.error(String.format("run thrift server has error,msg is %s", ex.getMessage())); } } }
本課時介紹將開發的Hadoop應用打包部署到服務器,配置並完成應用調度, 讓你們掌握Hadoop項目的打包和部署及調度流程。
本課時主要包含一下知識點,以下圖所示:
下面,咱們來看看項目打包插件的使用,首先打包的內容,下面咱們來看一張圖,以下圖所示:
關於使用Crontab進行定時調度,詳情你們能夠觀看視頻教程,這裏我就很少作贅述了。《觀看地址》
本課程咱們對項目的指標進行了編碼實踐,並指導你們去編碼實現相應的模塊功能,以及幫助你們去調度咱們開發的應用等知識,應該掌握一下知識,以下圖所示:
咱們在有了這些知識做爲基礎,會使得咱們在從此的工做中,開發相似的Hadoop項目變得遊刃有餘,更加的駕輕就熟。
這就是本課程的主要內容,主要就對Hadoop項目作相應的編碼實踐,完成各個KPI的開發模塊。
若是本教程能幫助到您,但願您能點擊進去觀看一下,謝謝您的支持!
轉載請註明出處,謝謝合做!
本課程的視頻教程地址:《用戶行爲分析之編碼實踐》