Hive 中 metastore(元數據存儲)的三種方式:
a)
內嵌 Derby 方式
b)
Local 方式
c)
Remote 方式
第一種方式:本地 mysql
注: 這種存儲方式須要在本地運行一個 mysql 服務器,並做以下配置,使用 mysql 的方 式,須要將 mysql 的 jar 包拷貝到$HIVE_HOME/lib 目錄下
1. 安裝mysql, 修改權限
yum install mysqld-server
chkconfig mysqld on 設置開機啓動
service mysqld start 啓動mysql
進入mysql
mysql
use mysql;
show tables;
desc;
select host, user, password from user;
修改mysql權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
delete from user;
flush privileges; 刷新權限
quit
mysql
mysql -u root -p
此時須要輸入密碼,進入mysql, 若是可以進入,則mysql修改爲功
2. 同一臺主機上安裝 hive
上傳hive壓縮包,並解壓到home目錄下
tar zxvf
apache-hive-1.2.1-bin.tar.gz -C /home
配置hive環境變量
vi /etc/profile
source /etc/profile
修改hive的配置文件
vi hive-site.xml
hive
發現報以下錯誤,
只須要拷貝mysql的jar包到hive的lib下便可
![](http://static.javashuo.com/static/loading.gif)
hive中的高版本替換hadoop中的低版本
hive中的高版本
hadoop中的jline爲低版本-->替換爲高版本
進入hive中的lib目錄,進行copy到hadoop中的lib下
cp jline-2.12.jar /root/hadoop-2.5.1/share/hadoop/yarn/lib
而後 hive 就成功進入了!!!
測試hive
注:使用 derby 存儲方式時,運行 hive會在當前目錄生成一個 derby 文件和一個metastore_db 目錄。
這種存儲方式的弊端是在
同一個目錄下同時只能有一個 hive 客戶端能使用數據庫, 不然會提示以下錯誤 [html] view plaincopyprint? hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
第二種方式:遠端mysql--remote分開 親測安裝
假定
node1爲客戶端,node2爲服務端
node1和node2上傳hive壓縮包,並解壓到home路徑下,配置hive環境變量
服務端node2:服務端須要mysql jar包
拷貝mysql-connecor-java.jar到hive的lib下
cd conf
mv hive-default.template.xml hive-site.xml
vi hive-site.xml
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/opt/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.1.33:3306/hive?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>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
客戶端node1:
首先替換hadoop中jline的版本爲hive中的高版本,步驟參考第一種方式
cd conf
mv hive-default.template.xml hive-site.xml
vi hive-site.xml
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/opt/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083</value>
</property>
</configuration>
客戶端服務端修改hive-env.sh配置其中的$hadoop_homehtml
測試hive:
node2:
hive --service metastore
node1:
hive
create table tbl (id int, name string);
insert into tbl values(1, 'zhangsan');
select * from tbl;
第三種方式:本地derby
這種方式是最簡單的存儲方式,
只須要在 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:derby:;databaseName=metastore_db;create=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
注:使用 derby 存儲方式時,運行 hive會在當前目錄生成一個 derby 文件和一個metastore_db 目錄。這種存儲方式的弊端是在同一個目錄下同時只能有一個 hive 客戶端能使用數據庫, 不然會提示以下錯誤 [html] view plaincopyprint? hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask