獲取用戶時(shí)間信息MR 筆記

時(shí)間:2017.8.28

開發(fā)工程:user-profile/processor/profile

位置:./user-profile/processor/profile/src/main/java/me/cxxxyx/log_process

數(shù)據(jù)庫(kù):HBase - hadoop@hd1

參考代碼:UserVisitLogExtraction.java

MR

HBase

hbase shell

常用的Shell命令胆萧,參考

創(chuàng)建新的表番电,action_time

  • time_uid_action(ID) uid(用戶ID) action(活動(dòng)) time(發(fā)生時(shí)間) duration(持續(xù)時(shí)間) extra(額外信息)
list  # 查看有哪些表
describe 'problem'  # 顯示表結(jié)構(gòu),僅包含列族

創(chuàng)建表

create 'action_time', {NAME => 'info', VERSIONS => 1}

創(chuàng)建成功

hbase(main):004:0> describe 'action_time'
Table action_time is ENABLED
action_time
COLUMN FAMILIES DESCRIPTION
{NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATIO
N_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL
 => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKSIZE => '65536', IN_MEMORY =>
 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.0410 seconds

hbase(main):005:0>

添加一條測(cè)試數(shù)據(jù)

put 'action_time','20170823_testUID_login','info:uid','testUID'
put 'action_time','20170823_testUID_login','info:action','login'
put 'action_time','20170823_testUID_login','info:time','20170823'
put 'action_time','20170823_testUID_login','info:duration','20000'

數(shù)據(jù)

hbase(main):009:0> scan 'action_time'
ROW                                           COLUMN+CELL
 20170823_testUID_login                       column=info:action, timestamp=1503474231369, value=login
 20170823_testUID_login                       column=info:duration, timestamp=1503474241524, value=20000
 20170823_testUID_login                       column=info:time, timestamp=1503474236443, value=20170823
 20170823_testUID_login                       column=info:uid, timestamp=1503474155795, value=testUID
1 row(s) in 0.0270 seconds

hbase(main):010:0>

將表信息與結(jié)構(gòu)添加至項(xiàng)目:synchronous-data/hbase-table-doc 備份


MySQL

顯示橋服務(wù)器的IP和端口號(hào):

ifconfig

使用Navicat部逮,先登錄SSH优幸,再登錄線上的MySQL,查詢語(yǔ)句,限制20行

select id, user_id from symptomchecker_doctor limit 20

日志

查看用戶的日志信息

hadoop fs -ls /logs/django/
hadoop fs -get /logs/django/elapsed_logger.log-20170822.lzma

Log數(shù)據(jù)的樣式

-rw-r--r--   3 root   hadoop 2628559529 2017-08-23 00:23 /logs/django/elapsed_logger.log-20170822.gz
-rw-r--r--   3 hadoop hadoop  931489800 2017-08-23 04:09 /logs/django/elapsed_logger.log-20170822.lzma

解壓文件胯盯,時(shí)間有點(diǎn)長(zhǎng)

unlzma elapsed_logger.log-20170822.lzma

Hadoop可視化網(wǎng)址:http://md3:8888/hbase/

查詢數(shù)據(jù)

head -20000 elapsed_logger.log-20170822 | grep 'daily_request'

數(shù)據(jù)格式,核心是uid计露,請(qǐng)求是daily_request博脑,用戶的核心信息

2017-08-22 00:01:30,018 INFO log_utils.log_elapsed_info Line:134  Time Elapsed: 0.015565s, 
Path: /api/daily_request/, Code: 200, Get: [u'phoneType=iPhone7,1', u'push_id=068643ec746684e213c65d2fed18f2f961503d8afa61466c635685033d399f42', 
u'vendor=ziyou', u'deviceModel=iPhone', u'app=1', u'client=DoctorClient', 
u'platform=iPhone', u'version=4.9.8', u'build=4.9.8', u'systemVer=9.3.3', u'device_id=eefcae739890448a9d17e65d3f9ce47b', 'uid=68674437'], 
Post: [], 121.204.121.33, CxxxyxClinic/4.9.8 (iPhone; iOS 9.3.3; Scale/3.00), 
view_name: api.views.daily_request,

MR作業(yè)

類:UserActionTimeExtraction

將日志的信息,從Log中導(dǎo)入至ActionTime表

測(cè)試正則表達(dá)式票罐,group的數(shù)量是groupCount+1叉趣,第一維時(shí)間,第二維路徑该押,第三維uid疗杉,參考

public class Test {
    public static void main(String[] args) {
        final String REGEX =
            "(\\d{4}-\\d{1,2}-\\d{1,2} \\d{2}:\\d{2}:\\d{2}).*Path: (/.*/).*Get: \\[.*'uid=(.*?)'.*].*?";
        Pattern mPattern = Pattern.compile(REGEX);

        String line = "xxx";

        Matcher m = mPattern.matcher(line);
        if (m.find()) {
            for (int i = 0; i < m.groupCount(); i++) {
                System.out.println(m.group(i+1));
            }
        }
    }
}

創(chuàng)建MR作業(yè),循環(huán)添加日志信息

public static Job configureJob(Configuration conf, String args[]) throws IOException, ParseException {
    //args 20170711  20170712
    Job job = new Job(conf, JOB_NAME);
    Date startDate = DateUtils.getDate(args[0], TIME_FORMAT);  // 開始時(shí)間蚕礼,如20170711
    Date endDate = DateUtils.getDate(args[1], TIME_FORMAT);  // 結(jié)束時(shí)間烟具,如20170712

    while (startDate.getTime() <= endDate.getTime()) {
        // Log信息的地址
        String path = String.format(LOG_PATH_FORMAT, DateUtils.getDateStr(startDate, TIME_FORMAT));
        System.out.println(path);
        FileInputFormat.addInputPath(job, new Path(path));
        startDate = addDays(startDate, 1);  // 每次增加1天
    }
    job.setJarByClass(UserActionTimeExtraction.class);  // Jar的類
    job.setSpeculativeExecution(false);
    job.setMapperClass(innerMapper.class);  // MapperClass
    job.setNumReduceTasks(0);
    job.setSpeculativeExecution(false);
    job.setInputFormatClass(TextInputFormat.class);
    job.setMapOutputKeyClass(NullWritable.class);
    job.setMapOutputValueClass(NullWritable.class);
    job.setOutputFormatClass(NullOutputFormat.class);
    return job;
}

輸出

2017-08-23 00:00:00
/robot/p/upload_sleep_raw_data/
123121

執(zhí)行命令:

mvn clean; mvn package
scp ./target/profile-1.1.1-jar-with-dependencies.jar wangchenlong@bridge.cxxxyx.me:/home/wangchenlong/profile-1.1.1-jar-with-dependencies.jar
scp ./profile-1.1.1-jar-with-dependencies.jar hadoop@hd1:/home/hadoop/wangchenlong/profile-1.1.1-jar-with-dependencies.jar
hadoop jar ./profile-1.1.1-jar-with-dependencies.jar me.cxxxyx.log_process.UserActionTimeExtraction 20170822 20170822 1>0 2>log.txt

查看MR作業(yè)的執(zhí)行情況,網(wǎng)址.

最終作業(yè)效果:

2017-08-22_62908362_login,62908362,login,2017-08-22 08:28:27,55435
2017-08-22_119001707_login,119001707,login,2017-08-22 22:21:44,18
2017-08-22_95913164_login,95913164,login,2017-08-22 04:58:00,4567
2017-08-22_96516401_login,96516401,login,2017-08-22 06:41:27,42999
2017-08-22_119001704_login,119001704,login,2017-08-22 22:21:43,0
2017-08-22_119001710_login,119001710,login,2017-08-22 22:21:48,9
2017-08-22_984347_login,984347,login,2017-08-22 22:36:02,5018
2017-08-22_95897600_login,95897600,login,2017-08-22 00:00:06,79387
2017-08-22_74287233_login,74287233,login,2017-08-22 06:43:49,44532
2017-08-22_30766974_login,30766974,login,2017-08-22 08:13:40,56185

查看日志的時(shí)間范圍:

hadoop fs -ls /logs/django/
/logs/django/elapsed_logger.log-20170101.gz
/logs/django/elapsed_logger.log-20170824.gz

報(bào)錯(cuò)奠蹬,原因是Hadoop的資源被全部占用朝聋。

at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:323)

