1. 安裝hive:上傳apache-hive-2.1.1-bin.tar.gz文件到/usr/local目錄下,解壓后更名為hive。
2. 配置hive環境變量,編輯/etc/profile文件(配置完后記得source /etc/profile使其生效)
3. 配置hive,進入到hive文件夾內,將hive-default.xml.template拷貝一份,命名為hive-site.xml,編輯它,將其中的hive.metastore.schema.verification屬性設置為false(內容較多不方便,可是用查找命令,vim在非編輯狀態下按/鍵,然后輸入要搜索的內容,回車即可,按小寫N鍵往后翻,按大寫N鍵往前翻)
4. 創建/usr/local/hive/tmp目錄,替換${system:java.io.tmpdir}為該目錄(vim下使用替換命令,進入命令模式,輸入%s#A#B#回車,即為將所有的A替換為B,按照此方式將所有的${system:java.io.tmpdir}替換為/usr/local/hive/tmp)
5. 同理,將所有${system:user.name}替換為登錄用戶,此處為root(共三處)
6. 進入/usr/local/hive目錄下,執行schematool -initSchema -dbType derby命令。該命令會初始化derby數據庫,該數據庫中存放的是hive數據庫的元數據,實際生產環境中可能用MySQL替換derby數據庫,或者其他數據庫,不過MySQL使用的較多。執行完該命令后,在hive目錄下會多出一個metastore_db文件。(注意!!!下次執行hive時應該還在同一目錄,derby默認會到當前目錄下尋找metastore。如果遇到問題,把metastore_db刪掉,重新執行命令)
7. 啟動hive(此時hadoop和yarn也要啟動起來),直接輸入hive回車即可。
8. 此后的操作和MySQL的命令行差不多:
9. 使用hive創建一張表:
10. 可以直接在hive里執行hadoop語句,觀察剛才創建的數據庫,紅框為剛才創建表時hive創建的目錄,其中/user/hive/warehouse目錄下有剛才的創建的表的信息。
11. 往表里裝數據,在hive命令模式下,輸入load data inpath '/input/' overwrite into table wordcount;
其中/input/目錄下有一個txt文件,內容如下:
12. 上一步操作即為將/input/input.txt這個文件和wordcount這張表建立一個關聯,查詢這張表的時候,就會通過hdfs查詢到該文件的內容。
13. 下面使用hive執行上一節中wordcount程序,直接在hive命令模式寫輸入:select word, count(*) num from (select explode(split(line, ' ')) as word from wordcount) w group by word;其中,split為分割,即將line字段按照空格進行分割,expode函數的作用是,將數組中每一個元素作為單獨的一行進行輸出。該sql語句的執行結果如下圖:
可以看出,該sql語句實際上執行MapReduce成功,開啟了一個job,和上一節中編寫的java代碼是一個效果。
14. 下面用hive分析一個實際當中的日志文件,將該文件上傳至hadoop根目錄(該文件為搜狗的搜索日志文件)
該文件的內容大致如下圖,其格式為搜索時間+搜索ID+搜索內容+結果URL,期間都是用逗號隔開。
15. 創建一張表,用來裝載sougou.dic的數據,然后對這張表進行操作。進入hive命令模式,輸入命令:
create table sougou (qtime string, qid string, qword string, url string) row format delimited fields terminated by ',';
其中,row format delimited fields terminated by ','表示將每一行用逗號進行分割,分別作為一個字段。
16. 裝載數據,將sougou.dic里的數據裝載到剛才創建的表里(不是將里邊的內容裝載到了表里,而是在它們兩者之間建立了一種聯系)。輸入命令:
load data inpath '/sougou.dic' into table sougou;
17. 下面就可以通過這個張表來操作這個日志文件了,先統計一下一共有多少條記錄(由於這個日志文件有146M,而hadoop默認塊大小為128M,因此操作這張表的時候一般會啟動MapReduce程序),輸入select count(*) from sougou;觀察結果:
18. 下面來查詢熱搜榜,首先創建一張表,用來記錄搜索的關鍵字和該關鍵字的搜索次數,按照由大到小排序,輸入HQL語句:
create table sougou_results as select keyword, count(1) as count from (select qword as keyword from sougou) t group by keyword order by count desc;
19. 接下來查詢熱搜榜前十名的搜索記錄,輸入HQL語句,並觀察執行結果:
select * from sougou_results limit 10;