hive搭建
hive三种方式区别和搭建按照Hive中metastore(元数据存储)不同位置分为三种方式:
- 内嵌Derby方式 :hive将源数据存储在HDFS中,而元数据默认存储在hive自带的数据库Derby中。但是Derby不支持多用户同时访问,所以这种模式仅供测试使用。
- Local方式:使用mysql数据库替代Derby来存储元数据,以解决多用户并发访问问题
- Remote方式:以本地模式为基础,mysql数据库所在的节点提供metastore service服务,其他节点可以连接该服务来获取元数据信息
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.12,配置环境变量
export HIVE_HOME=/opt/apache-hive-1.2.1
export PATH=$HIVE_HOME/bin:$PATH3,三种方式的搭建(配置文件的不同)
①Derby方式
修改hive-site.xml
配置文件,修改如下
<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>
启动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,配置如下
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
注意一个坑:
权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户也是没有权限创建这个数据库,所以需要提前创建好hive_remote数据库
③Remote(mysql)方式
- 配置server端hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
- 配置客户端hive-site.xml
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.57.5:9083</value>
</property>
启动hive服务端程序
hive --service metastore
客户端启动
hive
Remote方式搭建详细步骤
1.安装mysql
- 检查是否已安装mysql
rpm ‐qa|grep mysql
- 如果已安装,卸载,然后使用上一步命令查看是否已卸载
rpm ‐e ‐‐nodeps mysql‐libs‐5.1.73‐5.el6_6.x86_64(后面是响应的版本名称)
- 在线安装mysql
yum install -y mysql-server
- 开启mysql服务
service mysqld start
- 设置mysql 服务自启动
chkconfig mysqld on
- 新安装的mysql没有密码输入以下命令即可进入,提示输入密码直接回车
mysql -uroot -p
- 进入mysql后,设定权限,修改密码
修改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;
- 为hive用户创建数据库 hive_mata,然后查看一下数据库
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数据库
mysql> use mysql;
- 查看表,里面有一个user表存储着数据库用户的信息,这里可能会出现权限冲突问题,所以我们将多余用户信息删除
mysql> show tables;
mysql> delete from user where Host != '%';
- 退出mysql,使用hive登录
mysql -uhive -p123
2. 安装hive
- 打开最开始解压后hive安装包进入conf目录下,
cp hive-default.xml.template hive-site.xml
- 修改hive-site.xml 将原有的所有配置文件全部删除,用以下内容替换
<property>
<name>hive.metastore.warehouse.dir</name> <!-- hive工作目录 -->
<value>/user/hive_localmysql/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name> <!-- 是否是本地模式,即hive和mysql是否在同一节点 -->
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name> <!-- 连接mysql的URL -->
<value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name> <!-- 连接mysql的驱动 -->
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name> <!-- 连接的用户名,使用上面创建的hive用户 -->
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name> <!-- 连接的用户的密码 -->
<value>123</value>
</property>
- 环境变量配置
vim /etc/profile
export HIVE_HOME=/opt/zgl/hive-1.2.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$PATH
- 将mysql的连接驱动包放到 hive 的 lib 目录下
- 将hive lib下的 jline 的jar包拷到 hadoop的 share/hadoop/yarn/lib 中(这里因为hadoop内的 jline 的jar包过时了,我们令其和 hive 中的版本保持一致)
- 服务端启动metastore服务(启动后台运行)
hive --service metastore >> /tmp/meta.log 2>&1 &
- 启动HDFS和YARN,在命令行输入hive即可进入hive shell,在这里便可以对hive进行操作。
客户端配置
配置步骤和以上服务端基本一致,可以直接用scp命令发送到客户端节点
唯一不同的地方修改hive-site.xml
<property>
<name>hive.metastore.local</name> <!-- 是否是本地模式,即hive和mysql是否在同一节点 -->
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name> <!-- 连接的服务的 uri -->
<value>thrift://node04:9083</value> <!-- 通过 thrift 协议连接,连接的服务端的 IP 和端口号 -->
</property>
然后,在客户端直接 hive 即可进入hive shell。这里的数据库存放的是源数据,默认只有一个default
到此就配置结束了 QAQ。
3816



被折叠的 条评论
为什么被折叠?



