国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

大數(shù)據(jù)
Hive究竟是什么,為什么在Hadoop家族中占有這么重要的地位,本篇文章將圍繞Hive的體系結(jié)構(gòu)(架構(gòu))、Hive的操作、Hive與Hbase的區(qū)別等對Hive進(jìn)行全方面的闡述。

前言

Hive這個框架在Hadoop的生態(tài)體系結(jié)構(gòu)中占有及其重要的地位,在實際的業(yè)務(wù)當(dāng)中用的也非常多,可以說Hadoop之所以這么流行在很大程度上是因為Hive的存在。那么Hive究竟是什么,為什么在Hadoop家族中占有這么重要的地位,本篇文章將圍繞Hive的體系結(jié)構(gòu)(架構(gòu))、Hive的操作、Hive與Hbase的區(qū)別等對Hive進(jìn)行全方面的闡述。

在此之前,先給大家介紹一個業(yè)務(wù)場景,讓大家感受一下為什么Hive如此的受歡迎:

業(yè)務(wù)描述:統(tǒng)計業(yè)務(wù)表consumer.txt中北京的客戶有多少位?下面是相應(yīng)的業(yè)務(wù)數(shù)據(jù):

  1. id      city    name    sex            
  2. 0001    beijing zhangli man  
  3. 0002    guizhou lifang  woman  
  4. 0003    tianjin wangwei man  
  5. 0004    chengde wanghe  woman  
  6. 0005    beijing lidong  man  
  7. 0006    lanzhou wuting  woman  
  8. 0007    beijing guona   woman  
  9. 0008    chengde houkuo  man  

首先我先用大家所熟悉的MapReduce程序來實現(xiàn)這個業(yè)務(wù)分析,完整代碼如下:

  1. package IT; 
  2.  
  3. import java.io.IOException; 
  4. import java.net.URI; 
  5.  
  6. import org.apache.hadoop.conf.Configuration; 
  7. import org.apache.hadoop.fs.FSDataInputStream; 
  8. import org.apache.hadoop.fs.FileSystem; 
  9. import org.apache.hadoop.fs.Path; 
  10. import org.apache.hadoop.io.IOUtils; 
  11. import org.apache.hadoop.io.LongWritable; 
  12. import org.apache.hadoop.io.Text; 
  13. import org.apache.hadoop.mapreduce.Job; 
  14. import org.apache.hadoop.mapreduce.Mapper; 
  15. import org.apache.hadoop.mapreduce.Reducer; 
  16. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
  17. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
  18. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
  19. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; 
  20. import org.apache.hadoop.mapreduce.lib.partition.HashPartitioner; 
  21.  
  22. public class Consumer 
  23.     public static String path1 = "hdfs://192.168.80.80:9000/consumer.txt"
  24.     public static String path2 = "hdfs://192.168.80.80:9000/dir"
  25.     public static void main(String[] args) throws Exception 
  26.     { 
  27.           FileSystem fileSystem = FileSystem.get(new URI(path1) , new Configuration()); 
  28.           if(fileSystem.exists(new Path(path2))) 
  29.           { 
  30.               fileSystem.delete(new Path(path2), true); 
  31.           } 
  32.            
  33.           Job job = new Job(new Configuration(),"Consumer"); 
  34.           FileInputFormat.setInputPaths(job, new Path(path1)); 
  35.           job.setInputFormatClass(TextInputFormat.class); 
  36.           job.setMapperClass(MyMapper.class); 
  37.           job.setMapOutputKeyClass(Text.class); 
  38.           job.setMapOutputValueClass(LongWritable.class); 
  39.            
  40.           job.setNumReduceTasks(1); 
  41.           job.setPartitionerClass(HashPartitioner.class); 
  42.              
  43.           job.setReducerClass(MyReducer.class); 
  44.           job.setOutputKeyClass(Text.class); 
  45.           job.setOutputValueClass(LongWritable.class); 
  46.           job.setOutputFormatClass(TextOutputFormat.class); 
  47.           FileOutputFormat.setOutputPath(job, new Path(path2)); 
  48.           job.waitForCompletion(true); 
  49.           //查看執(zhí)行結(jié)果 
  50.           FSDataInputStream fr = fileSystem.open(new Path("hdfs://hadoop80:9000/dir/part-r-00000")); 
  51.           IOUtils.copyBytes(fr, System.out, 1024, true); 
  52.      } 
  53.     public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> 
  54.     {       
  55.             public static long sum = 0L; 
  56.             protected void map(LongWritable k1, Text v1,Context context) throws IOException, InterruptedException 
  57.             { 
  58.                   String[] splited = v1.toString().split("\t"); 
  59.                   if(splited[1].equals("beijing")) 
  60.                   { 
  61.                       sum++; 
  62.                   } 
  63.             } 
  64.             protected void cleanup(Context context)throws IOException, InterruptedException 
  65.             { 
  66.                   String str = "beijing"
  67.                   context.write(new Text(str),new LongWritable(sum)); 
  68.             } 
  69.     } 
  70.     public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> 
  71.     { 
  72.             protected void reduce(Text k2, Iterable<LongWritable> v2s,Context context)throws IOException, InterruptedException 
  73.             { 
  74.                   for (LongWritable v2 : v2s) 
  75.                  { 
  76.                      context.write(k2, v2); 
  77.                  } 
  78.             }    
  79.     }    

