注:圖片如果損壞,點擊文章鏈接:https://www.toutiao.com/i6812629187518530052/
可能會有一些截圖中會有錯誤提示,是因爲本地的包一直包下載有問題,截完圖已經下載好了。
創建包結構
創建一個基礎信息類
所有輸出到mysql數據庫中的自定義MR任務的自定義key均需要實現該抽象類
代碼內容,主要是實現org.apache.hadoop.io.WritableComparable類,其它不需要寫
創建平臺信息類
創建全局配置常數類
後面慢慢添加內容
繼續完成PlatformInfoKey,添加構造函數
常數類添加信息
根據給定的參數值,構建多個不同維度的平臺維度對象
完成參數驗證
然後構建平臺信息
添加write和readFields方法
創建compareTo方法
添加get/set、hashCode、toString、equals方法,自動生成就可以
創建信息業務接口和實現類
完成接口
添加實現類
創建一個jdbc的管理器
常數類添加數據庫配置
JdbcManager添加jdbc連接
關閉數據庫連接
繼續完成BaseInfoConverterImpl,添加默認構造函數
添加一個緩存數據類型
繼續完成BaseInfoConverterImpl,添加方法創建cache key
創建獲取ID的方法
繼續編寫
添加下面的代碼
補全裏面的sql語句
添加兩個參數
完成getConnection()
完成executeSql
設置參數
添加關閉方法
創建一個UDF,模擬數據庫平臺數據記錄
添加內容
添加evaluate方法
創建一個測試類
創建數據庫
create database report
DROP TABLE IF EXISTS `platform`;
CREATE TABLE `platform` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
`platform_name` varchar(45) DEFAULT NULL COMMENT '平臺名稱',
`platform_version` varchar(10) DEFAULT NULL COMMENT '平臺版本',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='平臺信息表';
Sql語句
String querySql = "SELECT `id` FROM `platform` WHERE `platform_name` = ? AND `platform_version` = ? order by `id`";
String insertSql = "INSERT INTO `platform`(`platform_name`, `platform_version`) VALUES(?, ?)";
修改配置:
連接本地數據庫
運行結果
數據庫中
本地測試成功開始打包項目放進集羣進行測試
把打包好的jar包改名爲hive_udf3.jar放到集羣裏
進入MySQL中創建report數據庫
create database report;
創建表platform
進入hive
把jar包添加到hive當中
可以用list jar 和 delete jar 分別顯示jar和刪除jar
創建臨時函數
create temporary function convert_bl as 'com.xlgl.wzy.hive.udf.PlatformConverterUDF';
我們可以用show_functions查看函數
我們查看已有表的數據
select ename,convert_bl(ename,0) lower_name from emp;
這裏報了一個異常
這個問題可能是出在maven給的版本和hive的版本不一樣導致可以替換成自己的版本
然後重新打成jar包運行一下
再查詢一下
select ename,convert_bl(ename,0) lower_name from emp;
可以在mysql中查看數據