文章目錄
一、 Hive 安裝地址
- Hive 官網地址(基本上所有apache 相關的網址都是 http://XXX.apache.org/)
http://hive.apache.org/ - 文檔查看地址
https://cwiki.apache.org/confluence/display/Hive/GettingStarted - 下載地址
http://archive.apache.org/dist/hive/ - github地址
https://github.com/apache/hive
二、 Hive 安裝部署
-
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
-
Hadoop 集羣配置
(1) 必須啓動hdfs
和yarn
[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
-
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)表中(在上一步創建的表)。
-
數據準備 ,在 /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
-
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)
-
再打開一個客戶端窗口啓動hive,會產生java.sql.SQLException異常。
原因是,Metastore默認存儲在自帶的derby數據庫中,推薦使用MySQL存儲Metastore;所以下面我們開始安裝 MySQL
四、 MySQL 安裝 及 配置
-
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
-
驅動拷貝()
① 在/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/
-
配置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集羣)
-
多窗口啓動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訪問
-
通過前面的學習, 我們可以用 hive 查詢 數據庫的表,的 但是顯示的很不直觀, 例如:
而通過 HiveJDBC 的方式查詢, 返回的結果列表和 mysql 顯示的一致, 方便觀看
-
啓動 hiveserver2 服務
[kino@hadoop102 hive]$ bin/hiveserver2
-
啓動beeline
[kino@hadoop102 hive]$ bin/beeline Beeline version 1.2.1 by Apache Hive beeline>
-
連接 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)
-
“-e”不進入hive的交互窗口執行sql語句
[kino@hadoop102 hive]$ bin/hive -e "select id from student;"
-
“-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其他命令操作
-
退出hive窗口的兩種方式(hive(default)> : 代表連接的是 default 數據庫, 詳看 9.2介紹內容):
hive(default)>exit; hive(default)>quit;
在新版的hive中沒區別了,在以前的版本是有的:
exit:先隱性提交數據,再退出;
quit:不提交數據,退出;
-
在hive cli命令窗口中如何查看hdfs文件系統
hive(default)>dfs -ls /;
-
在hive cli命令窗口中如何查看本地文件系統
hive(default)>! ls /opt/module/datas;
-
查看在hive中輸入的所有歷史命令
- 進入到當前用戶的根目錄/root或/home/kino
- 查看. hivehistory文件
[kino@hadoop102 ~]$ cat .hivehistory
九、 常見屬性配置
9.1 Hive數據倉庫位置配置
- Default數據倉庫的最原始位置是在hdfs上的:/user/hive/warehouse路徑下。
2. 在倉庫目錄下,沒有對默認的數據庫default創建文件夾。如果某張表屬於default數據庫,直接在數據倉庫目錄下創建一個文件夾。 - 修改
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 查詢後信息顯示配置
-
在
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>
-
重新啓動hive,對比配置前後差異。
① 配置前
② 配置後
這裏在hive-site.xml
配置文件中配置的會永遠起作用, 後面在 9.4 中還會有其他方式設置該屬性;
9.3 Hive運行日誌信息配置
- Hive的log默認存放在
/tmp/kino/hive.log
目錄下(當前用戶名下) - 修改hive的log存放日誌到
/opt/module/hive/logs
① 修改hive-log4j.properties.template
文件名稱爲hive-log4j.properties
② 在hive-log4j.properties文件中修改log存放位置<!-- 注意: 此時在 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.log.dir=/opt/module/hive/logs
9.4 參數配置方式
-
查看當前所有的配置信息
hive>set;
-
參數的配置三種方式
① 配置文件方式
默認配置文件: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相關的設定,必須用前兩種方式設定,因爲那些參數的讀取在會話建立以前已經完成了。