注:本文是在Hadoop單機環境部署完畢,mysql安裝完畢的狀況下進行。點擊下面連接可查看。(感受以前作的筆記有點雜亂。。。。。。。。)html
Hadoop單機環境部署java
mysql安裝(版本5.7)python
目錄:mysql
1.準備工做sql
2.hive簡介數據庫
3.hive安裝apache
4.hive入門vim
6.案例服務器
1.開啓hadoop相關進程。hdfs 和 yarn 以及歷史服務器
2.開啓Mysql服務
service mysqld start
hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行,提交應用到YARN集羣上,讀取存儲在HDFS上的數據,進行分析處理,因此說hive是創建在hadoop框架之上的提供sql方式分析數據的框架。 其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
官網:hive.apache.org 部分配置參考官網案例。
個人版本: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
出現下圖就成功
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
由於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
數據下載連接: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頁面上看到 咱們剛建立的表以及運行結果
設置爲本地模式,當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安裝目錄,執行下面的命令
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
區別:刪除表的時候管理表元數據和數據文件都被刪除,外部表只能刪除元數據。