顯示MR的信息,訪問(wèn)網(wǎng)址囤躁,與執(zhí)行進(jìn)度冀痕。

INFO mapreduce.Job: The url to track the job: http://md3:8088/proxy/application_1489390879204_16905/
INFO mapreduce.Job: Running job: job_1489390879204_16905
INFO mapreduce.Job: Job job_1489390879204_16905 running in uber mode : false
INFO mapreduce.Job:  map 0% reduce 0%

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市割以,隨后出現(xiàn)的幾起案子金度,更是在濱河造成了極大的恐慌,老刑警劉巖严沥,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猜极,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡消玄,警方通過(guò)查閱死者的電腦和手機(jī)跟伏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門丢胚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人受扳,你說(shuō)我怎么就攤上這事携龟。” “怎么了勘高?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵峡蟋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我华望,道長(zhǎng)蕊蝗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任赖舟,我火速辦了婚禮蓬戚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宾抓。我一直安慰自己子漩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布石洗。 她就那樣靜靜地躺著幢泼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讲衫。 梳的紋絲不亂的頭發(fā)上旭绒,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音焦人,去河邊找鬼挥吵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛花椭,可吹牛的內(nèi)容都是我干的忽匈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼矿辽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丹允!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起袋倔,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雕蔽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宾娜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體批狐,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚣艇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片承冰。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖食零,靈堂內(nèi)的尸體忽然破棺而出困乒,到底是詐尸還是另有隱情,我是刑警寧澤贰谣,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布娜搂,位于F島的核電站,受9級(jí)特大地震影響吱抚,放射性物質(zhì)發(fā)生泄漏涌攻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一频伤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芝此,春花似錦憋肖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膊升,卻和暖如春怎炊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背廓译。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工评肆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人非区。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓瓜挽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親征绸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子久橙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容