Hive安装及问题解决

刚刚安装好hadoop迫不及待要玩下hive,所以自己找了些资料,安装了下hive,这里记录详细的安装过程和碰到的问题:

1.在安装hadoop之前首先确定hadoop已经安装成功,具体安装方法请参考hadoop安装。

2.下载hive版本 我下载的是  

下载地址为http://hive.apache.org/releases.htm

解压文件:

tar -zxvf hive-0.7.0-bin.tar.gz
3.配置环境变量:

[root@localhost hive]# vim /etc/profile
export HADOOP_HOME=/root/hadoop-0.20.2
export PATH=$PATH:$HADOOP_HOME/bin

export HIVE_HOME=/usr/hive/hive-0.7.0-bin
PATH=$PATH:$HIVE_HOME/bin

export PATH
export JAVA_HOME=/usr/java/jdk1.7.0_01

4.我存储元数据是采用第三方的mysql数据库,这种情况下需要下载一个数据包mysql-connector-java-5.1.18-bin.jar,放到hive的lib目录下

在hive的conf目录下创建文件hive-site.xml配置文件,代码如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>hive.metastore.local</name>
  <value>true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://192.168.0.237:3306/metastore_db?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>t237</value> 
</property> 
  
<property> 
  <name>javax.jdo.option.ConnectionPassword</name> 
  <value>123456</value> 
</property> 
<property> 
  <name>datanucleus.fixedDatastore</name> 
  <value>false</value> 
</property> 
</configuration>
5.运行hive

[root@localhost conf]# hive
Hive history file=/tmp/root/hive_job_log_root_201112061510_1145168119.txt
hive> show tables;
OK
log
log_info
log_new
maptile
result
Time taken: 2.889 seconds
hive> 
6.这里遇到点问题:刚开始执行hive时,执行show tables;报如下错误:

FAILED: Hive Internal Error: java.lang.RuntimeException(Error while making MR scratch directory - check filesystem config (null))
java.lang.RuntimeException: Error while making MR scratch directory - check filesystem config (null)
后来询问了google,得到如下解决办法:

原有的hadoop配置文件core-site.xml信息如下:

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop-root/tmp</value>
</property>
<property>  
    <name>fs.default.name</name>  
    <value>hdfs://192.168.30.149:9000/</value>
</property>
</configuration>


改成:

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop-root/tmp</value>
</property>
<property>  
    <name>fs.default.name</name>  
    <value>hdfs://hadoop149:9000/</value>
</property>
</configuration>
重启hadoop,运行hive,问题解决。

之后创建表一直很顺利,但是到查询表例如我执行:select size from log limit 10;时,又报错如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf
后来问了下百度和google都没有结果,自己觉得是缺少了类文件,我便把hive/lib下所有的hive-*文件拷贝到hadoop的lib下

重启hadoop,问题解决。但是归根结底我觉得是$HADOOP_CLASSPATH变量没有配置清楚,这个之后再解决这里做个标记。

执行select 后运行正常:

hive> select size from log_info limit 12;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201112061127_0004, Tracking URL = http://hadoop149:50030/jobdetails.jsp?jobid=job_201112061127_0004
Kill Command = /root/hadoop-0.20.2/bin/hadoop job  -Dmapred.job.tracker=hdfs://192.168.30.149:9004 -kill job_201112061127_0004
2011-12-06 15:35:47,923 Stage-1 map = 0%,  reduce = 0%
2011-12-06 15:35:50,952 Stage-1 map = 9%,  reduce = 0%
2011-12-06 15:35:52,975 Stage-1 map = 27%,  reduce = 0%
2011-12-06 15:35:53,984 Stage-1 map = 45%,  reduce = 0%
2011-12-06 15:35:56,001 Stage-1 map = 64%,  reduce = 0%
2011-12-06 15:35:59,023 Stage-1 map = 82%,  reduce = 0%
2011-12-06 15:36:00,038 Stage-1 map = 100%,  reduce = 0%
2011-12-06 15:36:03,062 Stage-1 map = 100%,  reduce = 100%
Ended Job = job_201112061127_0004
现在又找到的心得问题:在执行删除表操作时,出现如下错误:

NestedThrowables:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
这个问题还没有解决:期待牛人解决


最后附上:内存数据库derby的配置

<configuration> 
<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> 
  
<property> 
  <name>javax.jdo.option.ConnectionURL</name> 
  <value>jdbc:derby://hadoop149:1527/metastore_db;create=true</value> 
  <description>JDBC connect string for a JDBC metastore</description> 
</property> 
  
<property> 
  <name>javax.jdo.option.ConnectionDriverName</name> 
  <value>org.apache.derby.jdbc.ClientDriver</value> 
  <description>Driver class name for a JDBC metastore</description> 
</property> 
  
</configuration>













### Hive 安装教程及环境变量配置指南 #### 一、Hive安装步骤 为了成功安装 Hive,需按照以下流程操作: 1. **准备 MySQL 数据库作为元存储** 在实际应用中,通常会使用外部数据库(如 MySQL)来保存 Hive 的元数据。以下是具体的操作过程: - 启动 MySQL 服务并进入 MySQL 命令行工具:`service mysql start && mysql -u root -p`[^4]。 - 创建一个新的数据库用于存储 Hive 的元数据:`create database hive;`。 - 授权给特定用户访问此数据库:`grant all on *.* to hive@localhost identified by 'hive'; flush privileges; exit;`。 2. **下载并解压 Hive 软件包** 下载 Apache Hive 并将其解压缩到指定路径下,例如 `/export/servers/` 文件夹中。假设版本为 `apache-hive-3.1.3-bin.tar.gz`,可以执行如下命令进行解压: ```bash tar zxvf apache-hive-3.1.3-bin.tar.gz -C /export/servers/ ``` 3. **初始化 Hive 元数据表结构** 进入 Hive 解压后的根目录,并运行 SchemaTool 工具以升级元数据表结构至最新状态: ```bash cd /export/servers/apache-hive-3.1.3-bin ./bin/schematool -initSchema -dbType mysql ``` --- #### 二、Hive 环境变量配置方法 为了让系统能够识别 Hive 及其相关组件的位置,需要设置必要的环境变量。以下是具体的配置方式: 1. 编辑全局环境变量文件 `/etc/profile` 或用户的 `.bashrc` 文件,添加以下内容: ```bash export HIVE_HOME=/export/servers/apache-hive-3.1.3-bin export HIVE_CONF_DIR=$HIVE_HOME/conf export PATH=$PATH:$HIVE_HOME/bin ```[^2] 2. 让更改生效: 执行以下命令使新配置立即可用: ```bash source /etc/profile ``` 3. 如果发现 `conf` 目录下缺少默认的 `hive-site.xml` 文件,则可以通过手动创建的方式解决: 输入以下指令新建并编辑该文件:`vi $HIVE_HOME/conf/hive-site.xml`[^3]。随后根据需求填写相应的配置项,比如连接 MySQL 的 JDBC URL 和认证信息等。 --- #### 三、验证安装是否成功 完成上述所有步骤之后,可通过尝试启动 Hive CLI 来检验整个部署情况: ```bash hive ``` 如果没有任何错误提示且进入了交互式的 SQL 提示符界面,则说明安装顺利完成。 --- ### 示例代码片段 下面展示一段简单的 Python 脚本用来测试与 Hive 表的数据读取功能: ```python from pyhive import hive conn = hive.Connection(host='localhost', port=10000, username='root') cursor = conn.cursor() cursor.execute('SELECT * FROM test_table LIMIT 10') for result in cursor.fetchall(): print(result) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值