Hadoop+Hive環境部署

注:本文是在Hadoop單機環境部署完畢,mysql安裝完畢的狀況下進行。點擊下面連接可查看。(感受以前作的筆記有點雜亂。。。。。。。。)html

Hadoop單機環境部署java

mysql安裝(版本5.7)python

目錄:mysql

1.準備工做sql

2.hive簡介數據庫

3.hive安裝apache

4.hive入門vim

5.使用Mysql存儲hive元數據api

6.案例服務器

7.hive運行模式

8.編寫hive腳本

9.表的類型

 

準備工做

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

區別:刪除表的時候管理表元數據和數據文件都被刪除,外部表只能刪除元數據。

相關文章
相關標籤/搜索