MapReduce程序代碼運行結(jié)果如下: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

從運行結(jié)果可以看出:在consumer.txt業(yè)務(wù)表中,北京的客戶共有三位。下面我們將用Hive來實現(xiàn)相同的功能,即統(tǒng)計業(yè)務(wù)表consumer.txt中北京的客戶有多少位?

Hive操作如下: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

Hive運行結(jié)果如下:

  1. OK 
  2. beijing 3 
  3. Time taken: 19.768 seconds, Fetched: 1 row(s) 

到這里,是不是感覺Hive這個運行框架很神奇-----對于相同的業(yè)務(wù)邏輯只需要寫幾行Sql命令就可以獲取我們所需要的結(jié)果,這也恰恰是Hive為什么這么流行的原因,Hive的優(yōu)勢主要體現(xiàn)在:

①Hive支持標(biāo)準(zhǔn)的SQL語法,免去了用戶編寫MapReduce程序的過程,大大減少了公司的開發(fā)成本

②Hive的出現(xiàn)可以讓那些精通SQL技能、但是不熟悉MapReduce 、編程能力較弱與不擅長Java語言的用戶能夠在HDFS大規(guī)模數(shù)據(jù)集上很方便地利用SQL 語言查詢、匯總、分析數(shù)據(jù),畢竟精通SQL語言的人要比精通Java語言的多得多

③Hive是為大數(shù)據(jù)批量處理而生的,Hive的出現(xiàn)解決了傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(MySql、Oracle)在大數(shù)據(jù)處理上的瓶頸

好了,上面通過一個簡單的小業(yè)務(wù)場景說明了Hive的巨大優(yōu)勢,接下來將進(jìn)入本篇文章的正題。

一:Hive體系結(jié)構(gòu)(架構(gòu))的介紹

1、Hive的概念:

①Hive是為了簡化用戶編寫MapReduce程序而生成的一種框架,使用MapReduce做過數(shù)據(jù)分析的人都知道,很多分析程序除業(yè)務(wù)邏輯不同外,程序流程基本一樣。在這種情況下,就需要Hive這樣的用戶編程接口。Hive提供了一套類SQL的查詢語言,稱為QL,而在創(chuàng)造Hive框架的過程中之所以使用SQL實現(xiàn)Hive是因為大家對SQL語言非常的熟悉,轉(zhuǎn)換成本低,可以大大普及我們Hadoop用戶使用的范圍,類似作用的Pig就不是通過SQL實現(xiàn)的。

Hive是基于Hadoop的一個開源數(shù)據(jù)倉庫系統(tǒng),可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,Hive可以把SQL中的表、字段轉(zhuǎn)換為HDFS中的目錄、文件。

②Hive是建立在Hadoop之上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架、是為了減少MapReduce編寫工作的批處理系統(tǒng),Hive本身不存儲和計算數(shù)據(jù),它完全依賴于HDFS和MapReduce。Hive可以理解為一個客戶端工具,將我們的sql操作轉(zhuǎn)換為相應(yīng)的MapReduce jobs,然后在Hadoop上面運行。

