可能會有一些截圖中會有錯誤提示,是因為本地的包一直包下載有問題,截完圖已經下載好了。
創建包結構
創建一個基礎信息類
所有輸出到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方法
創建一個測試類
創建數據庫
<code>create
database
reportDROP
TABLE
IF
EXISTS
`platform`
;CREATE
TABLE
`platform`
(`id`
int
(11
)NOT
NULL
AUTO_INCREMENTCOMMENT
'主鍵id'
,`platform_name`
varchar
(45
)DEFAULT
NULL
COMMENT
'平臺名稱'
,`platform_version`
varchar
(10
)DEFAULT
NULL
COMMENT
'平臺版本'
, PRIMARYKEY
(`id`
) )ENGINE
=InnoDB
DEFAULT
CHARSET
=utf8 ROW_FORMAT=COMPACT
COMMENT
='平臺信息表'
;/<code>
Sql語句
<code>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
(?, ?)";
/<code>
修改配置:
連接本地數據庫
運行結果
數據庫中
本地測試成功開始打包項目放進集群進行測試
把打包好的jar包改名為hive_udf3.jar放到集群裡
進入MySQL中創建report數據庫
create database report;
創建表platform
進入hive
把jar包添加到hive當中
可以用list jar 和 delete jar 分別顯示jar和刪除jar
創建臨時函數
<code>create
temporary
function
convert_blas
'com.xlgl.wzy.hive.udf.PlatformConverterUDF'
;/<code>
我們可以用show_functions查看函數
我們查看已有表的數據
<code>select
ename,convert_bl(ename,0
) lower_namefrom
emp;/<code>
這裡報了一個異常
這個問題可能是出在maven給的版本和hive的版本不一樣導致可以替換成自己的版本
然後重新打成jar包運行一下
再查詢一下
<code>select
ename,convert_bl(ename,0
) lower_namefrom
emp;/<code>
可以在mysql中查看數據