hive安装指南

来源:互联网 发布:微擎 ecshop 数据同步 编辑:程序博客网 时间:2024/05/01 22:27

环境:centos6.5,hadoop2.5.2,habse1.0.3,sqoop1.4.3,apache-hive-1.2.1-bin.tar.gz

1.安装

apache-hive-1.2.1-bin.tar.gz包放入/tmp进行解压

解压tar -xvzf apache-hive-1.2.1-bin.tar.gz

拷贝:cp -r apache-hive-1.2.1-bin /hadoop

重命名,进入到/hadoop

mv apache-hive-1.2.1-binhive

2.重命名配置文件

配置hive环境变量

配置hive环境变量,初始化hive在hdfs上的工作目录(因此在部署hive之前,请确保已经完整的部署了hadoop,并设置好相关的环境,hadoop版本是2.5.2,才和此hive版本相符)

vim ~/.bash_profile 添加以下内容

export HIVE_HOME=/hadoop/hive

exportPATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPAHT:$HIVE_HOME/lib

source ~/.bash_profile

初始化hadoop 环境变量

hadoop fs -mkdir /tmp

hadoop fs -chmod g+w /tmp

 

hadoop fs -mkdir /user

hadoop fs -mkdir /user/hive

hadoop fs -mkdir /user/hive/warehouse

 

3.修改配置文件hive-env.sh,hive-site.xml,hive-config.sh

进入hive/conf目录

依据hive-env.sh.template,创建hive-env.sh文件
      
cp  hive-env.sh.template hive-env.sh
      
修改hive-env.sh

    HADOOP_HOME=/hadoop/hadoop

    exportHIVE_CONF_DIR=/hadoop/hive/conf

 

    配置hive-site.xml

    cp hive-default.xml.templatehive-site.xml

 

mysql安装到192.168.72.149  创建hive用户以及hive数据库

hive.metastore.warehouse.dir hdfs 上的指定目录

hive.exec.scratchdir  hdfs上的临时文件目录

 

主要配置数据库以及路径问题

 

<property>  

   <name>javax.jdo.OPTION.ConnectionURL</name> 

  <value> jdbc:mysql://192.168.72.149:3306/hive?characterEncoding=UTF-8 </value>  

   <description>JDBC connect string FOR a JDBCmetastore</description>  

</property>  

<property>   

   <name>javax.jdo.OPTION.ConnectionDriverName</name>   

   <value>com.mysql.jdbc.Driver</value>  

   <description>Driver class name FOR a JDBCmetastore</description> </property> 

<property>   

   <name>javax.jdo.OPTION.ConnectionUserName</name>   

   <value>hive</value>  

   <description>username TOUSE against metastoredatabase</description>  

</property>  

<property>  

   <name>javax.jdo.OPTION.ConnectionPassword</name>   

   <value>hive</value>  

   <description>password TOUSE against metastoredatabase</description>  

</property> 

 

<property>

    <name>hive.metastore.warehouse.dir</name>

   <value>/user/hive/warehouse</value>

 </property>

<property>

   <name>hive.exec.scratchdir</name>

   <value>/tmp/hive</value>

 </property>

<property>

   <name>hive.server2.logging.operation.log.location</name>

    <value>/tmp/hive/operation_logs</value>

   <description>Top level directory where operation logs are storedif logging functionality is enabled</description>

 </property>

<property>

   <name>hive.exec.local.scratchdir</name>

   <value>/tmp/hive</value>

   <description>Local scratch space for Hive jobs</description>

 </property>

<property>

   <name>hive.downloaded.resources.dir</name>

   <value>/tmp/hive/resources</value>

   <description>Temporary local directory for added resources in theremote file system.</description>

 </property>

 

配置hive的log4j: conf下   cphive-log4j.properties.template hive-log4j.properties

 

#log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter

log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter

 

启动hive

由于配置了系统变量 直接执行hive即可

 

hive --service metastore &

ps ax|grep metastore

 

hive --service hiveserver2 &

ps ax|grep HiveServer2

 

启动时候遇到错误:

[ERROR] Terminal initialization failed; fallingback to unsupported

java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected

        atjline.TerminalFactory.create(TerminalFactory.java:101)

        atjline.TerminalFactory.get(TerminalFactory.java:158)

        atjline.console.ConsoleReader.<init>(ConsoleReader.java:229)

        atjline.console.ConsoleReader.<init>(ConsoleReader.java:221)

        atjline.console.ConsoleReader.<init>(ConsoleReader.java:209)

        atorg.apache.hadoop.hive.cli.CliDriver.setupConsoleReader(CliDriver.java:787)

        atorg.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:721)

        atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621)

        atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

        atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        atjava.lang.reflect.Method.invoke(Method.java:606)

        atorg.apache.hadoop.util.RunJar.run(RunJar.java:221)

        atorg.apache.hadoop.util.RunJar.main(RunJar.java:136)

 

发现是jline有问题,最后找到

需要将hive的jar替换掉hadoop内部的 执行

cp /hadoop/hive/lib/jline-2.12.jar/hadoop/hadoop/share/hadoop/yarn/lib/

 

记住需要将原hadoop的jline的jar删除

 

配置hive-config.sh

进入/hadoop/hive/bin

vim hive-config.sh

添加

export JAVA_HOME=/usr/java/jdk1.7.0_79

export HADOOP_HOME=/hadoop/hadoop/

export HIVE_HOME=/hadoop/hive

 

 

将mysql-connector-java-5.1.10.jar放入到/hadoop/hive/lib

 

 

 

数据测试:

 

hive> show tables;

在本地文件系统创建一个如下的文本文件:/tmp/student.txt

C01,N0101,82
C01,N0102,59

C01,N0103,65
C02,N0201,81
C02,N0202,82
C02,N0203,79
C03,N0301,56
C03,N0302,92
C03,N0306,72

创建一个hive的表
create table student(classNo string, stuNostring, score int) row format delimited fields terminated by ',';

将数据load到表中
load data local inpath '/tmp/student.txt'overwriteinto table student;

 

这个命令将student.txt文件内容加载到表student中。这个加载操作将直接把student.txt文件复制到hivewarehouse目录中,这个目录由hive.metastore.warehouse.dir配置项设置,默认值为/user/hive/warehouseOverwrite选项将导致Hive事先删除student目录下所有的文件。
Hive
不会对student.txt做任何格式处理,因为Hive本身并不强调数据的存储格式。
此例中,Hive将数据存储于HDFS系统中。当然,Hive也可以将数据存储于本地。

可以执行类似SQL的命令:
hive> select * from student;

 

 

 

 

UDF使用只能实现一进一出的操作

a)把程序打包放到目标机器上去;
b
)进入hive客户端,添加jar包:hive>add jar /run/jar/udf_test.jar;
c
)创建临时函数:hive>CREATE TEMPORARY FUNCTION add_example AS'hive.udf.Add';
d
)查询HQL语句:
SELECT add_example(8, 9) FROM scores;



SELECT add_example(scores.math, scores.art) FROMscores;
SELECT add_example(6, 7, 8, 6.8) FROM scores;
e)销毁临时函数:hive> DROP TEMPORARY FUNCTION add_example;
5
、细节在使用UDF的时候,会自动进行类型转换,例如:
SELECT add_example(8,9.1) FROM scores;

 

 

UDAF实现多进一出

a)将java文件编译成Avg_test.jar
b
)进入hive客户端添加jar包:
hive>add jar /run/jar/Avg_test.jar

c
)创建临时函数:
hive>create temporary function avg_test'hive.udaf.Avg';

d)查询语句:
hive>select avg_test(scores.math) fromscores;

e)销毁临时函数:
hive>drop temporary function avg_test;

 

 

UDTF(User-DefinedTable-Generating Functions)  用来解决输入一行输出多行(On-to-many maping)的需求

实现initialize, process, close三个方法
UDTF
首先会调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)。初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回。最后close()方法调用,对需要清理的方法进行清理
0 0
原创粉丝点击