Hadoop Hive Spark hive建表語句對錶在hdfs上儲存的file或block數量、以及後續spark讀檔案跑模型的影響
問題描述:
前段時間使用hive語句建了兩張較為相似的資料表,後來在spark上用這兩張表跑相同的模型,發現兩張表的模型訓練時間不同,其中一張表跑起來非常慢。而兩張表的欄位數量和資料量並沒有太大的差別,頗為奇怪。
解決方法:
先說結論:
以上問題是兩張表在hdfs上儲存的檔案數量不一樣導致的,初始原因是在執行建表語句的時候兩張表用的reducer個數不同。
hive語句建的表在hdfs上儲存的file個數( 即fs -ls
命令展示的items個數)等於語句執行時候的reducer個數,而spark又是根據file的讀取檔案。所以若資料表的資料量過大而檔案數量太少,導致每個檔案過大,容易拖慢spark的執行速度。
可以通過設定reducer個數調整在hadoop上儲存的file個數,從而調節spark讀取的每個檔案的大小,進一步提高模型訓練速度。
需要注意:
若file的大小若超過hdfs設定的block size,則會對應多個block(即,file數量總數大於等於block個數),
hadoop叢集上的有block.Size引數的設定,一般是64M、128M、256M等,hive上也有一個
dfs.block.size
引數,但是這個應該和map數量有關。
可以從以下原理、命令自行實驗理解,此處不再贅述。
Hive部分:
Map與Reducer個數的確定:
Map數的計算公式:
num_Map_tasks = max[${Mapred.min.split.size},
min(${dfs.block.size }, ${Mapred.max.split.size})]
Reducer個數:
1. 直接指定 : set mapred.reduce.tasks=100;
2. 調整每個reducer處理的資料大小:
num_Reduce_tasks = min[${Hive.exec.Reducers.max},
(${input.size} / ${ Hive.exec.Reducers.bytes.per.Reducer})]
Mapred.min.split.size指的是資料的最小分割單元大小。
Mapred.max.split.size指的是資料的最大分割單元大小。
dfs.block.size指的是HDFS設定的資料塊大小。
Hadoop命令:
查看錶檔案
hadoop fs -ls /xx/xx.db/xxtable
檢視file和block
hadoop fsck /xx/xx.db/dual -files -blocks
檢視某個block的block.size設定值以及備份個數
hadoop fs -stat "%o %r" /xx/xx.db/dual/000000_0
相關推薦
Hadoop Hive Spark hive建表語句對錶在hdfs上儲存的file或block數量、以及後續spark讀檔案跑模型的影響
問題描述: 前段時間使用hive語句建了兩張較為相似的資料表,後來在spark上用這兩張表跑相同的模型,發現兩張表的模型訓練時間不同,其中一張表跑起來非常慢。而兩張表的欄位數量和資料量並沒有太大的差別,頗為奇怪。 解決方法: 先說結論: 以上問題是兩
hive建表語句(不同的資料儲存格式,包括txt、orc、分割槽)
use sx_360_safe; create table sx_360_safe.sx_ela_bp_info ( id_ela_bp_info string ,code string ,agent_no string ,ope
hive程式設計指南學習筆記之一:建表語句以及分隔符定義
/*建立包括基本資料型別string\float,以及集合資料型別array、map 、struct的表,並指定表中的列、元素、map中鍵值之間的分隔符 很好的一個例子。 */ create table employees ( name string, &nbs
如何獲取hive建表語句(轉載)
說明:本文轉載自http://www.imphrack.com/?p=21 DWer 謝謝原創作者分享! 該指令碼是基於hive0.4.2版本,現在最新的0.8.1版本 hive元資料庫已經有過些許改變。 需要要將指令碼中表名COLUMNS修改為COL
Hive_ Hive 建表語句詳解
參考文章:最近博主在編寫一個每天定時建立Hive 分割槽的指令碼,其中需要建立Hive表,開始的時候我以為建立Hive 表的語句順序是比較寬鬆的,經過測試發現不然,Hive 建立表需要比較固定的書寫順序雖然暫時不知道這個順序,可以查閱什麼樣的文件找到,如果知道的朋友,可以在底
hive建表語句(包括txt、Orc和分割槽)
-------------------------------- txt格式 無分割槽 ------------------------------- use sx_360_safe; create table sx_360_safe.sx_ela_bp_info ( i
oracle經典建表語句--scott建表
research def num div del col incr value 實現 create table EMP ( EMPNO NUMBER(4) PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9),
oracle導出表的建表語句拼接SQL
del ora cal 導出表 evel lec ica nts rac 前段時間有個需求需要導出數據庫的500張表結構,使用PLSQLDEV工具也可以導出建表語句,但是需要手動一個表一個表選,非常費勁。就寫了個拼接sql。 select ‘select dbms_met
Mysql DBA 高級運維學習筆記-mysql建表語句及表知識
ase rac 範圍 cte roc .com 相關 fff size 9.9 表操作 9.9.1以默認字符集建庫 以默認格式的為例,指定字符集建庫 system@ceshi 07:0205->create database wwn; Query OK, 1 row
如何使用plsql導出oracle中的建表語句文件
ffd -i IT SQ 當下 sel acl user self 1 首先打開plsql,登陸所需要訪問的數據庫。 2 點擊工具欄的tools。 3 選擇下拉框中的export user object。 4 此時會彈出一個窗
MySQL幾種常用的建表語句(一)
span mysq 圖片 pan ont tab 數據類型 默認 primary 幾種常用的建表語句: 1、最簡單的建表語句: create table 表名( 列名1 數據類型(長度), 列名2 數據類型(長度), ... ) 如下
將mysql資料庫的建表語句修改成green plum資料庫中可執行的指令碼
#用來獲取輸入的對應的表名稱的建表語句 #首先輸入需要獲取的mysql或者sql server的資料庫表名稱,到對應的資料庫中抓出建表語句, #然後,將建表語句進行對應的修改,形成可以在pg中可用的語句 #連線mysql資料 import pymysql import sys impor
ORA-00904:識別符號無效的一個奇葩原因--工具生成建表語句的問題
這個問題相信大家都很常見,這就是表中無該欄位導致的。但是本文所述的問題比較特殊,請看下面的語句: 1、SELECT t.person_id FROM TAX_DED_CHILD_T t 2、SELECT t.* FROM TAX_DED_CHILD_T t 3
java生成mysql資料庫建表語句、欄位、欄位型別、欄位註釋,可實現不用mysqldump備份資料庫
使用 mysqldump 備份資料庫也是可行的,因為每次備份的時候都需要mysqldump這個檔案, 我在windows備份時沒問題,但是放到linux上面時,centos系統死活不認這個檔案,但又不想裝mysql,一氣之下自己研究了個不需要mysqldump就可以備份的程式, 如果看了以下程式
Java,基於SSM,省市區三級聯動後臺查詢(單表),附(建表語句+查詢Sql)
1、建表語句 CREATE TABLE "hxdb"."sys_area" ( "id" varchar(64) COLLATE "default" NOT NULL, "code" varchar(
sqlserver2008r2建表語句優化
USE [master]; GO DROP DATABASE [mydata]; GO CREATE DATABASE [mydata]; GO USE [mydata]; GO CREATE TABLE [dbo].[t_user] ( [id] [int] IDE
MySQL建表語句轉PostgreSQL建表語句全紀錄
個人習慣用MySQL workbench EER資料建模,然後生成SQL語句到資料庫中執行,這樣表之間的關係比較直觀。 像下面這樣: 畫圖 正向工程,生成DDL語句: 忽略生成外來鍵,以及外來鍵索引啥的: 生成的DDL語句: 到資料庫執行。 踩坑了 最
Oracle資料庫 迴圈建表語句及多表迴圈插入語句
Oracle資料庫的迴圈建表語句及多表迴圈插入語句 --建多張表的儲存過程 create or replace procedure createtables is i number (10) :=
DDL建表語句 線上轉換為 javaBean
給大家推薦一款 好用的線上 DDL建表語句轉 javaBean 的工具, 對於提高開發效率也是不錯的 https://www.jlshare.top/sqlBean https://www.jlshare.top
mysql workbench 匯出建表語句 匯出資料
前言 本教程主要講述,利用mysql workbench匯出建表語句,過程很簡單,有兩種方法。 教程 方法一 概述 這種方法是比較正規的,也是mysql workbench提供的正式的匯出建表語句或者匯出資料的方式。 匯出建表語句和