數據倉庫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時的內存拷貝
※淺談分散式存儲系統數據分布方法
※阿里雲做存儲的盤古團隊如何?
※關於分散式文件系統負載均衡有哪些資料值得閱讀?
※主流分散式文件系統的的應用場景和優缺點?