數據倉庫Hive的使用

1、Hive基本使用

*創建表和使用hive進行wordcound統計(對比mapreduce的實現的易用性)

建表語句:CREATE TABLE table_name

[(col_name data_type [COMMENT col_comment])]

那麼我們進入hive建立一張hive_wordcound表格

create table hive_wordcount(context string); n

註:這裡還有個問題,你啟動hive有的盆友會報錯,比如常見的:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory。。。。。。。

這樣的錯誤,這種情況是你需要關閉安全模式

輸入hadoop dfsadmin -safemode leave 關閉

其實找錯誤的時候可以開啟調試模式輸入export HADOOP_ROOT_LOGGER=DEBUG,console

關閉調試模式export HADOOP_ROOT_LOGGER=INFO,console

好了創建成功,select表是什麼都沒有的,我們進終端看看

好了,這個時候我們再切到mysql中去看看元數據

進到TBLS看到沒,已經有這麼個表了,表的id是1,表名叫做hive_wordcound,再來看看欄位有哪些。進入COLUMNS_V2

只有一個context欄位,現在表建好了,那麼是不是要把數據放到裡面去呢?

載入數據到hive表語句:LOAD DATA LOCAL INPATH filepath INTO TABLE tablename (不加 local就是在hdfs上載入過來)

根據語句在終端輸入:

load data local inpath /Users/yinchuchu/Downloads/software/hadoop/hadoop-2.6.0-cdh5.7.0/tmp/test/input/wc/hello.txtn into table hive_wordcount;n

好了,現在select發現數據有了!那麼數據有了,下面就要統計詞頻了!

這裡就要用到hive一些函數了。

sql語句:select word, count(1) from hive_wordcount lateral view explode(split(context,s)) wc as word group by word;

註:lateral view explode(): 是把每行記錄按照指定分隔符進行拆解

split(context,s)

hive ql提交執行以後會生成mr作業,並在yarn上運行

上面是正常運行的截圖,但是很多人可能會卡在mapreduce開始job的時候,這個時候就停掉把debug調出來,然後查錯誤,這個時候肯定會報錯的,找到錯誤的那一條,可能是org.apache.hadoop.util.NativeCodeLoader.buildSupportsOpenssl()Z也可能是java.Uknown等等之類的錯誤,總之如果卡在開始很可能你的hosts文件有問題,或者你的hadoop配置文件,core-site.xml這些文件配置有問題!google上有很多很多的解決方案。報錯不用著急,找錯誤並且解決掉也是成長的一種方式!

其實到這裡應該就能知道,hiveql提交執行以後會生成mapreduce作業,並在yarn上運行,

這就是hive的好處,你只需要寫sql語句就能夠對文件系統中的數據使用SQL的方式來進行大數據的統計和分析。

到這一步來看使用hive和mapreduce哪個簡單?肯定是hive簡單,只需要sql語句就能完成對大數據的統計和分析!

*創建一個案例

我們再創建一個公司部門的表來進一步講述hive的使用。

一個是員工表 emp.txt

一個是部門表dept.txt

首先來看員工表 emp.txt

從第一列開始是員工編號、員工名稱、員工崗位、員工上級領導的編號、員工入職的時間、員工的工資、員工經貼(有的有有的沒有)、員工的部門編號。

然後再來看部門表。

從第一列開始是部門編號、部門名稱、部門地址。

根據這兩張表創建我們的表。

首先是員工表

create table emp(nempno int,nename string,njob string,nmgr int,nhiredate string,nsal double,ncomm double,ndeptno intn) ROW FORMAT DELIMITED FIELDS TERMINATED BY t;n

然後是部門表

create table dept(ndeptno int,ndname string,nlocation stringn) ROW FORMAT DELIMITED FIELDS TERMINATED BY t;n

註:ROW FORMAT DELIMITED FIELDS TERMINATED BY t;這一句表示欄位之間的分隔符用製表符tab鍵

然後把這兩段sql語句在hive中執行

執行完了之後表中還沒有數據,我們要導入數據,和上面導入數據到hive中一樣。

load data local inpath /Users/yinchuchu/Downloads/software/hadoop/SparkSql/data/emp.txt into table emp;nnload data local inpath /Users/yinchuchu/Downloads/software/hadoop/SparkSql/data/dept.txt into table dept;n

現在數據進來了,我們利用這個數據進行簡單的統計,統計每個部門員工人數,這個只需要emp表就能完成。

sql語句這樣寫

select deptno, count(1) from emp group by deptno;n

這句sql表示按照deptno(部門編號)進行分組,求每個部門的人數count(1)

可以看到,執行開始自動提交mapreduce作業!

然後我們打開yarn頁面來看看。

這就是一個mapreduce作業嘛!我們看執行結果!

結果出來了!我們的數據量雖然很小,但是mapreduce花的時間可一點都不少!

好了,到此數據倉庫Hive的使用就寫到這裡吧!

推薦閱讀:

【rocksdb源碼分析】使用PinnableSlice減少Get時的內存拷貝
淺談分散式存儲系統數據分布方法
阿里雲做存儲的盤古團隊如何?
關於分散式文件系統負載均衡有哪些資料值得閱讀?
主流分散式文件系統的的應用場景和優缺點?

TAG:数据分析 | 分布式存储 | 数据库 |