訂閱
糾錯(cuò)
加入自媒體

大數(shù)據(jù)面試真題,來試試你有幾斤幾兩

今天為大家?guī)淼膭t是另一個(gè)同樣建立在Hadoop基礎(chǔ)上的技術(shù)—Hive。HBase是作為分布式數(shù)據(jù)庫,而Hive是作為分布式數(shù)據(jù)倉庫。

為了幫助大家更好的區(qū)別HBase和Hive,科妹特地選取了20道Hive的問答題,一定要積極動(dòng)腦積極思考。

1.Hive的主要作用是什么?

2.啟動(dòng)Hive的方式有哪些?

3.請談一下Hive的特點(diǎn)是什么?Hive和RDBMS有什么異同?

4.Redis, 傳統(tǒng)數(shù)據(jù)庫,hbase,hive  每個(gè)之間的區(qū)別?

5.Hive創(chuàng)建id,name,sex表的語法是什么?

6.Hive的兩個(gè)重要參數(shù)是什么?

7.Hive中如何復(fù)制一張表的表結(jié)構(gòu)(不帶有被復(fù)制表數(shù)據(jù))

8.Hive中追加導(dǎo)入數(shù)據(jù)的4種方式是什么?請寫出簡要語法。

9.Hive是怎樣保存元數(shù)據(jù)的?

10.Hive內(nèi)部表和外部表的區(qū)別?

11.配置hive-site.xml都修改了哪些屬性,請寫出屬性名稱并解釋該屬性。

12.配置hive-env.sh都涉及到哪些屬性?

13.如何連接HiveServer2?寫出具體命令。

14.HiveServer2的作用是什么?

15.所有的hive任務(wù)都會有reducer的執(zhí)行嗎?

16.分區(qū)和分桶的區(qū)別。

17.Hive的 sort by 和 order by 的區(qū)別。

18.簡要描述數(shù)據(jù)庫中的 null,說出null在hive底層如何存儲,并解釋

selecta.* from t1 a left outer join t2b on a.id=b.id where b.id is null;

的含義。

19.請說明hive中 Sort By,Order By,Cluster By,Distrbute By各代表什么意思。

20.請把下一語句用hive方式實(shí)現(xiàn)。

SELECT a.key,a.value     FROM a      WHERE a.key not in (SELECT b.key FROM b)

答案解析:

1.Hive是基于hadoop的數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射成一張數(shù)據(jù)表,并且提供sql查詢。相當(dāng)于mapreduce的客戶端。

2.1)

bin/hive

2)

bin/hiveserver2

3.hive是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供完整的sql查詢功能,可以將sql語句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。其優(yōu)點(diǎn)是學(xué)習(xí)成本低,可以通過類SQL語句快速實(shí)現(xiàn)簡單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。

4.1)Redis 是基于內(nèi)存的數(shù)據(jù)庫,注重實(shí)用內(nèi)存的計(jì)算。

2)hbase是列式數(shù)據(jù)庫,無法創(chuàng)建主鍵,地從是基于HDFS的,每一行可以保存很多的列。

3)hive是數(shù)據(jù)的倉庫,是為了減輕mapreduce而設(shè)計(jì)的,不是數(shù)據(jù)庫,是用來與hadoop做交互的。

5.

create table student(id int,name String,sex String) row format delimited fields terminated by ' '

6.1)hive -e  ''  從命令行執(zhí)行指定的HQL。

2)hive -f  *.hql  執(zhí)行hive腳本命令。

7.

create table a  like b

8.1)從本地導(dǎo)入:

loaddata local  inpath '/home/1.txt' (overwrite)into table student

2)從Hdfs導(dǎo)入:

load data inpath'/user/hive/warehouse/1.txt'  (overwrite)into table student

3)查詢導(dǎo)入:

create table  student1 as select * from student

4)查詢結(jié)果導(dǎo)入:

insert (overwrite)into table staff select * from track_log

9.1)保存元數(shù)據(jù)的方式有:內(nèi)存數(shù)據(jù)庫rerdy,本地mysql數(shù)據(jù)庫,遠(yuǎn)程mysql數(shù)據(jù)庫。

2)但是本地的mysql數(shù)據(jù)用的比較多,因?yàn)楸镜刈x寫速度都比較快。

10.1)在導(dǎo)入數(shù)據(jù)到外部表,數(shù)據(jù)并沒有移動(dòng)到自己的數(shù)據(jù)倉庫目錄下,也就是說外部表中的數(shù)據(jù)并不是由它自己來管理的!而表則不一樣。