在開始為大家列舉的consumer.txt小業(yè)務(wù)當(dāng)中,從編寫Sql到最后得出Beijing 3的分析結(jié)果實際上中間走的是MapReduce程序, 只不過這個MapReduce程序不用用戶自己編寫,而是由Hive這個客戶端工具將我們的sql操作轉(zhuǎn)化為了相應(yīng)的MapReduce程序,下面是我們運行sql命令時顯示的相關(guān)日志:

  1. hive> select city,count(*) 
  2.     > from t4     
  3.     > where city='beijing' 
  4.     > group by city; 
  5. Total MapReduce jobs = 1 
  6. Launching Job 1 out of 1 
  7. Number of reduce tasks not specified. Estimated from input data size: 1 
  8. In order to change the average load for a reducer (in bytes): 
  9.   set hive.exec.reducers.bytes.per.reducer=<number> 
  10. In order to limit the maximum number of reducers: 
  11.   set hive.exec.reducers.max=<number> 
  12. In order to set a constant number of reducers: 
  13.   set mapred.reduce.tasks=<number> 
  14. Starting Job = job_1478233923484_0902, Tracking URL = http://hadoop22:8088/proxy/application_1478233923484_0902/ 
  15. Kill Command = /usr/local/hadoop/bin/hadoop job  -kill job_1478233923484_0902 
  16. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1 
  17. 2016-11-09 11:36:36,688 Stage-1 map = 0%,  reduce = 0% 
  18. 2016-11-09 11:36:42,018 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  19. 2016-11-09 11:36:43,062 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  20. 2016-11-09 11:36:44,105 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  21. 2016-11-09 11:36:45,149 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  22. 2016-11-09 11:36:46,193 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  23. 2016-11-09 11:36:47,237 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  24. 2016-11-09 11:36:48,283 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.21 sec 
  25. 2016-11-09 11:36:49,329 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.7 sec 
  26. 2016-11-09 11:36:50,384 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 3.7 sec 
  27. MapReduce Total cumulative CPU time: 3 seconds 700 msec 
  28. Ended Job = job_1478233923484_0902 
  29. MapReduce Jobs Launched:  
  30. Job 0: Map: 1  Reduce: 1   Cumulative CPU: 3.7 sec   HDFS Read: 419 HDFS Write: 10 SUCCESS 
  31. Total MapReduce CPU Time Spent: 3 seconds 700 msec 
  32. OK 
  33. beijing 3 
  34. Time taken: 19.768 seconds, Fetched: 1 row(s) 

從日志可以看出,Hive將我們的sql命令解析成了相應(yīng)的MapReduce任務(wù),最后得到了我們的分析結(jié)果。

③Hive可以認(rèn)為是MapReduce的一個封裝、包裝。Hive的意義就是在業(yè)務(wù)分析中將用戶容易編寫、會寫的Sql語言轉(zhuǎn)換為復(fù)雜難寫的MapReduce程序,從而大大降低了Hadoop學(xué)習(xí)的門檻,讓更多的用戶可以利用Hadoop進(jìn)行數(shù)據(jù)挖掘分析。

為了讓大家容易理解Hive的實質(zhì)-------“Hive就是一個SQL解析引擎,將SQL語句轉(zhuǎn)化為相應(yīng)的MapReduce程序”這句話,博主用一個圖示進(jìn)行示例: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

從圖示可以看出,Hive從某種程度上講就是很多“SQL—MapReduce”框架的一個封裝,可以將用戶編寫的Sql語言解析成對應(yīng)的MapReduce程序,最終通過MapReduce運算框架形成運算結(jié)果提交給Client。

2、Hive體系結(jié)構(gòu)的介紹

下面是Hive的體系結(jié)構(gòu)圖: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

Hive的體系結(jié)構(gòu)可以分為以下幾個部分:

①用戶接口:包括shell命令、Jdbc/Odbc和WebUi,其中最常用的是shell這個客戶端方式對Hive進(jìn)行相應(yīng)操作

②Hive解析器(驅(qū)動Driver):Hive解析器的核心功能就是根據(jù)用戶編寫的Sql語法匹配出相應(yīng)的MapReduce模板,形成對應(yīng)的MapReduce job進(jìn)行執(zhí)行。

③Hive元數(shù)據(jù)庫(MetaStore):Hive將表中的元數(shù)據(jù)信息存儲在數(shù)據(jù)庫中,如derby(自帶的)、Mysql(實際工作中配置的),Hive中的元數(shù)據(jù)信息包括表的名字、表的列和分區(qū)、表的屬性(是否為外部表等)、表的數(shù)據(jù)所在的目錄等。Hive中的解析器在運行的時候會讀取元數(shù)據(jù)庫MetaStore中的相關(guān)信息。

