hive三種方式區別和搭建

 

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下便可

 

 

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 
相關文章
相關標籤/搜索