Hive伪分布模式安装

6 篇文章 0 订阅
1、安装和配置
可以通过下载压缩包来安装一个稳定版的Hive,也可以下载源码进行编译。
1.1 运行HiveServer2和Beeline
1.2要求
java1.7+,官网推荐1.8
Hadoop2.x
1.3安装Hive的稳定版
解压缩,并重命名
tar -zxvf hive-2.1.0-bin.tar.gz
mv apache-hive-2.1.0-bin hive-2.1.0
在/etc/profile或者~/.bashrc中设置HIVE_HOME变量的值,使其指向Hive的安装目录:
export HIVE_HOME=/opt/hive/hive-2.1.0
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
使配置立即生效:
source /etc/profile
修改Hive配置文档(不修改则使用默认文档), 两种安装方式使用Derby数据库、使用其他数据库(如mysql):
使用Derby数据库的安装方式
Apache Derby是一个完全用java编写的数据库,所以可以跨平台,但需要在JVM中运行数据库,即 将元数据存储在Derby数据库中, 存储了如表的模式和分区信息等元数据信息
是Hive默认的安装方式
创建hive-env.sh文件
cp hive-env.sh.template hive-env.sh
在hive-env.sh中添加:
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.2
# Hive Configuration Directory can be controlled by
export HIVE_CONF_DIR=/opt/hive/hive-2.1.0/conf
创建hive-site.xml
cd /opt/hive/hive-2.1.0/conf
cp hive-default.xml.template hive-site.xml
配置 hive-site.xml文件:
参数hive-metastore.warehourse.dir 指定存储Hive表中数据的存储目录指定的是HDFS上的位置,默认值为 /user/hive/warehouse(好像没有这个参数,我自己加的)
参数hive.exec.scratchdir 指定Hive的数据临时文件目录,默认位置为/tmp/hive-${user.name}。这里配置为 /tmp/hive
连接数据库配置说明:
参数javax.jdo.option.ConnectionURL
jdbc:derby:;databaseName=metastore_db;create=true
参数javax.jdo.option.ConnectionDriverName指定驱动的类入口名称:org.apache.derby.jdbc.EmbeddedDriver
参数javax.jdo.option.ConnectionUserName指定数据库的用户名:APP
参数javax.jdo.option.ConnectionPassword指定数据库的密码:mime
Derby数据库驱动在目录$HIVE_HOME/lib/下,derby-10.10.2.0.jar
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
    <description>
     告诉hive如何连接metastore server,默认情况下使用当前目录作为属性值字符串中的databaseName部分,这样会造成用户每当切换工作目录下时,Derby就会忘记在前一个目录下的元数据存储信息!我们可以使用databaseName=/opt/hive/hive-2.1.0/metastore_db作为绝对路径,即metastore_db目录所在路径,这样设置可以解决每次开启一个新的hive会话时,Hive自动删除工作目录下的metastore_db目录的问题。现在我们不管在哪个目录下工作都可以访问到所有的元数据。
    </description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.apache.derby.jdbc.EmbeddedDriver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>APP</value>
    <description>Username to use against metastore database</description>
  </property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>mine</value>
  <description>password to use against metastore database</description>
</property>
启动Hive
命令行键入hive
显示出错:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql))
根据错误提示,应该是metastore数据库没有初始化的原因造成的。
按照提示执行命令“schematool -initSchema -dbType derby”对metastore进行初始化。
但此时可能仍会报错误:Error: FUNCTION ‘NUCLEUS_ASCII’ already exists. (state=X0Y68,code=30000)
这是因为之前已经生成了metastore_db文件夹。需要将当前工作目录下的metastore_db文件夹删除,rm -r metastore_db
然后重新运行“schematool -initSchema -dbType derby”命令。
之后执行hive,又出现错:
java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
解决方法:
在hive安装目录下创建临时io的tmp文件夹:
mkdir iotmp
然后,将这个iotmp的绝对路径替换hive-site.xml文件中的 ${system:java.io.tmpdir}
再执行hive,启动成功!
在Hive建表之前,(在默认配置文档下)创建 /tmp 和/user/hive/warehouse文件目录,并在HDFS中设置它们chmod g+w 这一步可以不要,会自动新建
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp/hive
$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp/hive
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
测试:
建立测试表test:create table test (key string);
show tables;
使用mysql数据库的安装方式
使用mysql数据库存储元数据 ,存储了如表的模式和分区信息等元数据信息
ubuntu采用sudo apt-get install mysql-server安装
建立数据库hive :
create database hive
创建hive用户,并授权:
grant all on hive.* to hive@'%' identified by 'hive';第一个hive是数据库,第二个是用户名,第三个是密码。
强制写入:flush privileges;
创建hive-env.sh文件
cp hive-env.sh.template hive-env.sh
在hive-env.sh中添加:
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.2
# Hive Configuration Directory can be controlled by
export HIVE_CONF_DIR=/opt/hive/hive-2.1.0/conf
创建hive-site.xml
cd /opt/hive/hive-2.1.0/conf
cp hive-default.xml.template hive-site.xml
配置 hive-site.xml文件:
参数hive-metastore.warehourse.dir 指定Hive的数据存储目录指定的是HDFS上的位置,默认值为 /user/hive/warehouse(好像没有这个参数,我自己加的)
参数hive.exec.scratchdir 指定Hive的数据临时文件目录,默认位置为/tmp/hive-${user.name}。这里配置为 /tmp/hive
修改hive-site.xml
<property> 
   <name>javax.jdo.option.ConnectionURL </name> 
   <value>jdbc:mysql://localhost:3306/hive</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>
  <description>username to use against metastore database</description>
 </property>
 <property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value><span style="color:#ff0000;">hive</span></value>
  <description>password to use against metastore database</description>
 </property>
<property> 
   <name>hive.hwi.listen.port </name> 
   <value>9999 </value> 
   <description>This is the port the Hive Web Interface will listen on </descript ion> 
</property> 
<property> 
   <name>datanucleus.autoCreateSchema </name> 
   <value>false </value> 
</property> 
 
<property> 
   <name>datanucleus.fixedDatastore </name> 
   <value>true </value> 
</property> 
<property> 
     <name>hive.metastore.local </name> 
     <value>true </value> 
     <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM </description> 
</property>
运行hive
发生错误:
Caused by: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql))
然后我执行$HIVE_HOME/bin/schematool -initSchema -dbType derby
又出错:
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to us e near '"APP"."NUCLEUS_ASCII"(C CHAR(1)) RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE ' at line 1 (state=42000,code=1064)
我才发现,原来在初始化时用了derby,这里应该是mysql
所以就执行$HIVE_HOME/bin/schematool -initSchema -dbType mysql
执行hive,成功!
1.4遇到的问题:
(1)Hive metastore database is not initialized.
解决方法:按照提示执行命令“schematool -initSchema -dbType derby”对metastore进行初始化。但此时可能仍会报错误:Error: FUNCTION ‘NUCLEUS_ASCII’ already exists. (state=X0Y68,code=30000) 。这是因为之前已经生成了metastore_db文件夹。需要将当前工作目录下的metastore_db文件夹删除,然后重新运行“schematool -initSchema -dbType derby”命令。
之后hive就可以以本地内嵌derby数据库为metastore正常启动了。
(2)Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not foundin the CLASSPATH.
没有 mysql-connector-java-*.*.*.tar.gz
下载mysql-connector-java-5.1.39.tar.gz
解压缩后将mysql-connector-java-5.1.39-bin.jar放到$HIVE_HOME/lib。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值