在這里和大家說一下為什么我們在實際業(yè)務(wù)當(dāng)中不用Hive自帶的數(shù)據(jù)庫derby,而要重新為其配置一個新的數(shù)據(jù)庫Mysql,是因為derby這個數(shù)據(jù)庫具有很大的局限性:derby這個數(shù)據(jù)庫不允許用戶打開多個客戶端對其進(jìn)行共享操作,只能有一個客戶端打開對其進(jìn)行操作,即同一時刻只能有一個用戶使用它,自然這在工作當(dāng)中是很不方便的,所以我們要重新為其配置一個數(shù)據(jù)庫。

④Hadoop:Hive用HDFS進(jìn)行存儲,用MapReduce進(jìn)行計算-------Hive這個數(shù)據(jù)倉庫的數(shù)據(jù)存儲在HDFS中,業(yè)務(wù)實際分析計算是利用MapReduce執(zhí)行的。

從上面的體系結(jié)構(gòu)中可以看出,在Hadoop的HDFS與MapReduce以及MySql的輔助下,Hive其實就是利用Hive解析器將用戶的SQl語句解析成對應(yīng)的MapReduce程序而已,即Hive僅僅是一個客戶端工具,這也是為什么我們在Hive的搭建過程中沒有分布與偽分布搭建的原因。(Hive就像是劉邦一樣,合理的利用了張良、韓信與蕭何的輔助,從而成就了一番大事!)

3、Hive的運行機(jī)制

Hive的運行機(jī)制如下圖所示: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

Hive的運行機(jī)制正如圖所示:創(chuàng)建完表之后,用戶只需要根據(jù)業(yè)務(wù)需求編寫Sql語句,而后將由Hive框架將Sql語句解析成對應(yīng)的MapReduce程序,通過MapReduce計算框架運行job,便得到了我們最終的分析結(jié)果。

在Hive的運行過程中,用戶只需要創(chuàng)建表、導(dǎo)入數(shù)據(jù)、編寫Sql分析語句即可,剩下的過程將由Hive框架自動完成,而創(chuàng)建表、導(dǎo)入數(shù)據(jù)、編寫Sql分析語句其實就是數(shù)據(jù)庫的知識了,Hive的運行過程也說明了為什么Hive的存在大大降低了Hadoop的學(xué)習(xí)門檻以及為什么Hive在Hadoop家族中占有著那么重要的地位。

二:Hive的操作

Hive的操作對于用戶來說實際上就是表的操作、數(shù)據(jù)庫的操作。下面我們將圍繞兩個方面進(jìn)行介紹:

1、Hive的基本命令.

