本文目錄一覽:
大數據的核心技術有哪些
大數據技術的體系龐大且複雜,基礎的技術包含數據的採集、數據預處理、分佈式存儲、數據庫、數據倉庫、機器學習、並行計算、可視化等。
1、數據採集與預處理:FlumeNG實時日誌收集系統,支持在日誌系統中定製各類數據發送方,用於收集數據;Zookeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,提供數據同步服務。
2、數據存儲:Hadoop作為一個開源的框架,專為離線和大規模數據分析而設計,HDFS作為其核心的存儲引擎,已被廣泛用於數據存儲。HBase,是一個分佈式的、面向列的開源數據庫,可以認為是hdfs的封裝,本質是數據存儲、NoSQL數據庫。
3、數據清洗:MapReduce作為Hadoop的查詢引擎,用於大規模數據集的並行計算。
4、數據查詢分析:Hive的核心工作就是把SQL語句翻譯成MR程序,可以將結構化的數據映射為一張數據庫表,並提供HQL(HiveSQL)查詢功能。Spark啟用了內存分佈數據集,除了能夠提供交互式查詢外,它還可以優化迭代工作負載。
5、數據可視化:對接一些BI平台,將分析得到的數據進行可視化,用於指導決策服務。
如何通過flume將設備日誌採集入大數據平台
大數據時代,誰掌握了足夠的數據,誰就有可能掌握未來,而其中的數據採集就是將來的流動資產積累。
幾乎任何規模企業,每時每刻也都在產生大量的數據,但這些數據如何歸集、提煉始終是一個困擾。而大數據技術的意義確實不在於掌握規模龐大的數據信息,而在於對這些數據進行智能處理,從中分析和挖掘出有價值的信息,但前提是如何獲取大量有價值的數據。
在最近的工作當中,本人剛好實現了運用大數據技術分析網站訪問日誌的方案,整個方案包括對網站日誌的採集、清洗、存儲和統計分析,計劃通過幾篇文章將技術實現細節分享出來,以期引起更多的思考和討論。
網站訪問日誌介紹
相信很多做過網站管理的人對網站訪問日誌(Access Log)應該不會陌生,現在主流的網站服務器(如apache,tomcat,ngxin等)都支持將日誌數據記錄到服務器的日誌文件中。
網站的訪問日誌中記錄了很多有用的信息,比如正常用戶的訪問足跡、惡意搗亂的足跡、用戶的入站方式、出站頁面等等信息。對以上信息匯總分類後,可以得到更有價值的東西,比如可以得到搜索引擎的抓取頻率和來訪時間段、可以得到哪些頁面是用戶熱搜的等等。
首先看一個訪問日誌的例子:
10.52.10.49 – – [17/Sep/2014:11:34:21 +0800] “GET /webapp HTTP/1.1” 302 – “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36”
這是一個combined格式的訪問日誌,裏面記錄了用戶的訪問ip、時間、訪問地址、來源地址等。如要了解具體的格式說明,請查看相關資料。
日誌採集存儲方案
對於一個比較活躍的網站來說,訪問日誌將會是一個海量的數據,考慮到網站日誌更新頻繁、和海量數據的特點,我選擇了Flume + HBase的採集和存儲方案。
Flume
Flume最早是Cloudera提供的日誌收集系統,目前是Apache下的一個項目,Flume支持在日誌系統中定製各類數據發送方,用於收集數據。
Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定製)的能力 Flume提供了從console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日誌系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力。
HBase
HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。
本次方案以Tomcat為Web服務器,通過Flume實時監控網站的日誌文件並將新增日誌收集、清洗並保存到HBase中,供Spark等分佈計算框架分析使用等。
方案實現
前提條件:
已經在linux服務器上安裝並啟動了相關的程序:Tomcat7,Hadoop2.4.1,Zookeeper3.4.6,HBase0.98.5,Flume1.5。具體安裝步驟請自行查看相關文檔。
1. 首先開啟Tomcat中的日誌記錄功能,並選擇combined格式。
修改TOMCAT_PATH/conf/server.xml,增加日誌記錄:
Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log.” suffix=”.txt” renameOnRotate=”true”
pattern=”combined” /
這樣,tomcat就會在logs目錄下每天生成localhost_access_log文件並實時記錄用戶的訪問情況。
2. 實現日誌文件對象和解析程序
AccessLog.java:
public class AccessLog {
private String clientIp;
private String clientIndentity;
private String remoteUser;
private Date dateTime;
private String request;
private String httpStatusCode;
private String bytesSent;
private String referer;
private String userAgent;
…
}
AccessLogParser.java:
public class AccessLogParser {
private static String pattern = “^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \”(.+?)\” (\\d{3}) (\\d+|-) \”([^\”]+)\” \”([^\”]+)\””;
private static Pattern p = Pattern.compile(pattern);
public static AccessLog parse(String line){
Matcher matcher = p.matcher(line);
if (matcher.matches()){
AccessLog accessLog = new AccessLog();
accessLog.setClientIp(matcher.group(1));
accessLog.setClientIndentity(matcher.group(2));
accessLog.setRemoteUser(matcher.group(3));
accessLog.setDateTime(getDateTime(matcher.group(4)));
accessLog.setRequest(matcher.group(5));
accessLog.setHttpStatusCode(matcher.group(6));
accessLog.setBytesSent(matcher.group(7));
accessLog.setReferer(matcher.group(8));
accessLog.setUserAgent(matcher.group(9));
return accessLog;
}
logger.warn(“This line is not a valid combined log, ignored it. — ” + line);
return null;
}
3. 通過HBase Shell在HBase中建立相應的表access_log
執行:$HBASE_HOME/bin/hbase shell,進入shell命令行
create ‘access_log’,’cb’,創建access_log,和一個列族cb。因為hbase是一個列服務器,一個列族中可以增加很多列,為了性能考慮,一般不要創建多於三個列族。
出現如下提示信息,即創建成功
0 row(s) in 11.9690 seconds
= Hbase::Table – access_log
可以通過list命令查看數據庫中的表,或scan 『access_log』,查看錶中數據
4. 配置Flume,實現採集和存儲
在本方案中,我們要將數據存儲到HBase中,所以使用flume中提供的hbase sink,同時,為了清洗轉換日誌數據,我們實現自己的AsyncHbaseEventSerializer。
我用flume收集文件內容到mysql中,出現這個錯誤,該怎麼解決
啟動的時候,不要只輸入mysql,應該: mysql -u root -p /* 按回車後輸入密碼;如果密碼為空,則直接再按回車。這樣才是登陸的root用戶 */
如何用flume實時獲取mysql數據
寫一個SOCKET服務器,取出數據庫里所有的票,根據客戶端買票減去。並通知所有客戶端 客戶端也是SOCKET連上服務器,等服務器的更新信息 這個和聊天差不多原理。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/303145.html