Hive和mapreduce相關的排序和運行的參數
1.設置每個reduce處理的數據量(單位是字節)
我們在hive中查看下
配置文件hive-site.xml.template
我們打開配置文件可以看到
這是256MB
如果超過1G,將使用4個reducers
2、設置最大運行的reduce的個數
同上我們可以在配置中找到下面的內容
複製到記事本裡,簡化了描述,從配置中我們可以看到默認reduce個數是1009
3.實際運行的reduce的個數
這個去哪裡看呢?我們用之前執行過的reduce
訪問8088埠,查看歷史history
進入後在configuration中可以搜索到,可以看到我們的語句是否有reduce。
默認設置在hive中可以看到
如果我們使用下面的排序,是否reduce的數量有關係呢?
order by 全局排序
sort by:局部排序
distribute by (底層是MR分區)
cluster by:相當於distribute by + sort by組合使用
假如我們設置成3個
執行語句
select * from emp order by sal;
所以對於order by 全局排序,設置多個reduce的沒有太大作用。
執行語句
Insert overwrite local directory '/data/hivetest/export_local_emp' select * from emp sort by sal desc;
查看結果,reduce是3個
生成文件
查看文件內容,可以看到每個都排序了
所以對於sort by 局部排序,設置多個reduce的是有作用的。
執行語句
insert overwrite local directory '/opt/hivetest/distribute_test' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp distribute by deptno sort by sal ;
我們查看文件
查看文件內容,都已經排序了
所以對於distribute by 局部排序,設置多個reduce的是有作用的。有兩個注意的地方
(1)可以按照指定的欄位進行分區
(2)先分區後排序,一般和sort by聯合使用
執行語句
insert overwrite local directory '/data/hivetest/cluster_test' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp cluster by sal ;
查看文件
查看內容
所以對於cluster by 局部排序,設置多個reduce的是有作用的,排序只能降序排序,不能指定排序規則
自定義函數(UDF)一進一出
實現一個功能,轉換大小寫,
首先創建一個maven項目
添加依賴
下面是依賴的主要內容
創建一個類
編寫代碼
編寫一個測試方法,測試代碼
將寫好的代碼打成jar包,上傳linx
一直點擊下一步,其中注意主類的選擇
將jar添加到hive裡面去
add jar /data/hivetest/hive_udf.jar;
將包上傳
我們進入hive,使用db_deptemp庫
執行命令
list jars 和 delete jar 分別是顯示jar和刪除jar
創建臨時函數
create temporary function convert_bl as 'com.xlglvc.xxx.mapredece.hiveudf.TestHiveUDF';
可以利用show functions查看函數
我們查看已有表的數據,可以看到很多大寫的名字
執行我們的函數就可以了