啟動hive命令行:

  1. $>hive/bin/hive 
  2.     $hive>show databases ;                              -- 顯式數(shù)據(jù)庫 
  3.     $hive>create database mydb ;                        -- 創(chuàng)建數(shù)據(jù)庫 
  4.     $hive>use mydb ;                                    -- 使用庫 
  5.     $hive>create table custs(id int , name string) ;    -- 建表 
  6.     $hive>desc custs ;                                  -- 查看表結(jié)構(gòu) 
  7.     $hive>desc formatted custs ;                        -- 查看格式化表結(jié)構(gòu) 
  8.     $hive>insert into custs(id,namevalues(1,'tom');   -- 插入數(shù)據(jù),轉(zhuǎn)成mr. 
  9.     $hive>select * from custs ;                         -- 查詢,沒有mr 
  10.     $hive>select * from custs order by id desc ;        -- 全排序,會生成mr. 
  11.     $hive>exit ;                                        -- 退出終端 
  12.  
  13.  
  14. 查看mysql中的元信息: 
  15.     select * from dbs ;                                 -- 存放庫信息 
  16.     select * from tbls ;                                -- 存放表信息 

2、Hive表------內(nèi)部表、外部表、分區(qū)表的創(chuàng)建

所謂內(nèi)部表就是普通表,創(chuàng)建語法格式為: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

實際操作: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

外部表(external table)的創(chuàng)建語法格式為: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

注意:最后一行寫到的是目錄dir,文件就不用寫了,Hive表會自動到dir目錄下讀取所有的文件file

我在實際的操作過程當(dāng)中發(fā)現(xiàn),location關(guān)聯(lián)到的目錄下面必須都是文件,不能含有其余的文件夾,不然讀取數(shù)據(jù)的時候會報錯。 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

實際操作: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

內(nèi)部表與外部表的區(qū)別:

  • 內(nèi)部表在加載數(shù)據(jù)的過程中,實際數(shù)據(jù)會被移動到數(shù)據(jù)倉庫目錄中(hive.metastore.warehouse.dir),之后用戶對數(shù)據(jù)的訪問將會直接在數(shù)據(jù)倉庫目錄中完成;刪除內(nèi)部表時,內(nèi)部表中的數(shù)據(jù)和元數(shù)據(jù)信息會被同時刪除。
  • 外部表在加載數(shù)據(jù)的過程中,實際數(shù)據(jù)并不會被移動到數(shù)據(jù)倉庫目錄中,只是與外部表建立一個鏈接(相當(dāng)于文件的快捷方式一樣);刪除外部表時,僅刪除該鏈接。

補(bǔ)充:在工作中發(fā)現(xiàn),對于外部表,即使hive中的表刪除了,但是在HDFS中表的location仍然存在。

分區(qū)表的概念:指的是我們的數(shù)據(jù)可以分區(qū),即按照某個字段將文件劃分為不同的標(biāo)準(zhǔn),分區(qū)表的創(chuàng)建是通過在創(chuàng)建表時啟用partitioned by來實現(xiàn)的。

分區(qū)表的創(chuàng)建語法格式為: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

注意:分區(qū)表在加載數(shù)據(jù)的過程中要指定分區(qū)字段,否則會報錯,正確的加載方式如下:

  1. load data local inpath ‘/usr/local/consumer.txt’ into table t1 partition (day=2) ; 

其余的操作和內(nèi)部表、外部表是一樣的。

實際操作: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

參考2:

  1. CREATE EXTERNAL TABLE `fdm_buffalo_3_5_task_exec_time`( 
  2.   `task_id`      int COMMENT '任務(wù)id',  
  3.   `task_version` string COMMENT '任務(wù)版本',  
  4.   `exec_time`    string COMMENT '平均執(zhí)行時長'
  5. PARTITIONED BY (  
  6.   `dt` string) 
  7. ROW FORMAT DELIMITED  
  8.   FIELDS TERMINATED BY '\t'
  9.  
  10.  
  11. 實際: 
  12. hive> show create table fdm_buffalo_3_5_task_exec_time; 
  13. OK 
  14. CREATE EXTERNAL TABLE `fdm_buffalo_3_5_task_exec_time`( 
  15.   `task_id` int COMMENT '任務(wù)id',  
  16.   `task_version` string COMMENT '任務(wù)版本',  
  17.   `exec_time` string COMMENT '平均執(zhí)行時長'
  18. PARTITIONED BY (  
  19.   `dt` string) 
  20. ROW FORMAT DELIMITED  
  21.   FIELDS TERMINATED BY '\t'  
  22. STORED AS INPUTFORMAT  
  23.   'org.apache.hadoop.mapred.TextInputFormat'  
  24. OUTPUTFORMAT  
  25.   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
  26. LOCATION 
  27.   'hdfs://ns5/user/dd_edw/fdm.db/fdm_buffalo_3_5_task_exec_time' 
  28. TBLPROPERTIES ( 
  29.   'mart_name'='dd_edw',  
  30.   'transient_lastDdlTime'='1555384611'
  31. Time taken: 0.036 seconds, Fetched: 17 row(s) 

3、將數(shù)據(jù)文件加載(導(dǎo)入)到Hive表中

在Hive中創(chuàng)建完表之后,我們隨后自然要向表中導(dǎo)入數(shù)據(jù),但是在導(dǎo)入數(shù)據(jù)的時候和我們的傳統(tǒng)數(shù)據(jù)庫(MySql、Oracle)是不同的:Hive不支持一條一條的用insert語句進(jìn)行插入操作,也不支持update的操作。Hive表中的數(shù)據(jù)是以load的方式,加載到建立好的表中。數(shù)據(jù)一旦導(dǎo)入,則不可修改。要么drop掉整個表,要么建立新的表,導(dǎo)入新的數(shù)據(jù)。

導(dǎo)入數(shù)據(jù)的語法格式為: 

Hive為什么這么受歡迎?看完Hive架構(gòu)以及應(yīng)用介紹,你就明白了!

導(dǎo)入數(shù)據(jù)時要注意一下幾點:

  • local inpath表示從本地linux中向Hive表中導(dǎo)入數(shù)據(jù),inpath表示從HDFS中向Hive表中導(dǎo)入數(shù)據(jù)
  • 默認(rèn)是向原Hive表中追加數(shù)據(jù),overwrite表示覆蓋表中的原數(shù)據(jù)進(jìn)行導(dǎo)入
  • partition是分區(qū)表特有的,而且在導(dǎo)入數(shù)據(jù)數(shù)據(jù)時是必須添加的,否則會報錯
  • load 操作只是單純的復(fù)制/移動操作,將數(shù)據(jù)文件復(fù)制/移動到 Hive 表對應(yīng)的位置,即Hive 在加載數(shù)據(jù)的過程中不會對數(shù)據(jù)本身進(jìn)行任何修改,而只是將數(shù)據(jù)內(nèi)容復(fù)制或者移動到相應(yīng)的表中

導(dǎo)入示例代碼:(注意overwrite的用法)

  1. hive> load data local inpath "/home/dd_edw/zmy_project/task_relations.txt" overwrite into table fdm.chevrolet_buffalo_task_recusion_relations partition(dt='2019-05-28'); 
  2. Loading data to table fdm.chevrolet_buffalo_task_recusion_relations partition (dt=2019-05-28) 
  3. Moved: 'hdfs://ns5/user/dd_edw/fdm.db/chevrolet_buffalo_task_recusion_relations/dt=2019-05-28/task_relations.txt' to trash at: hdfs://ns5/user/dd_edw/.Trash/Current 
  4. Moved: 'hdfs://ns5/user/dd_edw/fdm.db/chevrolet_buffalo_task_recusion_relations/dt=2019-05-28/task_relations_copy_1.txt' to trash at: hdfs://ns5/user/dd_edw/.Trash/Current 
  5. Partition fdm.chevrolet_buffalo_task_recusion_relations{dt=2019-05-28} stats: [numFiles=1, numRows=0, totalSize=272475104, rawDataSize=0] 
  6. OK 
  7. Time taken: 3.381 seconds 
  8. hive> dfs -ls hdfs://ns5/user/dd_edw/fdm.db/chevrolet_buffalo_task_recusion_relations/*/ ; 
  9. Found 1 items 
  10. -rwxr-xr-x   3 dd_edw dd_edw  272475104 2019-05-29 20:08 hdfs://ns5/user/dd_edw/fdm.db/chevrolet_buffalo_task_recusion_relations/dt=2019-05-28/task_relations.txt 

4、Hive添加分區(qū)操作:

正確語句:

  1. hive> ALTER TABLE fdm_buffalo_3_5_task_exec_time ADD IF NOT EXISTS PARTITION (dt='2019-04-15'); 
  2. OK 
  3. Time taken: 0.059 seconds 

錯誤語句:

  1. hive> alter table fdm_buffalo_3_5_task_exec_time if not exists add partition (dt='2019-04-15'); 
  2. NoViableAltException(132@[]) 
  3.         at org.apache.hadoop.hive.ql.parse.HiveParser.alterTableStatementSuffix(HiveParser.java:8170) 
  4.         at org.apache.hadoop.hive.ql.parse.HiveParser.alterStatement(HiveParser.java:7635) 
  5.         at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:2798) 
  6.         at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:1731) 
  7.         at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1136) 
  8.         at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202) 
  9.         at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) 
  10.         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:411) 
  11.         at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:320) 
  12.         at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1372) 
  13.         at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1425) 
  14.         at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1150) 
  15.         at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1093) 
  16.         at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:241) 
  17.         at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:191) 
  18.         at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:551) 
  19.         at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:969) 
  20.         at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:912) 
  21.         at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:824) 
  22.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
  23.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
  24.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
  25.         at java.lang.reflect.Method.invoke(Method.java:606) 
  26.         at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
  27.         at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
  28. FAILED: ParseException line 1:43 cannot recognize input near 'if' 'not' 'exists' in alter table statement 

