Hadoop專案練習
1 資料處理
2 統計網站不同瀏覽器訪問次數
2.1 解析工具
https://github.com/LeeKemp/UserAgentParser
下載後用 maven 編譯
安裝
2.1.1 測試解析工具
修改 pom
<dependency>
<groupId>com.kumkee</groupId>
<artifactId>UserAgentParser</artifactId>
<version>0.0.1</ version>
</dependency>
package com.bzt.cn.hdfs.useragent;
import com.kumkee.userAgent.UserAgent;
import com.kumkee.userAgent.UserAgentParser;
public class UserAgentTest {
public static void main(String[] args) {
String source = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" ;
UserAgentParser userAgentParser = new UserAgentParser();
UserAgent agent = userAgentParser.parse(source);
String browser = agent.getBrowser();
String engine = agent.getEngine();
String engineVersion = agent.getEngineVersion();
String os = agent.getOs ();
String platform = agent.getPlatform();
boolean isMobile = agent.isMobile();
System.out.println(browser + ", " + engine + " , " + engineVersion + " ,"
+ os + " ," + platform + ", " + isMobile);
}
}
2.2 抽取部分資料
[[email protected] ~]$ ll
total 2752
-rw-r--r--. 1 hadoop hadoop 2769741 Oct 17 2017 10000_access.log
-rw-r--r--. 1 hadoop hadoop 58 Oct 30 10:13 animal.txt
drwxrwxr-x. 11 hadoop hadoop 236 Oct 29 10:49 apps
drwxrwxr-x. 4 hadoop hadoop 30 Oct 25 21:59 elasticsearchData
drwxrwxr-x. 4 hadoop hadoop 28 Sep 14 19:02 hbase
drwxrwxr-x. 4 hadoop hadoop 32 Sep 14 14:44 hdfsdir
drwxrwxr-x. 3 hadoop hadoop 17 Oct 29 11:00 hdp2.6-cdh5.7-data
-rw-r--r--. 1 hadoop hadoop 46 Oct 29 22:33 hello.txt
drwxrwxrwx. 3 hadoop hadoop 18 Oct 24 21:45 kafkaData
-rw-rw-r--. 1 hadoop hadoop 0 Oct 24 21:58 log-cleaner.log
drwxrwxr-x. 5 hadoop hadoop 133 Oct 23 14:40 metastore_db
-rw-r--r--. 1 hadoop hadoop 6709 Oct 30 10:30 part.jar
drwxrwxr-x. 3 hadoop hadoop 63 Oct 24 21:21 zookeeperData
-rw-rw-r--. 1 hadoop hadoop 26108 Oct 25 17:54 zookeeper.out
[[email protected] ~]$ head -n 100 10000_access.log > 100_access.log
[[email protected] ~]$ wc -l 100_access.log
100 100_access.log
[[email protected] ~]$
一條資料
183.162.52.7 - - [10/Nov/2016:00:01:02 +0800] "POST /api3/getadv HTTP/1.1" 200 813 "www.imooc.com" "-" cid=0×tamp=1478707261865&uid=2871142&marking=androidbanner&secrect=a6e8e14701ffe9f6063934780d9e2e6d&token=f51e97d1cb1a9caac669ea8acc162b96 "mukewang/5.0.0 (Android 5.1.1; Xiaomi Redmi 3 Build/LMY47V),Network 2G/3G" "-" 10.100.134.244:80 200 0.027 0.027
2.3 本地測試
package com.bzt.cn.hdfs.useragent;
import com.kumkee.userAgent.UserAgent;
import com.kumkee.userAgent.UserAgentParser;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UserAgentTest {
@Test
public void testReadFile() throws Exception {
String path = "d://100_access.log";
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(new File(path)))
);
String line = "";
int i = 0;
Map<String, Integer> browserMap = new HashMap<>();
UserAgentParser userAgentParser = new UserAgentParser();
while (line != null) {
line = reader.readLine(); //一次讀入一行資料
i++;
if (StringUtils.isNotBlank(line)) {
String source = line.substring(getCharacterPosition(line, "\"", 7)) + 1;
UserAgent agent = userAgentParser.parse(source);
String browser = agent.getBrowser();
String engine = agent.getEngine();
String engineVersion = agent.getEngineVersion();
String os = agent.getOs();
String platform = agent.getPlatform();
boolean isMobile = agent.isMobile();
Integer browserValue = browserMap.get(browser);
if (browserValue != null) {
browserMap.put(browser, (browserValue + 1));
} else {
browserMap.put(browser, 1);
}
System.out.println(browser + ", " + engine + " , " + engineVersion + " ,"
+ os + " ," + platform + ", " + isMobile);
}
}
System.out.println("Records: " + (i - 1));
System.out.println("===============================================");
for (Map.Entry<String, Integer> entry : browserMap.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}
/*
* 測試自定義的方法
* */
@Test
public void testGetCharacterPosition() {
String value = "183.162.52.7 - - [10/Nov/2016:00:01:02 +0800] \"POST /api3/getadv HTTP/1.1\"";
int index = getCharacterPosition(value, "\"", 2);
System.out.println(index);
}
/*
* 獲取指定字串中指定標識字串出現索引的位置
* */
private int getCharacterPosition(String value, String operator, int index) {
Matcher slashMatcher = Pattern.compile(operator).matcher(value);
int mIdx = 0;
while (slashMatcher.find()) {
mIdx++;
if (mIdx == index) {
break;
}
}
return slashMatcher.start();
}
/**
* 單元測試
*/
public void testUserAgentParser() {
//public static void main(String[] args) {
String source = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
UserAgentParser userAgentParser = new UserAgentParser();
UserAgent agent = userAgentParser.parse(source);
String browser = agent.getBrowser();
String engine = agent.getEngine();
String engineVersion = agent.getEngineVersion();
String os = agent.getOs();
String platform = agent.getPlatform();
boolean isMobile = agent.isMobile();
System.out.println(browser + ", " + engine + " , " + engineVersion + " ,"
+ os + " ," + platform + ", " + isMobile);
}
}
3 用 MapReduce 實現
3.1 pom 檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bzt.cn</groupId>
<artifactId>test-hdfs-api</artifactId>
<version>1.0</version>
<name>test-hdfs-api</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
</properties>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.kumkee</groupId>
<artifactId>UserAgentParser</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>urlcount.BrowserCount</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</build>
</project>
3.2 原始碼
package urlcount;
import com.kumkee.userAgent.UserAgent;
import com.kumkee.userAgent.UserAgentParser;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Partitioner;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BrowserCount {
public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
LongWritable one = new LongWritable(1);
private UserAgentParser userAgentParser;
@Override
protected void setup(Context context) throws IOException, InterruptedException {
userAgentParser = new UserAgentParser();
}
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//一行日誌資訊
String line = value.toString();
String source = line
相關推薦
Hadoop專案練習
1 資料處理
2 統計網站不同瀏覽器訪問次數
2.1 解析工具
https://github.com/LeeKemp/UserAgentParser 下載後用 maven 編譯 安裝
2.1.1 測試解析工具
修改 pom
<dependency&
JavaWeb專案練習--專案生疏知識點整理
1)Trim() 從當前 String 物件移除所有前導空白字元和尾部空白字元
2)比較字串相等使用 str1.equals(str2)
切忌使用 " == "來比較
==為數字型別比對
3)<a> 標籤的 target 屬性規定在何處開啟連結文件。
4)登
JavaWeb專案練習--支付模組、後臺部分模組(手風琴下拉選單、上傳技術)
易寶支付
線上支付的兩種形式:
1. 電商與銀行直連!
安全
不收手續費
不與小電商合作!
2. 第三臺支付平臺
支付寶
易寶
財富通
好處:
不安全
收手續費(1%)
小電商可以與其合作!
需要在第三方註冊賬戶
需要認證!
我
JavaWeb專案練習--購物車模組、訂單模組
購物車模組
購物車儲存方式:
1)儲存在session中;此次專案儲存在session中
2)儲存在cookie中;
3)儲存在資料庫中:
不同方式的優缺點:
1.Session(Memcached)方式
優點:購物車資訊儲存在服務端,可以儲存1M 資訊。
缺點
JavaWeb專案練習--分類模組、圖書模組
分類模組
1 分類模組的相關類建立
ywnxbx.bookstore.category
domain:Category
dao:CategoryDao
service:CategoryService
web.servlet:CategoryServlet
class 2-3 小專案練習
空氣質量分指數計算方法(框架)
1 def cal_liner(iaqi_lo,iaqi_hi,bp_lo,bp_hi,cp):
2 """範圍縮放"""
3 iaqi =(iaqi_hi - iaqi_lo)*(cp -bp_lo) /(bp_hi - bp_l
class 2-2 小專案練習
一. 判斷第幾天
閏年(四年一閏,百年不閏,四百年再閏)
元組(tuple)
用於表達固定資料項、函式多返回值等
特點: 1.元素可以是不同型別(元組通常不同資料組成,列表通常由相同型別資料組成)
2.元組中各元素存在先後關係,可通過索引訪問元組中元素(元組表示的是結構,列表表示的是順序)
python列表專案練習
product_list = [
('Iphone',5800),
('Mac Pro',9800),
('Bike',800),
('Watch',10600),
('Coffee',31),
('Alex Python',120)
js專案練習第二課
百度輸入法
<style>
*{
list-style: none;
text-decoration: none;
padding: 0;
margin: 0;
嵌入式小專案練習-光電設計競賽-尋跡小車-03-尋跡演算法分析與原始碼
這裡我用了三個光敏電阻的感測器來進行尋跡:這裡用X1,X2,X3(檢測到了為0)來表示:
演算法思路:
將三個感測器放置如圖: | |  
awk與grep 日誌實際專案練習
shell統計日誌,求每五分鐘訪問量的寫法
日誌格式如下:訪問IP、時間、返回狀態碼 XX.XX.XX.XX - - [09/Sep/2015:10:30:00 +0800] 200 XX.XX.XX.XX - - [09/Sep/2015:10:34:00
專案練習(二)—微博資料結構化
1.ETL概念 ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將資料從來源端經過抽取(extract)、互動轉換(transform)、載入(load)至目的端的過程。
2.專案目標:
本次專案側重於資料的整合(即將檔案中
專案練習:百度翻譯小程式
1 # -*- coding:utf-8 -*-
2 # Author:Sure Feng
3
4 import requests
5 import json
6 import sys
7
8 class BaiduFanyi(object):
9 def __init__
vue小專案練習——輸入標題並將輸入的標題新增到標題列表
第一次寫部落格,先自我介紹一下吧,我是18屆中國石油大學(華東)電腦科學與技術專業的本科畢業生[有沒有學長或者學姐,吱吱吱],現從事前端工作。希望通過這個部落格記錄自己的學習之路,加油! 今天沒有開發任務,自學了一下vue,做了個小練習。 之前只是簡單看了一下vue的模板語法,今天的小例項讓
專案練習:電影列表爬蟲
1 # -*- coding:utf-8 -*-
2 # Author:Sure Feng
3
4 import requests
5 import json
6
7
8 class DoubanFileSpider(object):
9 def __init__(sel
selenium模組(九):專案練習
自動登入163郵箱併發送郵件
#注意:網站都策略都是在不斷變化的,精髓在於學習流程。下述程式碼生效與2017-11-7,不能保證永久有效
from selenium import webdriver
from selenium.webdriver import ActionChain
Web開發基礎_Servlet學習_0025_專案練習(八)
專案名稱:中國電信運營支援系統-網路版(七)
專案登記部分
jstl:import標籤 <c:import>說明
案例演示:
工程案例目錄結構
MainServlet.java
package web;
import java.i
Web開發基礎_Servlet學習_0029_專案練習(十)
專案名稱:中國電信運營支援系統-網路版(十)
驗證碼
登入驗證碼
案例演示:
工程案例目錄結構
DBUtil.java
package util;
import java.io.IOException;
import java.sql.Connec
Web開發基礎_Servlet學習_0031_專案練習(十一)
專案名稱:中國電信運營支援系統-網路版(十一)
登入檢查
如果不做登入檢查,會導致任何非法請求都可登入系統,系統安全系會很差。
一般登入檢查都會使用到過濾器Filter。基於此我們新增此功能。
案例演示:
工程案例目錄結構
web.xml
<?xm
專案練習(一)APP熱點標籤分析
專案練習(一)APP熱點標籤分析
1、專案背景
通過找到熱度標籤,贈標籤熱度,以提高相應APP的下載量和使用量。
2、需求分析
(1)爬取資料: 6個欄位,分別為(appId,app名稱, 一級分類,二級分類,三級分類,Tags描述資訊),但並不一定完全規整,視實際情況可能左