Hive -------- 使用mysql儲存hive後設資料,Mysql的安裝以及配置步驟

Z_Data發表於2018-11-12

3.8 虛擬列

虛擬列本身是一個不存在列,在資料查詢的時候,可以通過虛擬列去查詢資料的的路徑,以及資料的偏移量,這兩個內容都是hive中為使用者提供的虛擬列進行的查詢

虛擬列存在兩種:

INPUT__FILE__NAME  代表資料的檔案儲存路徑

範例: 通過查詢虛擬列得到檔案儲存路徑

select ename ,INPUT__FILE__NAME from emp;
SMITH   hdfs://ns1/user/hive/warehouse/emp/emp.txt
ALLEN   hdfs://ns1/user/hive/warehouse/emp/emp.txt
WARD    hdfs://ns1/user/hive/warehouse/emp/emp.txt
JONES   hdfs://ns1/user/hive/warehouse/emp/emp.txt
MARTIN  hdfs://ns1/user/hive/warehouse/emp/emp.txt
BLAKE   hdfs://ns1/user/hive/warehouse/emp/emp.txt
CLARK   hdfs://ns1/user/hive/warehouse/emp/emp.txt
SCOTT   hdfs://ns1/user/hive/warehouse/emp/emp.txt
KING    hdfs://ns1/user/hive/warehouse/emp/emp.txt
TURNER  hdfs://ns1/user/hive/warehouse/emp/emp.txt
ADAMS   hdfs://ns1/user/hive/warehouse/emp/emp.txt
JAMES   hdfs://ns1/user/hive/warehouse/emp/emp.txt
FORD    hdfs://ns1/user/hive/warehouse/emp/emp.txt
MILLER  hdfs://ns1/user/hive/warehouse/emp/emp.txt

block__offset__inside__file: 得到資料檔案的偏移量資訊

範例: 通過虛擬列查詢資料的偏移量

select ename ,BLOCK__OFFSET__INSIDE__FILE from emp;
ename   block__offset__inside__file
SMITH   0
ALLEN   44
WARD    97
JONES   149
MARTIN  194
BLAKE   249
CLARK   294
SCOTT   339
KING    385
TURNER  429
ADAMS   480
JAMES   524
FORD    567
MILLER  612

3.9 使用mysql儲存hive後設資料

由於hive中預設的後設資料儲存在derby中只能單使用者訪問,如果一個在訪問hive,則另一使用者無法訪問, 會出現以下錯誤資訊

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/app/apache-hive-1.2.1-bin/metastore_db.

為了解決以上的問題,可以把hive的後設資料儲存在mysql中

 

3.9.1 Mysql的安裝步驟

1 在linux系統中可能存在mysql的安裝包,所以在第一步先檢查系統中是否安裝過mysql

 rpm -qa | grep -i mysql

通過以上命令檢查系統中是否安裝過mysql ,執行該命令發現確實存在mysql的安裝包如下

mysql-libs-5.1.73-7.el6.x86_64

2 解除安裝已有的mysql安裝包

sudo rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

解除安裝完成之後執行查群命令,檢視是否解除安裝成功

rpm -qa | grep -i mysql

通過以上查詢,發現確實已經解除安裝成功

 

3 上傳mysql的安裝包分為server端與client端

 MySQL-client-5.5.47-1.linux2.6.x86_64.rpm
 MySQL-server-5.5.47-1.linux2.6.x86_64.rpm

 

4 安裝mysql軟體

通過rpm方式  安裝mysql server

sudo rpm -ivh MySQL-server-5.5.47-1.linux2.6.x86_64.rpm 

通過rpm方式  安裝mysql client

sudo rpm -ivh MySQL-client-5.5.47-1.linux2.6.x86_64.rpm

5 檢視mysql的執行狀態

sudo service mysql status

6 啟動mysql 服務

sudo service mysql start

7 再次檢視mysql 執行狀態

MySQL running (28554)[  OK  ] 

顯示以上的結果說明mysql安裝成功

 

 

3.9.2 設定密碼,以及遠端授權

Mysql 安裝完成之後,進入到mysql的命令

mysql -uroot

進入到mysql資料庫之後,設定mysql的密碼

 update user set password=PASSWORD('root')  where User='root';

修改密碼之後,查詢user表內容如下

+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | hadoop03  | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | ::1       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
|      | localhost |                                           |
|      | hadoop03  |  

說明在本地已經成功設定好了密碼,通過新設定的密碼登入mysql

mysql -uroot -proot

發現登不了,出錯資訊如下

 Access denied for user 'root'@'localhost' (using password: YES)

 

說明使用者名稱或者密碼不正確

 

設定遠端連線授權

 

在user表中存在欄位,host 該欄位表示可以訪問mysql 的路徑地址,從哪個節點可以訪問(遠端或者本地)由這個欄位來決定

 

所以要授權遠端登入,則需要修改host欄位,增加一條資訊,表示任意節點都可以訪問mysql

用%號來表示任意

update user set host='%' where user='root' and host='127.0.0.1';

完成以上語句之後,需要對修改的user進行重新整理生效語句操作

flush privileges;

完成以上操作之後驗證 mysql 使用者登入,可以正常的登入成功

3.9.3 配置hive後設資料儲存在mysql

需要在hive-site配置檔案中進行配置 ,具體的配置資訊如下:

1 設定hive連線mysql的URL

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop01:3306/metastore?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>

Metastore: 預設儲存hive中的後設資料,是一個資料庫的名字

 

2 設定JDBC的驅動類

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

3 設定mysql的使用者名稱

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>

4 設定mysql的密碼

<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</description>
  </property>

 

完成以上的配置之後,需要在hive/lib 存放jdbc的驅動包

 

對於上傳的驅動包,最好修改以下許可權

 sudo chown -R hadoop:hadoop mysql-connector-java-5.1.31.jar 

把驅動拷貝到hive目錄下的lib資料夾下

cp mysql-connector-java-5.1.31.jar /opt/app/apache-hive-1.2.1-bin/lib/

 

到hive的lib下檢查是否拷貝成功

 

以上的步驟就步驟配置完成,退出hive重新登入,檢查mysql中是否建立了matesotre資料庫,如果建立成功,則說明配置成功

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

檢視mysql show databases 發現如上metastore 資料庫建立成功

相關文章