hive(1)centos下的安装与配置

来源:互联网 发布:java笔试多选题 编辑:程序博客网 时间:2024/06/05 05:20

Hive是运行在hadoop的yarn平台之上的数据分析工具,Hive可以将hdfs之上的文本文件映射为一张张数据表,通过sql语句就可以进行数据分析操作。Hive中的解析器会将sql语句mapreduce的job运行。hive大大简化了分布式平台的使用,主要用于离线数据处理。


系统:centos6.5

java_version:jdk1.7

hadoop版本:2.4.1

Hive_version:0.13.0

这里不再赘述java环境的安装配置。

Hive只需在一个节点上安装即可,对于伪分布式环境下,只需安装在当前主机上即可。

关于Hadoop的安装配置请参考:http://blog.csdn.net/u013468917/article/details/50965530

1、准备安装文件

首先进入 http://mirrors.hust.edu.cn/apache/ 下载hive安装包 apache-hive-0.13.0-bin.tar.gz,然后将安装包上传至linux主机,这里我用的是securecrt远程登陆linux主机,只需在命令行界面下按alt+p,即可打开sftp窗口,将hive安装文件拖至该窗口,安装文件就会被上传至当前用户主目录。

2、解压文件:

tar -zxvf  apache-hive-0.13.0-bin.tar.gz -C /cloud/ 

将安装文件解压到根目录下的/cloud/文件夹下,C为大写,/cloud/文件夹需要事先创建,否则会报错。

执行:vi /etc/profile

在最后一行添加环境变量:

export HIVE_HOME = /cloud/apache-hive-0.13.0-bin;

3、配置metastore:

metastore用于存储Hive的元数据信息,比如hive有哪些数据库,数据库中有那些表,表的结构,对应文本文件的位置等等元数据信息。

Hive解压之后进入解压目录下的conf目录执行:

mv hive-env.sh.template hive-env.sh

就可以直接运行 bin/hive,此时会在当前工作目录下生成一个名为metadata的derby数据库文件。这个数据库文件仅对于在当前目录下的操作有效,如果换了一个工作目录启动Hive,之前所建立的数据库和表信息全部无效,因为此时会在新目录下生成一个新的元数据文件。而且,这种derby数据库不支持多人同时访问。

为解决以上问题,可以将元数据信息存储在mysql数据库中。mysql数据库建议用yum来安装。

3.1安装mysql客户端:

yum install mysql
安装mysql 服务器端:
yum install mysql-server
yum install mysql-devel
启动mysql服务:
service mysqld start或者/etc/init.d/mysqld start
设置开机启动:

chkconfig --add mysqld

chkconfid mysqld on

查看开机启动设置是否成功chkconfig --list | grep mysql*
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

3.2配置mysql

第一次运行mysql时需要设置root用户的密码,Hive与数据库的连接可以使用root用户,也可以使用其他用户,这里使用root用户,设置登陆密码为123。

在mysql命令行下执行:

GRANT ALL PRIVILEGES ON test.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;FLUSH PRIVILEGES
授权允许远程连接。

3.3配置Hive使用mysql数据库

进入$HIVE_HOME/conf 目录,执行:

cp hive-default.xml.template hive-site.xml 
修改hive-site.xml(删除<configuration></configuration>之间的所有内容,添加如下内容:

<property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://hadoop00: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>123</value>
 <description>password to use against metastore database</description>
</property>
将第一个配置项中的hadoop00换成自己安装mysql数据库的主机名。

4、最终完成

安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

至此,Hive已经安装完成,运行$HIVE_HOME/bin/hive,建立一个表:

create table student(id bigint, name string, sex string, score int) row format delimited fields terminated by '\t';
提示运行成功。输入:quit; 命令退出。切换工作目录,执行$HIVE_HOME/bin/hive检查刚才创建的表是否还存在:

show tables;
出现student表的信息。说明配置成功。

可能遇到的问题

Terminal initialization failed; falling back to unsupported

Logging initialized using configuration in jar:file:/hive/apache-hive-1.1.0-bin/lib/hive-common-1.1.0.jar!/hive-log4j.properties
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/hadoop-2.5.2/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/hive/apache-hive-1.1.0-bin/lib/hive-jdbc-1.1.0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
        at jline.TerminalFactory.create(TerminalFactory.java:101)
        at jline.TerminalFactory.get(TerminalFactory.java:158)
        at jline.console.ConsoleReader.<init>(ConsoleReader.java:229)
        at jline.console.ConsoleReader.<init>(ConsoleReader.java:221)
        at jline.console.ConsoleReader.<init>(ConsoleReader.java:209)
        at org.apache.hadoop.hive.cli.CliDriver.getConsoleReader(CliDriver.java:773)
        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:715)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
 
原因是hadoop目录下存在老版本jline:
在  $HADOOP_HOME/share/hadoop/yarn/lib 目录下存在:
jline-0.9.94.jar
 
解决方法是:
将hive下的新版本jline的JAR包拷贝到hadoop下:
cp $HIVE_HOME/lib/jline-2.12.jar  /$HADOOP_HOME/share/hadoop/yarn/lib/
即可正常启动hive

0 0