美國留學(xué)選擇什么專業(yè)好?留學(xué)美國熱門專業(yè)推薦
2019-06-26
更新時(shí)間:2024-08-09 22:23作者:小樂
題號:試題01 模塊2:數(shù)據(jù)采集與處理(一) 任務(wù)1:數(shù)據(jù)采集與清洗1、子任務(wù)1:數(shù)據(jù)采集
啟動(dòng)Hadoop集群,使用HDFS Shell命令在HDFS根目錄下級聯(lián)創(chuàng)建名為/behavior/origin_log的目錄,用于存儲收集的用戶行為日志;答案:hadoop fs -mkdir -p /behavior/origin_log
目錄創(chuàng)建完成。使用HDFS Shell命令將本地/root/eduhq/data/app_log/behavior目錄下的所有用戶行為日志文件收集到HDFS /behavior/origin_log目錄下;答案:hadoop fs -put /root/eduhq /data/app_log/behavior/* /behavior/origin_log
采集完成后,在本機(jī)打開瀏覽器,訪問http://本地主機(jī)名:9870或http://本地IP地址:9870進(jìn)入HDFS WebUI界面,查看數(shù)據(jù)是否已成功采集到HDFS。答:使用瀏覽器訪問即可。
2. 子任務(wù)2:數(shù)據(jù)清理
在Windows操作系統(tǒng)上使用Excel軟件打開名為“behavior2023-01-01.csv”的文件;
清理數(shù)據(jù)并關(guān)注名為“behavior2023-01-01.csv”的文件中的“時(shí)間”列。將時(shí)間和日期格式分為兩列:日期和時(shí)間?;卮穑?
(2)任務(wù)二:數(shù)據(jù)標(biāo)注開發(fā):開發(fā)一個(gè)簡單的Java類IpToLocUdf,繼承
org.apache.hadoop.hive.ql.udf.generic.GenericUDF,重載了initialize()、evaluate()和getDisplayString()方法;該類需要通過IP實(shí)現(xiàn)從/root/eduhq/data/area.json文件中隨機(jī)獲取“省”和“城市”信息,完成數(shù)據(jù)的分類和標(biāo)注。
答案:導(dǎo)入org.apache.hadoop.hive.ql.exec.UDFArgumentException;
導(dǎo)入org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
導(dǎo)入org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
導(dǎo)入org.apache.hadoop.hive.ql.metadata.HiveException;
導(dǎo)入org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
導(dǎo)入org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
導(dǎo)入org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
導(dǎo)入org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
導(dǎo)入org.codehaus.jackson.JsonNode;
導(dǎo)入org.codehaus.jackson.map.ObjectMapper;
導(dǎo)入org.codehaus.jackson.node.ObjectNode;
導(dǎo)入java.io.File;
導(dǎo)入java.io.IOException;
導(dǎo)入java.util.ArrayList;
導(dǎo)入java.util.List;
公共類IpToLocUdf 擴(kuò)展GenericUDF {
私有StringObjectInspector stringInspector;
私有ObjectInspector 輸出OI;
//初始化函數(shù),用于設(shè)置函數(shù)參數(shù)和輸出類型
/*
該初始化方法的主要作用是驗(yàn)證輸入?yún)?shù)的數(shù)量和類型,并將輸出類型設(shè)置為字符串。
如果輸入的參數(shù)不符合要求,則會拋出異常。
最后,它返回一個(gè)輸出類型的ObjectInspector 供其他方法使用。
*/
@覆蓋
公共ObjectInspector 初始化(ObjectInspector []參數(shù))拋出UDFArgumentException {
//檢查參數(shù)個(gè)數(shù)是否為1,如果不是則拋出異常
if (arguments.length !=1) {
拋出新的UDFArgumentLengthException(
'函數(shù)iptoloc(ip) 只接受1 個(gè)參數(shù)。');
}
//檢查第一個(gè)參數(shù)是否為StringObjectInspector類型,如果不是則拋出異常
if (!(arguments[0] StringObjectInspector 實(shí)例)) {
拋出新的UDFArgumentTypeException(0,
'參數(shù)必須是字符串,但是' + argument[0].getTypeName()
+ '已給出。');
}
//將第一個(gè)參數(shù)設(shè)置為字符串類型的ObjectInspector
this.stringInspector=(StringObjectInspector) 參數(shù)[0];
//設(shè)置輸出類型為string,并通過反射創(chuàng)建ObjectInspector實(shí)例
this.outputOI=ObjectInspectorFactory.getReflectionObjectInspector(String.class,
ObjectInspectorFactory.ObjectInspectorOptions.JAVA);
//打印輸出類型的ObjectInspector信息
System.out.println(outputOI);
返回輸出OI; //返回輸出類型的ObjectInspector以供其他方法使用
}
@覆蓋
公共對象評估(DeferredObject []參數(shù))拋出HiveException {
//獲取傳入的IP地址參數(shù)
String ip=stringInspector.getPrimitiveJavaObject(arguments[0].get());
//從指定文件中讀取區(qū)域信息
//文件file=new File('/root/eduhq/data/area.json');
文件file=new File('/resources/area.json');
ObjectMapper 映射器=new ObjectMapper();
列出省份=new ArrayList();
列出城市=new ArrayList();
嘗試{
//解析JSON文件
JsonNode rootNode=mapper.readTree(file);
//遍歷JSON節(jié)點(diǎn)獲取省市信息
for (JsonNode 節(jié)點(diǎn): rootNode) {
String Province=node.path('province').getTextValue();
String city=node.path('city').getTextValue();
省份.add(省份);
城市.add(城市);
}
} catch (IOException e) {
throw new HiveException('無法讀取area.json file:' + e.getMessage(), e);
}
//根據(jù)IP地址進(jìn)行分類和標(biāo)簽
int 索引=ipToIndex(ip);
字符串省份=Provinces.get(index);
字符串城市=城市.get(索引);
//返回分類標(biāo)注結(jié)果
ObjectNode結(jié)果=mapper.createObjectNode();
result.put('省份', 省份);
結(jié)果.put('城市', 城市);
返回結(jié)果.toString();
}
@覆蓋
公共字符串getDisplayString(String[] 兒童) {
返回'iptoloc(' + Children[0] + ')';
}
私有int ipToIndex(字符串ip) {
//根據(jù)IP地址的某種算法得到索引值
//這里我們簡單的使用IP地址的字符長度模擬算法
返回ip.length() % 7;
}
}
org.apache.hive
hive 執(zhí)行程序
3.1.2
(三)任務(wù)三:數(shù)據(jù)統(tǒng)計(jì)1、子任務(wù)一:HDFS文件上傳下載
(1)將包“com.hive.udf”導(dǎo)出為名為hive-udf-behavior-1.0.0.jar的JAR文件并保存在本地
/root/eduhq/udf_jars 目錄;
答案:https://blog.csdn.net/gb4215287/article/details/132793531
(2)將打包后的文件hive-udf-behavior-1.0.0.jar上傳到HDFS的/hive/udf_jars目錄下;
答案:hadoop fs -put hive-udf-behavior-1.0.0.jar /hive/udf_jars
(3)在Hive客戶端中,創(chuàng)建永久函數(shù)url_trans和get_city_by_ip,并與開發(fā)的類關(guān)聯(lián)起來;
答案:添加jar /root/eduhq/udf_jars/hive-udf-behavior-1.0.0.jar
創(chuàng)建函數(shù)url_trans 作為com.hive.udf.url_trans;
創(chuàng)建函數(shù)get_city_by_ip 為com.hive.udf.get_city_by_ip;
(4)在Hive客戶端上,使用select語句測試url_trans和get_city_by_ip函數(shù);
答:根據(jù)具體功能使用。例如:
選擇get_city_by_ip(ip);
(5)啟用Hive的動(dòng)態(tài)分區(qū)功能,并將Hive設(shè)置為非嚴(yán)格模式;
答案:設(shè)置hive.exec.dynamic.partition=true;
設(shè)置hive.exec.dynamic.partition.mode=nostrict;
(6)使用insert overwrite . select .子句將ods_behavior_log表中的數(shù)據(jù)插入到分區(qū)表dwd_behavior_log中,實(shí)現(xiàn)基于dt的動(dòng)態(tài)分區(qū)。
答案:插入覆蓋表dwd_behavior_log PARTITION (dt) select *,date_format(dt,'yyyy-MM-dd') from ods_behavior_log;
2. 子任務(wù)2:數(shù)據(jù)統(tǒng)計(jì)
查看dwd_behavior_log表所有現(xiàn)有分區(qū);答案:顯示分區(qū)dwd_behavior_log;
查看外部表dwd_behavior_log中前3行數(shù)據(jù),驗(yàn)證URL協(xié)議是否統(tǒng)一為“http”,是否可以通過IP獲取“省”和“城市”信息;答案:SELECT * FROM dwd_behavior_log LIMIT 3;
從dwd_behavior_log 選擇URL,其中URL 類似于“http://%”;
返回以“http://”開頭的所有URL。如果返回的行數(shù)大于0,則說明URL協(xié)議統(tǒng)一為“http”。
通過ip獲取省份,例如: select get_city_by_ip(ip);
統(tǒng)計(jì)外部表dwd_behavior_log的數(shù)據(jù)總行數(shù)。答案:從dwd_behavior_log 中選擇COUNT(*);
獲取更多資訊,請聯(lián)系
武漢微眾智能創(chuàng)新科技有限公司
了解更多信息請登錄www.whwzzc.com,咨詢電話13037102709
*本資料中的產(chǎn)品圖片和技術(shù)數(shù)據(jù)僅供參考,如有更新,恕不另行通知。微眾保留對具體內(nèi)容的解釋權(quán)。