2)在刪除表的時(shí)候,Hive將會把屬于表的元數(shù)據(jù)和數(shù)據(jù)全部刪掉;而刪除外部表的時(shí)候,Hive僅僅刪除外部表的元數(shù)據(jù),數(shù)據(jù)是不會刪除的。

11.1)連接數(shù)據(jù)庫的uRL。

2)數(shù)據(jù)庫驅(qū)動(dòng)名。

3)數(shù)據(jù)庫賬戶。

4)數(shù)據(jù)庫密碼。

12.1)添加JAVA_HOME路徑:

JAVA_HOME=/opt/modules/jdk1.7.0_67

2)添加HADOOP_HOME路徑:

HADOOP_HOME=/opt/modules/hadoop-2.5.0-cdh5.3.6/

3)添加HIVE_COF路徑:

exportHIVE_CONF_DIR=/opt/modules/hive-0.13.1-cdh5.3.6/conf

13.1)

bin/hiveserver2

2)

bin/beeline

3)

!connect jdbc:hive2://hadoop102:10000

14.Hiveserver2作用是允許多臺主機(jī)通過beeline連接hiveserver2上,在通過hiveserver2連接到hive數(shù)據(jù)倉庫。

15.不是,由于當(dāng)前hive的優(yōu)化,使得一般簡單的任務(wù)不會去用reducer任務(wù);只有稍微復(fù)雜的任務(wù)才會有reducer任務(wù)。

16.分區(qū):是指按照數(shù)據(jù)表的某列或某些列分為多個(gè)區(qū),區(qū)從形式上可以理解為文件夾,比如我們要收集某個(gè)大型網(wǎng)站的日志數(shù)據(jù),一個(gè)網(wǎng)站每天的日志數(shù)據(jù)存在同一張表上,由于每天會生成大量的日志,導(dǎo)致數(shù)據(jù)表的內(nèi)容巨大,在查詢時(shí)進(jìn)行全表掃描耗費(fèi)的資源非常多。 那其實(shí)這個(gè)情況下,我們可以按照日期對數(shù)據(jù)表進(jìn)行分區(qū),不同日期的數(shù)據(jù)存放在不同的分區(qū),在查詢時(shí)只要指定分區(qū)字段的值就可以直接從該分區(qū)查找。

分桶:分桶是相對分區(qū)進(jìn)行更細(xì)粒度的劃分。分桶將整個(gè)數(shù)據(jù)內(nèi)容安裝某列屬性值得hash值進(jìn)行區(qū)分,如要按照name屬性分為3個(gè)桶,就是對name屬性值的hash值對3取摸,按照取模結(jié)果對數(shù)據(jù)分桶。如取模結(jié)果為0的數(shù)據(jù)記錄存放到一個(gè)文件,取模為1的數(shù)據(jù)存放到一個(gè)文件,取模為2的數(shù)據(jù)存放到一個(gè)文件。

17.1)order by 會對輸入做全局排序,因此只有一個(gè)reducer(多個(gè)reducer無法保證全局有序)只有一個(gè)reducer,會導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),需要較長的計(jì)算時(shí)間。

2)sort by不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序.因此,如果用sort by進(jìn)行排序,并且設(shè)置mapred.reduce.tasks>1, 則sort by只保證每個(gè)reducer的輸出有序,不保證全局有序。

18.null與任何值運(yùn)算的結(jié)果都是null, 可以使用is null、is not null函數(shù)指定在其值為null情況下的取值。 null在hive底層默認(rèn)是用'N'來存儲的,可以通過

alter table test SETSERDEPROPERTIES('serialization.null.format' = 'a')

來修改。

19.order by: 會對輸入做全局排序,因此只有一個(gè)reducer(多個(gè)reducer無法保證全局有序)。只有一個(gè)reducer,會導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),需要較長的計(jì)算時(shí)間。

sort by:不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序。

distribute by:按照指定的字段對數(shù)據(jù)進(jìn)行劃分輸出到不同的reduce中。

cluster by:除了具有 distribute by 的功能外還兼具 sort by 的功能。

20.

selecta.key,a.value from a where a.key not exists (select b.key from b)

怎么樣,做完這20道問答,是不是對Hive的了解加深了呢?雖然Hive和HBase都是架構(gòu)在Hadoop之上的分布式技術(shù),但它們是完全獨(dú)立的兩個(gè)程序哦。

聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號