Hive 安裝使用


一、 Hive 安裝地址

  1. Hive 官網地址(基本上所有apache 相關的網址都是 http://XXX.apache.org/)
    http://hive.apache.org/
  2. 文檔查看地址
    https://cwiki.apache.org/confluence/display/Hive/GettingStarted
  3. 下載地址
    http://archive.apache.org/dist/hive/
  4. github地址
    https://github.com/apache/hive

二、 Hive 安裝部署

  1. Hive 安裝及配置
    (1) 把 apache-hive-1.2.1-bin.tar.gz上傳到linux的 /opt/software 目錄下
    (2) 解壓 apache-hive-1.2.1-bin.tar.gz/opt/module/ 目錄下面

    [kino@hadoop102 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
    

    (3) 修改 apache-hive-1.2.1-bin.tar.gz 的名稱爲hive

    [kino@hadoop102 module]$ mv apache-hive-1.2.1-bin/ hive
    

    (4) 修改 /opt/module/hive/conf 目錄下的 hive-env.sh.template 名稱爲 hive-env.sh

    [kino@hadoop102 conf]$ mv hive-env.sh.template hive-env.sh
    

    (5) 配置 hive-env.sh 文件
           ① 配置HADOOP_HOME路徑

    export HADOOP_HOME=/opt/module/hadoop-2.7.2		
    

           ② 配置HIVE_CONF_DIR路徑

    export HIVE_CONF_DIR=/opt/module/hive/conf
    
  2. Hadoop 集羣配置
    (1) 必須啓動 hdfsyarn

    [kino@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
    [kino@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
    

    如果 datanode 啓動不了, 停止 dfs 和 yarn, 格式化 namenode 再重啓

    (2) 在HDFS上創建 /tmp/user/hive/warehouse 兩個目錄並修改他們的同組權限可寫

    [kino@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir /tmp
    [kino@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -mkdir -p /user/hive/warehouse
    
    [kino@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /tmp
    [kino@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -chmod g+w /user/hive/warehouse
    
  3. Hive 基本操作
    所有的操作均在 /opt/module/hive 目錄下(hive 安裝解壓後的根目錄下)

    (1) 啓動 hive

    [kino@hadoop102 hive]$ bin/hive
    

    (2) 查看數據庫

    hive> show databases;
    

    (3) 打開默認數據庫

    hive> use default;
    

    (4) 顯示 default 數據庫中的表

    hive> show tables;
    

    (5) 創建一張表

    hive> create table student(id int, name string);
    

    (6) 顯示數據庫中有幾張表

    hive> show tables;
    

    (7) 查看錶的結構

    hive> desc student;
    

    (8) 向表中插入數據

    hive> insert into student values(1000,"ss");
    

    (9) 查詢表中數據

    hive> select * from student;
    

    (10) 退出hive

    hive> quit;
    

三、將本地文件導入Hive案例

需求: 將本地 /opt/module/datas/student.txt 這個目錄下的數據導入到hive的student(id int, name string)表中(在上一步創建的表)。

  1. 數據準備 ,在 /opt/module/datas這個目錄下準備數據

    ① 在/opt/module/目錄下創建datas

    [kino@hadoop102 module]$ mkdir datas
    

    ② 在/opt/module/datas/目錄下創建student.txt文件並添加數據
    注意以tab鍵間隔。

    [kino@hadoop102 datas]$ touch student.txt
    [kino@hadoop102 datas]$ vim student.txt
    1001	zhangshan
    1002	lishi
    1003	wangwu
    1004	maliu
    
  2. Hive 實際操作
    (1) 啓動hive

    [kino@hadoop102 hive]$ bin/hive
    

    (2) 顯示數據庫

    hive> show databases;
    

    (3) 使用default數據庫

    hive> use default;
    

    (4) 顯示default數據庫中的表

    hive> show tables;
    

    (5) 刪除已創建的student表

    hive> drop table student;
    

    (6) 創建student表, 並聲明文件分隔符’\t’

    hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED  BY '\t';
    

    (7) 加載/opt/module/datas/student.txt 文件到student數據庫表中。

    hive> load data local inpath '/opt/module/datas/student.txt' into table student;
    

    (8) Hive查詢結果

    hive> select * from student;
    OK
    1001	zhangsan
    1002	lisi
    1003	wangwu
    1004	maliu
    Time taken: 0.266 seconds, Fetched: 3 row(s)
    
  3. 再打開一個客戶端窗口啓動hive,會產生java.sql.SQLException異常。
    原因是,Metastore默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore;

    所以下面我們開始安裝 MySQL


四、 MySQL 安裝 及 配置

  1. 卸載現在的 MySQL

  2. 安裝 MySQL

  3. MySQL 中 user 表中的主機配置
    目的: 配置只要是root用戶+密碼,在任何主機上都能登錄MySQL數據庫。

    ① 進入mysql

    [root@hadoop102 mysql-libs]# mysql -uroot -p密碼
    

    ② 顯示數據庫

    mysql>show databases;
    

    ③ 使用mysql數據庫

    mysql>use mysql;
    

    ④ 展示mysql數據庫中的所有表

    mysql>show tables;
    

    ⑤ 展示user表的結構

    mysql>desc user;
    

    ⑥ 查詢user表

    mysql>select User, Host, Password from user;
    

    ⑦ 修改user表,把Host表內容修改爲%

    mysql>update user set host='%' where host='localhost';
    

    ⑧ 刪除root用戶的其他host

    mysql>delete from user where Host='hadoop102';
    mysql>delete from user where Host='127.0.0.1';
    mysql>delete from user where Host='::1';
    

    ⑨ 刷新

    mysql>flush privileges;
    

    ⑩ 退出

    mysql>quit;
    

五、 Hive元數據配置到MySQL

  1. 驅動拷貝()

    ① 在/opt/software/mysql-libs目錄下解壓mysql-connector-java-5.1.27.tar.gz驅動包

    [root@hadoop102 mysql-libs]# tar -zxvf mysql-connector-java-5.1.27.tar.gz
    

    ② 拷貝/opt/software/mysql-libs/mysql-connector-java-5.1.27目錄下的mysql-connector-java-5.1.27-bin.jar到/opt/module/hive/lib/

    [root@hadoop102 mysql-connector-java-5.1.27]# cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/
    
  2. 配置Metastore到MySQL

    ① 在/opt/module/hive/conf目錄下創建一個hive-site.xml

    [kino@hadoop102 conf]$ vim hive-site.xml
    

    根據官方文檔配置參數,拷貝數據到hive-site.xml文件中

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    	<property>
    	  <name>javax.jdo.option.ConnectionURL</name>
    	  <value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseIfNotExist=true</value>
    	  <description>JDBC connect string for a JDBC metastore</description>
    	</property>
    
    	<property>
    	  <name>javax.jdo.option.ConnectionDriverName</name>
    	  <value>com.mysql.jdbc.Driver</value>
    	  <description>Driver class name for a JDBC metastore</description>
    	</property>
    
    	<property>
    	  <name>javax.jdo.option.ConnectionUserName</name>
    	  <value>root</value>
    	  <description>username to use against metastore database</description>
    	</property>
    
    	<property>
    	  <name>javax.jdo.option.ConnectionPassword</name>
    	  <value>000000</value>
    	  <description>password to use against metastore database</description>
    	</property>
    </configuration>
    

    ③ 配置完畢後,如果啓動hive異常,可以重新啓動虛擬機。(重啓後,別忘了啓動hadoop集羣)

  3. 多窗口啓動Hive測試
    ① 先啓動MySQL

    [kino@hadoop102 mysql-libs]$ mysql -uroot -p123456
    

    查看有幾個數據庫

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql             |
    | performance_schema |
    | test               |
    +--------------------+
    

    ② 再次打開多個窗口,分別啓動hive

    [kino@hadoop102 hive]$ bin/hive
    

    ③ 啓動hive後,回到MySQL窗口查看數據庫,顯示增加了metastore數據庫

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | metastore          |
    | mysql             |
    | performance_schema |
    | test               |
    +--------------------+
    

六、 HiveJDBC訪問

  1. 通過前面的學習, 我們可以用 hive 查詢 數據庫的表,的 但是顯示的很不直觀, 例如:
    在這裏插入圖片描述
    而通過 HiveJDBC 的方式查詢, 返回的結果列表和 mysql 顯示的一致, 方便觀看
    在這裏插入圖片描述

  2. 啓動 hiveserver2 服務

    [kino@hadoop102 hive]$ bin/hiveserver2
    
  3. 啓動beeline

    [kino@hadoop102 hive]$ bin/beeline
    Beeline version 1.2.1 by Apache Hive
    beeline>
    
  4. 連接 hiveserver2

    beeline> !connect jdbc:hive2://hadoop102:10000(回車)
    Connecting to jdbc:hive2://hadoop102:10000
    Enter username for jdbc:hive2://hadoop102:10000: kino(回車, 這裏是我們操作 HDFS 的用戶)
    Enter password for jdbc:hive2://hadoop102:10000: (直接回車,操作HDFS 沒有密碼所以直接回車)
    Connected to: Apache Hive (version 1.2.1)
    Driver: Hive JDBC (version 1.2.1)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://hadoop102:10000> show databases;
    +----------------+--+
    | database_name  |
    +----------------+--+
    | default        |
    | hive_db2       |
    +----------------+--+
    

七、Hive常用交互命令

[kino@hadoop102 hive]$ bin/hive -help
usage: hive
 -d,--define <key=value>          Variable subsitution to apply to hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable subsitution to apply to hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the console)
  1. “-e”不進入hive的交互窗口執行sql語句

    [kino@hadoop102 hive]$ bin/hive -e "select id from student;"
    
  2. “-f”執行腳本中sql語句
    ① 在/opt/module/datas目錄下創建hivef.sql文件

    [atguigu@hadoop102 datas]$ vim hive.sql
    

    文件中寫入正確的sql語句: select *from student;

    ② 執行文件中的sql語句

    [kino@hadoop102 hive]$ bin/hive -f /opt/module/datas/hive.sql
    

    ③ 執行文件中的sql語句並將結果寫入文件中

    [kino@hadoop102 hive]$ bin/hive -f /opt/module/datas/hive.sql  > /opt/module/datas/hive_result.txt
    

八、Hive其他命令操作

  1. 退出hive窗口的兩種方式(hive(default)> : 代表連接的是 default 數據庫, 詳看 9.2介紹內容):

    hive(default)>exit;
    hive(default)>quit;
    

    在新版的hive中沒區別了,在以前的版本是有的:

    exit:先隱性提交數據,再退出;

    quit:不提交數據,退出;

  2. 在hive cli命令窗口中如何查看hdfs文件系統

    hive(default)>dfs -ls /;
    
  3. 在hive cli命令窗口中如何查看本地文件系統

    hive(default)>! ls /opt/module/datas;
    
  4. 查看在hive中輸入的所有歷史命令

    1. 進入到當前用戶的根目錄/root或/home/kino
    2. 查看. hivehistory文件
      [kino@hadoop102 ~]$ cat .hivehistory
      

九、 常見屬性配置

9.1 Hive數據倉庫位置配置

  1. Default數據倉庫的最原始位置是在hdfs上的:/user/hive/warehouse路徑下。
    2. 在倉庫目錄下,沒有對默認的數據庫default創建文件夾。如果某張表屬於default數據庫,直接在數據倉庫目錄下創建一個文件夾。
  2. 修改 default 數據倉庫原始位置(將 hive-default.xml.template 如下配置信息拷貝到 hive-site.xml文件中)。
    <property>
    	<name>hive.metastore.warehouse.dir</name>
    	<value>/user/hive/warehouse</value>
    	<description>location of default database for the warehouse</description>
    </property>
    
    配置同組用戶有執行權限
    bin/hdfs dfs -chmod g+w /user/hive/warehouse
    

9.2 查詢後信息顯示配置

  1. hive-site.xml 文件中添加如下配置信息,就可以實現顯示當前數據庫,以及查詢表的頭信息配置。

    <!-- 查詢表時, 顯示錶頭 -->
    <property>
    	<name>hive.cli.print.header</name>
    	<value>true</value>
    </property>
    
    <!-- use 到指定庫後,顯示對應數據庫信息 -->
    <property>
    	<name>hive.cli.print.current.db</name>
    	<value>true</value>
    </property>
    
  2. 重新啓動hive,對比配置前後差異。
    ① 配置前
    在這裏插入圖片描述
    ② 配置後
    在這裏插入圖片描述
    這裏在 hive-site.xml 配置文件中配置的會永遠起作用, 後面在 9.4 中還會有其他方式設置該屬性;

9.3 Hive運行日誌信息配置

  1. Hive的log默認存放在 /tmp/kino/hive.log 目錄下(當前用戶名下)
  2. 修改hive的log存放日誌到 /opt/module/hive/logs
    ① 修改 hive-log4j.properties.template 文件名稱爲 hive-log4j.properties
    <!-- 注意: 此時在 hive目錄下的 conf 目錄下(/opt/module/hive/conf/) -->
    [kino@hadoop102 conf]$ pwd
    /opt/module/hive/conf
    [kino@hadoop102 conf]$ mv hive-log4j.properties.template hive-log4j.properties
    
    ② 在hive-log4j.properties文件中修改log存放位置
    hive.log.dir=/opt/module/hive/logs
    

9.4 參數配置方式

  1. 查看當前所有的配置信息

    hive>set;
    
  2. 參數的配置三種方式
    ① 配置文件方式
    默認配置文件:hive-default.xml
    用戶自定義配置文件:hive-site.xml

    注意:用戶自定義配置會覆蓋默認配置。另外,Hive也會讀入Hadoop的配置,因爲Hive是作爲Hadoop的客戶端啓動的,Hive的配置會覆蓋Hadoop的配置。配置文件的設定對本機啓動的所有Hive進程都有效。

    ② 命令行參數方式(注意:僅對本次hive啓動有效)

    啓動Hive時,可以在命令行添加-hiveconf param=value來設定參數。

    [kino@hadoop103 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;
    

    查看參數設置:

    hive (default)> set mapred.reduce.tasks;
    

    ③ 參數聲明方式(注意:僅對本次hive啓動有效)

    例如9.2中設置顯示錶頭和數據庫信息的設置

    hive> set hive.cli.print.current.db=true;
    

    查看參數設置:

    hive (default)> set set hive.cli.print.current.db;
    

    上述三種設定方式的優先級依次遞增。即配置文件<命令行參數<參數聲明。注意某些系統級的參數,例如log4j相關的設定,必須用前兩種方式設定,因爲那些參數的讀取在會話建立以前已經完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章