Hive與MapReduce相關排序及自定義UDF函數

2020-12-17 分享電腦學習

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查看函數

我們查看已有表的數據,可以看到很多大寫的名字

執行我們的函數就可以了

相關焦點

  • hive函數
    高級內置函數:行列轉換函數,分析性函數。自定義函數:udf。以上是小編自己整理分類的,網上也有很多不同分類的版本,下圖就是在別人博客中我覺得比較好的分類方法。collect_set()去重,collect_list()不去重分析類函數row_number()  over(partitiion by .. order by .. ):根據partition排序,相同值取不同序號,不存在序號跳躍rank() over(partition by ..  order by .)
  • Hive(七) ----函數
    lag: 返回當前行數據的上一行數據lead:返回當前行數據的下一行數據first_value:將數據分組排序後,截止到當前行,第一個值last_value:將數據分組排序後,截止到當前行,最後一個值ntile:將數據分組排序後,順序切分成n分,返回當前切片值-- 測試數據cookie1,2019-04-10,1
  • 一網打盡Hive高頻面試題
    但是排序只能是升序排序,不能指定排序規則為ASC或者DESC。在生產環境中Order By用的比較少,容易導致OOM。在生產環境中Sort By + Distrbute By用的多。(1)date_add、date_sub函數(加減日期)(2)next_day函數(周指標相關)(3)date_format函數(根據格式整理日期)(4)last_day函數(求當月最後一天日期)(5)collect_set函數(6)get_json_object解析json函數(7)NVL(表達式1,
  • 搞懂Hadoop、MapReduce、Hive、HBase、YARN及Spark的區別與聯繫
    構建抽象模型:Map和ReduceMapReduce借鑑了函數式語言中的思想,用Map和Reduce兩個函數,提供了高層的並行編程抽象模型。hive數據倉庫工具能將結構化的數據文件映射為一張資料庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。hive與關係型資料庫的SQL略有不同,但支持了絕大多數的語句如DDL、DML以及常見的聚合函數、連接查詢、條件查詢。
  • Hive基於UDF進行文本分詞
    本文大綱UDF 簡介Hive作為一個sql查詢引擎,自帶了一些基本的函數,比如count(計數),sum(求和),有時候這些基本函數滿足不了我們的需求,這時候就要寫hive hdf(user defined funation),又叫用戶自定義函數。
  • Hadoop數據分析之Hive
    對於Hive來說默認就是mapreduce任務Hive:數據類型基本數據類型類型名稱描述舉例booleantrue/falsetruetinyint1位元組的有符號整數1smallint2位元組的有符號整數1int4位元組的有符號整數1bigint8位元組的有符號整數1float4位元組單精度浮點數1.0
  • Hive數據倉庫實戰
    這節我們講的Hive常用SQL,Hive SQL能滿足多數應用場景,但有的時候想和自己的業務代碼做混合編程,實現複雜的功能,就需要自定義開發Java函數,也就是我們下面要講的UDF函數。我們自定義開發UDF函數的時候繼承org.apache.hadoop.hive.ql.exec.UDF類即可,代碼如下所示:package com.chongdianleme.hiveudf.udf;import org.apache.hadoop.hive.ql.exec.UDF;
  • HiveSQL優化方法與實踐(推薦收藏)
    sort by是局部排序;distribute by是控制map怎麼劃分reducer。這唯一的Reduce Task需要Shuffle大量的數據,並且進行排序聚合等處理,這使得它成為整個作業的IO和運算瓶頸。圖形如下:
  • hive sql 優化心得
    下面為大家介紹一下hive的優化器以及一些常見的sql技巧。常見的優化器如果你想查看hive的優化器,可以從github上面拉一份hive的源碼,在org.apache.hadoop.hive.ql.optimizer目錄下可以看到hive裡面有哪些邏輯優化器。
  • Hive的分析函數的使用
    我們先準備資料庫、表和數據開窗分析函數相對於mysql中的聚合函數區別是:分析函數是基於某個組多個數據進行計算聚合,而聚合函數是每個組返回一行數據。官網我們先做個例子感受下:要求: 查詢部門編號為10的所有的員工,按照薪資降序排序Mysql實現:select empno,ename,deptno,sal from emp where deptno=10 order by sal desc;如果要求是:將每個部門薪資最高的那個人的薪資顯示在最後一行。
  • 常用Hive函數的學習和總結
    今天來小結一下工作中經常會使用到的一些Hive函數。關於Hive函數的總結,網上早有十分全面的版本。參考:https://blog.csdn.net/doveyoung8/article/details/80014442。本文主要從最常用和實用的角度出發,說明幾個使用頻率較高的函數,更注重使用函數組合來解決實際問題而不局限於單個函數的使用。
  • Hive窗口函數/分析函數詳解
    hive窗口函數/分析函數在sql中有一類函數叫做聚合函數,例如sum()、avg()、max()等等,這類函數可以將多行數據按照規則聚集為一行,一般來講聚集後的行數是要少於聚集前的行數的。但是有時我們想要既顯示聚集前的數據,又要顯示聚集後的數據,這時我們便引入了窗口函數。窗口函數又叫OLAP函數/分析函數,窗口函數兼具分組和排序功能。
  • Hive高級-調優
    由Hontonworks開源,將MapReduce的過程拆分成若干個子過程,同時可以 把多個mapreduce任務組合成一個較大的DAG任務,減少了MapReduce之間的文件存儲,同時合理組合其子過程從而大幅提升MR作業的性能。
  • hive常用函數
    包括本行和之前所有的行    2.rows between current row preceding and unbounded following 包括本行和之後所有的行    3.rows between 3 preceding and current row 包括本行以內和前三行    4.rows between 3 preceding and 1 following 從前三行到下一行(5行)分區排序窗口函數
  • excel初學者必學技巧,多層排序與自定義清單
    我們在實際工作中,當我們需要處理大量數據的時候,我們通常使用excel軟體來處理,因為excel功能強大,具有功能繁多的數據處理工具和強大的excel函數,初學者學習的都是比較基礎的技巧,因為只有從簡單到複雜,學習也要一個過程,這次我們要分享的是有關excel數據多層排序與自定義清單操作技巧
  • Hive常用的函數總結
    sqrt()函數表示對給定的數字取平方根,如下所示:hive (default)> SELECT Sqrt(5);OK_c02.23606797749979Time taken: 0.06 seconds, Fetched: 1 row(s)2、集合函數
  • 大數據分析師工程師入門6-HIVE進階
    <窗口函數>() OVER ( [PARTITIONBY <列清單>] [ORDER BY<排序用清單列>] [ASC/DESC] (ROWS |RANGE) <範圍條件>)如上代碼所示,窗口函數的語法分為四個部分: 函數子句
  • 【乾貨】Hive常用函數大全
    舉例:hive> select ceil(3.1415926) from lxw_dual;4hive> select ceil(46) from lxw_dual;465、向上取整函數: ceiling語法: ceiling(double a)
  • HIVE 窗口函數實戰
    HIVE 窗口函數詳解中,我們介紹了hive窗口函數的定義和語法,本篇中我們根據例子來進行實戰。>排序窗口需求:求每個班級成績排名前三的學生。row_number()函數,唯一排序,不會生成排序相同的用戶示例和結果如下:可以看到,一班的學生三和學生四同樣為90分的學生,會按照不同的排名進行排名。rank()函數,不唯一排序,相同分數排名會相同,但後續排名會跳過。
  • Hive窗口函數row number的用法, 你肯定都會吧!
    row_number前面我們介紹窗口函數的時候說到了窗口函數的使用場景,我們也給它起了一個名字進行區分,通用窗口函數和特殊窗口函數,今天我們就來看一下排序相關的窗口函數,因為是窗口函數,並且我們說它是用來排序的,我們大概也能猜到它就是用來對窗口內的數據進行排序的其實關於排序我們前面也介紹過order by,sort by 等排序的方式Hive語法之常見排序方式