5、查看某個分區(qū)

  1. desc formatted bdm.bdm_dispatch_1_d_task_da partition(dt='2019-07-14'); 

三:Hive與Hbase的區(qū)別

其實從嚴(yán)格意義上講,Hive與Hbase就不應(yīng)該談區(qū)別,談區(qū)別的原因無非就是Hive與Hbase本身都涉及到了表的創(chuàng)建、向表中插入數(shù)據(jù)等等。所以我們希望找到Hive與Hbase的區(qū)別,但是為什么兩者談不上區(qū)別呢,原因如下:

  1. 根據(jù)上文分析,Hive從某種程度上講就是很多“SQL—MapReduce”框架的一個封裝,即Hive就是MapReduce的一個封裝,Hive的意義就是在業(yè)務(wù)分析中將用戶容易編寫、會寫的Sql語言轉(zhuǎn)換為復(fù)雜難寫的MapReduce程序。
  2. Hbase可以認(rèn)為是hdfs的一個包裝。他的本質(zhì)是數(shù)據(jù)存儲,是個NoSql數(shù)據(jù)庫;hbase部署于hdfs之上,并且克服了hdfs在隨機(jī)讀寫方面的缺點。

因此若要問Hive與Hbase之前的區(qū)別,就相當(dāng)于問HDFS與MapReduce之間的區(qū)別,而HDFS與MapReduce兩者之間談區(qū)別意義并不大。

