hive三种方式区别和搭建按照Hive中metastore(元数据存储)不同位置分为三种方式:
1,安装Hive
解压下载好的apache-hive-1.2.1-bin.tar.gz安装包到 /opt/apache-hive-1.2.1目录下
tar -zxvf apache-hive-1.2.1-bin.tar.gz /opt/apache-hive-1.2.1
2,配置环境变量
export HIVE_HOME=/opt/apache-hive-1.2.1
export PATH=$HIVE_HOME/bin:$PATH
3,三种方式的搭建(配置文件的不同)
①Derby方式
修改hive-site.xml
配置文件,修改如下
javax.jdo.option.ConnectionURL
jdbc:derby:;databaseName=metastore_db;create=true
javax.jdo.option.ConnectionDriverName
org.apache.derby.jdbc.EmbeddedDriver
hive.metastore.local
true
hive.metastore.warehouse.dir
/user/hive/warehouse
启动hive
./hive
注意:将hive/lib目录下的jline jar包拷贝到hadoop的yarn lib下
这种模式的弊端
使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误
[html] view plaincopyprint?
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
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
②Local(mysql)方式
这种存储方式需要在本地运行一个mysql服务器,并作如下配置(下面两种使用mysql的方式,需要将 mysql的jar包拷贝到$HIVE_HOME/lib目录下)。 即是hive和mysql都配置在客户端修改hive-site.xml,配置如下
hive.metastore.warehouse.dir
/user/hive_remote/warehouse
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
password
注意一个坑:
权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户也是没有权限创建这个数据库,所以需要提前创建好hive_remote数据库
③Remote(mysql)方式
hive.metastore.warehouse.dir
/user/hive/warehouse
javax.jdo.option.ConnectionURL
jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
hive.metastore.warehouse.dir
/user/hive/warehouse
hive.metastore.local
false
hive.metastore.uris
thrift://192.168.57.5:9083
启动hive服务端程序
hive --service metastore
客户端启动
hive
rpm ‐qa|grep mysql
rpm ‐e ‐‐nodeps mysql‐libs‐5.1.73‐5.el6_6.x86_64(后面是响应的版本名称)
yum install -y mysql-server
service mysqld start
chkconfig mysqld on
mysql -uroot -p
修改root权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
刷新:
flush privileges;
添加用户:
CREATE USER 'hive'@'%' IDENTIFIED BY '123';
授权用户:这里给hive用户操作hive_meta数据库的权限
grant all privileges on hive_meta.* to hive@"%" identified by '123';
刷新:
flush privileges;
mysql> create database if not exists hive_mata;
Query OK, 1 row affected (0.04 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hive_meta |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql;
mysql> show tables;
mysql> delete from user where Host != '%';
mysql -uhive -p123
cp hive-default.xml.template hive-site.xml
hive.metastore.warehouse.dir
/user/hive_localmysql/warehouse
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
123
export HIVE_HOME=/opt/zgl/hive-1.2.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$PATH
hive --service metastore >> /tmp/meta.log 2>&1 &
配置步骤和以上服务端基本一致,可以直接用scp命令发送到客户端节点
唯一不同的地方修改hive-site.xml
hive.metastore.local
false
hive.metastore.uris
thrift://node04:9083
然后,在客户端直接 hive 即可进入hive shell。这里的数据库存放的是源数据,默认只有一个default
到此就配置结束了 QAQ。