注:本文是在Hadoop單機環境部署完畢,mysql安裝完畢的情況下進行。點擊下面鏈接可查看。(感覺之前做的筆記有點雜亂。。。。。。。。)
mysql安裝(版本5.7)
目錄:
准備工作
1.開啟hadoop相關進程。hdfs 和 yarn 以及歷史服務器
2.開啟Mysql服務
service mysqld start
hive簡介
hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行,提交應用到YARN集群上,讀取存儲在HDFS上的數據,進行分析處理,所以說hive是建立在hadoop框架之上的提供sql方式分析數據的框架。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
官網:hive.apache.org 部分配置參考官網案例。
hive安裝
我的版本:1.2.1 底層使用MapReduce 下載地址:http://archive.apache.org/dist/hive/ 2.x版本底層使用mapreduce spark(官方推薦) Tez
1.上傳解壓並重命名
用Linux自帶的上傳工具上傳hive壓縮包。
解壓后重命名為hive1.2。用mv命令
2.創建數據倉庫並賦予寫權限。先到hadoop-2.7.3安裝目錄下執行下面命令。 因為hive-default.xml.template配置文件中默認設置的的數據倉庫就是/user/hive/warehouse
bin/hdfs dfs -mkdir /tmp bin/hdfs dfs -mkdir /user/hive/warehouse bin/hdfs dfs -chmod g+w /tmp bin/hdfs dfs -chmod g+w /user/hive/warehouse
hive-default.xml.template中
3.配置文件
到hive安裝目錄下的conf文件夾中復制hive-env.sh.template,粘貼為hive-env.sh
編輯hive-env.sh。配置hadoop安裝路徑和hive的配置目錄
4.配置全局環境變量
vim /etc/profile
在末尾添加如下配置:
# HIVE HOME export HIVE_HOME=/opt/modules/hive1.2 export PATH=${PATH}:${HIVE_HOME}/bin:${HIVE_HOME}/conf
使配置生效
source /etc/profile
5.啟動hive bin/hive
跳坑里去了。。。一連串錯誤 都提示元數據數據庫metastore_db不能創建
后來發現hive安裝目錄的文件權限全是root
修改用戶和用戶組為huadian用戶
chown -R huadian:huadian /opt/modules/hive1.2
出現下圖就成功
hive入門
1.創建表
創建數據庫
創建表
create table db_hive.tb_word( id INT, word STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' # 這句話表示字段之間用制表符分割 STORED AS TEXTFILE;
2.導入數據
首先在datas目錄下創建一個測試文件 並編輯
最后導入數據
LOAD DATA LOCAL INPATH '/opt/datas/word.data' INTO TABLE db_hive.tb_word;
3.實現業務(寫sql)
使用hive來統計word出現次數
select word,count(word) from db_hive.tb_word GROUP BY word
使用Mysql存儲元數據
因為hive默認使用derby屬於嵌入式數據,每次只支持一個會話。通常將元數據metaStore存儲在Mysql中,同時支持了多個會話進入hive
1.修改hive配置文件 復制模板重命名為hive-site.xml
具體配置:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://bigdata-hpsk01.huadian.com/metaStore?createDatabaseIfNotExist=true<value/> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver<value/> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root<value/> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456<value/> </property> </configuration>
2.在hive安裝目錄下的lib文件夾下導入mysql數據庫驅動jar包
3.重新進入hive
額外配置方便開發調試
在hive-site.xml中添加配置:
<!--顯示列名--> <property> <name>hive.cli.print.header</name> <value>true</value> <description>Whether to print the names of the columns in query output.</description> </property> <property> <!--顯示當前操作的數據庫--> <name>hive.cli.print.current.db</name> <value>true</value> <description>Whether to include the current database in the Hive prompt.</description> </property>
bin/hive 重新進入Hive
案例
Python和R語言,誰更適用於大數據Spark/Hadoop和深度學習?
數據下載鏈接:http://www.kdnuggets.com/aps/sw17-top11-dl-sh.anon.csv
下載數據后上傳到 /opt/datas目錄下
1.在db_hive數據庫下創建表
CREATE TABLE db_hive.tb_language_count ( id_number string, area string, python string, r string, sql_str string, rapidminer string, excel string, spark string, mangshe string, tensorflow string, scikit_learn string, tableau string, knime string, deep string, spark_hadoop string, ntools int, votetools string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
2.導入數據 有三種方式 這里我用了第一種
(1)導入本地路徑下的文件 剛才已經上傳到了/opt/datas目錄下
LOAD DATA LOCAL INPATH '/opt/datas/sw17-top11-dl-sh.anon.csv' INTO TABLE db_hive.tb_language_count;
(2)導入hdfs下的文件 先上傳文件到hdfs系統中(往hdfs上傳文件的代碼我就不貼了)。注:導入后hdfs上的文件會不見 相當於剪切
LOAD DATA INPATH '/user/huadian/sw17-top11-dl-sh.anon.csv' INTO TABLE db_hive.tb_language_count
(3)直接上傳文件到HDFS對應的數據庫,對應的數據表目錄下
3.統計使用python開發大數據的人數
select count(*) from db_hive.tb_language_count where python="1" and spark_hadoop="1"
4.統計R語言開發大數據的人數
select count(*) from db_hive.tb_language_count where r="1" and spark_hadoop="1"
5.一並統計 通過id連接2個統計結果 會執行三次查詢
select t1.p_c,t2.r_c from (select "1" as id ,count(*) as p_c from db_hive.tb_language_count where python="1" and spark_hadoop="1" ) t1 join (select "1" as id ,count(*) as r_c from db_hive.tb_language_count where r=1 and spark_hadoop="1" ) t2 on t1.id = t2.id
分析結果的保存,把運行結果保存到第二張表中
這里以統計使用python開發大數據的人數為例
可以到hdfs頁面上看到 我們剛創建的表以及運行結果
hive運行模式
設置為本地模式,當MapReduce處理的數據大小小於128MB或者MapTask個數小於5個,自動運行在本地模式下,提高運行速度。設置方式有2種
1.hive客戶端設置,但只是當前會話有效
進入hive數據庫后設置
set hive.exec.mode.local.auto=true
可以看到幾乎沒花時間
2.在配置文件hive-site.xml添加如下內容,永久設置有效
<property> <name>hive.exec.mode.local.auto</name> <value>true</value> <description>Let Hive determine whether to run in local mode automatically</description>
</property>
編寫hive腳本
抵達hive安裝目錄,執行下面的命令
bin/hive -e "sql語句"
bin/hive -f xxx.sql xxx.sql里內容為自己編寫的sql語句
編輯me.sql文件 並上傳到/opt/datas/ 目錄下
表的類型
管理表(內部):例如CREATE TABLE db_hive.tb_word
外部表:CREATE EXTERNAL TABLE db_hive.tb_word
區別:刪除表的時候管理表元數據和數據文件都被刪除,外部表只能刪除元數據。