但是當(dāng)我們非要談Hbase與Hive的區(qū)別時,可以從以下幾個方面進(jìn)行討論:

Hive和Hbase是兩種基于Hadoop的不同技術(shù)–Hive是一種類SQL的引擎,并且運行MapReduce任務(wù),Hbase是一種在Hadoop之上的NoSQL 的Key/vale數(shù)據(jù)庫。當(dāng)然,這兩種工具是可以同時使用的。就像用Google來搜索,用FaceBook進(jìn)行社交一樣,Hive可以用來進(jìn)行統(tǒng)計查詢,HBase可以用來進(jìn)行實時查詢,數(shù)據(jù)也可以從Hive寫到Hbase,設(shè)置再從Hbase寫回Hive。

Hive適合用來對一段時間內(nèi)的數(shù)據(jù)進(jìn)行分析查詢,例如,用來計算趨勢或者網(wǎng)站的日志。Hive不應(yīng)該用來進(jìn)行實時的查詢。因為它需要很長時間才可以返回結(jié)果。

Hbase非常適合用來進(jìn)行大數(shù)據(jù)的實時查詢。Facebook用Hive進(jìn)行消息和實時的分析。它也可以用來統(tǒng)計Facebook的連接數(shù)。

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2020-06-16 14:13:50

Kubernetes容器Linux

2021-08-26 11:10:42

架構(gòu)運維技術(shù)

2020-01-09 15:30:32

微服務(wù)架構(gòu)互聯(lián)網(wǎng)

2020-02-08 16:46:29

微服務(wù)架構(gòu)復(fù)雜

2022-02-25 07:07:04

擴(kuò)展塢電腦筆記本

2024-06-03 00:00:03

2016-10-27 11:11:12

頭條

2017-07-26 10:21:46

DockerLinux容器

2021-03-02 16:25:13

手機(jī)iPhone安卓

2020-06-02 19:14:59

Kubernetes容器開發(fā)

2024-11-19 18:03:04

2020-10-08 18:53:54

以太網(wǎng)Etheme網(wǎng)卡

2020-07-06 09:25:54

開發(fā)編輯器代碼

2017-07-04 11:26:37

2020-01-06 08:40:11

阿里場景服務(wù)

2019-09-06 10:31:45

軟件開發(fā)地圖

2019-12-25 10:45:30

Java悲觀鎖

2019-06-05 15:20:00

MongoDBNoSQL數(shù)據(jù)庫

2019-12-19 17:00:01

Java線程

2022-06-16 20:56:53

邊緣計算
點贊
收藏

51CTO技術(shù)棧公眾號

aiss精品大尺度系列| 日韩另类在线| 在线国产欧美| 久久人人爽人人爽人人片av高请| 免费网站成人| 午夜成人免费视频| 国产性一级片| 国产精品乱人伦中文| 自慰无码一区二区三区| 国产一区不卡精品| 在线电影看在线一区二区三区| 日韩欧美一区二区三区在线视频| 久久久免费观看视频| 欧美成人毛片| 丝袜情趣国产精品| 国产精品高清乱码在线观看| 亚洲国产一区二区三区四区| 成人在线网址| 日韩一区二区视频| 成人欧美在线| 欧美专区日韩专区| av中文字幕在线| 欧美性大战久久久久久久蜜臀| 日本韩国精品一区二区| 日韩欧美在线观看视频| sese在线视频| 精品对白一区国产伦| 超碰在线中文字幕| 国产午夜精品全部视频在线播放 | gay视频丨vk| 国产精品亲子乱子伦xxxx裸| 国产精品一区二区羞羞答答| 中文字幕一区二区三区精华液| 免费的av电影| 日韩欧美福利视频| www.久久ai| 国产亚洲精品久久久久动| 国产精品一区免费在线| 欧美资源在线观看| 激情视频一区| 青青视频免费在线| 国产精品白丝在线| 在线观看的av网站| 欧美一区二区播放| 欧美日韩卡一| 国产日韩精品视频| 日韩精品免费专区| 欧美老熟妇喷水| 亚洲一区在线视频观看| av在线中文| 最近中文字幕日韩精品| 国产一区二区三区日韩精品 | 日韩三级视频中文字幕| 亚洲日本网址| 国内精品视频在线| 欧美国产激情| 精品人妻人人做人人爽| 亚洲精品视频在线| 最新超碰在线| 欧美精品免费看| 国产精品sm| 日韩不卡视频一区二区| 成人免费一区二区三区在线观看| 日韩资源在线| 中文字幕精品av| 日韩一区二区在线| 午夜啪啪福利视频| 亚洲综合视频在线观看| 91超碰在线播放| 国产精品久久二区| 国产风韵犹存在线视精品| 日本私人影院在线观看| 国产一区二区三区视频免费| 亚洲成人最新网站| 九九爱精品视频| 欧美综合一区二区| 91成人精品在线| 日韩久久久久久久| 亚洲女同一区二区| 夜鲁夜鲁夜鲁视频在线播放| 国产精品一区二区在线| 国产精品一二三| 91精品国产综合久久久久久豆腐| 北条麻妃一区二区三区中文字幕 | 大尺度一区二区| 大地资源中文在线观看免费版| 久久精品精品电影网| 99视频一区| 在线观看成年人视频| 中文字幕精品www乱入免费视频| 中文字幕乱码亚洲无线精品一区| 美女av免费在线观看| 日韩你懂的电影在线观看| 精品日韩一区| 亚洲无吗一区二区三区| 亚洲精品国产美女| 一区三区视频| 国产主播在线资源| xxxx欧美18另类的高清| 国内精品免费**视频| 91caoporn在线| 成人免费福利在线| 国产精品久久看| 国产精品高清一区二区| 99精品一区二区三区的区别| 日韩一区二区三区免费观看| 国产精品v日韩精品v欧美精品网站 | 国产精品99久久久久久久vr| yw在线观看| 国产欧美久久一区二区| 中文在线一区二区| 99久久99九九99九九九| 欧美性受黑人性爽| 日韩三级在线观看| 一本久道久久综合婷婷鲸鱼| 狠狠色伊人亚洲综合网站l| 国产精品人成电影| 亚洲天堂成人网| 99香蕉久久| 香港日本韩国三级网站| 日韩在线视频二区| 成人免费高清在线观看| 国产精品成人一区二区网站软件| av电影在线观看一区二区三区| 综合激情国产一区| 国产精品色网| 国产专区在线| 国产精选久久久久久| 亚洲男人天堂av| 亚洲资源网站| 日本视频二区| 国产精品美女久久| 亚洲综合免费观看高清在线观看| 精品女人视频| bt电影在线| 国产日韩换脸av一区在线观看| 一区二区高清免费观看影视大全| 狠狠久久伊人| 九七影院理论片| 7777kkkk成人观看| 亚洲美女一区二区三区| blacked蜜桃精品一区| bdsm精品捆绑chinese| 国产欧美日韩专区发布| 欧美视频在线视频| 亚洲激情视频| 爱福利在线视频| 国产911在线观看| 中文字幕日韩精品有码视频| 91视频国产观看| 日韩电影不卡一区| 亚洲人成电影| 久久一区二区三区av| 精品久久一区二区| 国产在线看一区| 欧美激情福利| 制服丝袜影音先锋| 国产欧美日韩精品丝袜高跟鞋| 欧美色另类天堂2015| 男人的天堂成人在线| 神马久久午夜| 992kp快乐看片永久免费网址| 国产成人一区二区三区电影| 在线视频国产一区| 日本不卡视频一二三区| 午夜精品久久久久久久99黑人| 久久久久久久久久看片| 天堂在线精品| 黄色大片在线免费观看| 欧美资源一区| 国产香蕉一区二区三区在线视频 | 缴情综合网五月天| 91视频8mav| 日韩精品在线视频| 日本一区二区三区久久久久久久久不 | 91精品免费看| 欧美mv日韩mv国产| 国产色婷婷亚洲99精品小说| 国产精品x453.com| xx欧美xxx| 另类av导航| www国产免费| 国产精品视频1区| 欧美成人一级视频| 亚洲国产精品黑人久久久| 国精品一区二区三区| 成人国产精品入口免费视频| 中国国产一级毛片| 男人天堂成人网| 国产成人中文字幕| 日韩国产高清污视频在线观看| 日本wwwcom| 在线观看亚洲区| 福利视频第一区| 国产精品一区二区黑丝| 日本不卡免费一区| 51一区二区三区| www亚洲人| 99热免费在线| 中文字幕一区综合|