Hive-2.1.1的安装

来源:互联网 发布:淘宝卖家页面生成器 编辑:程序博客网 时间:2024/05/17 20:22

hive我认为只需要在master 节点上安装就行了。
下载hive到/home/hadoop下来

wget http://archive.apache.org/dist/hive/hive-2.1.1/apache-hive-2.1.1-bin.tar.gz

1.解压apache-hive-2.1.1-bin.tar.gz

tar -xzvf apache-hive-2.1.1-bin.tar.gz
mv apache-hive-2.1.1-bin hive-2.1.1

这样hive就安装在/home/hadoop/hive-2.1.1目录下了。

2.配置hive

hive的配置文件在hive-2.1.1/conf和hive-2.1.1/bin目录下,需要配置如下文件:

hive-default.xml

hive-site.xml

hive-env.sh

配置hive-default.xml

这个只需要把hive-default.xml.template重命名成hive-default.xml即可

mv hive-default.xml.template hive-default.xml

配置hive-site.xml

hive-site.xml里的配置会覆盖掉hive-default.xml中的配置,这里主要有2处需要注意,一处是确定hive使用什么样的元数据库,一处是如果要想启动hive的web管理页面,需要配置hive的web端war包。

<configuration><property>    <name>hive.exec.scratchdir</name>    <value>/tmp/hive-${user.name}</value>    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/&lt;username&gt; is created, with ${hive.scratch.dir.permission}.</description></property><property>    <name>hive.exec.local.scratchdir</name>    <value>/tmp/${user.name}</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 the remote file system.</description></property><property>    <name>hive.querylog.location</name>    <value>/tmp/${user.name}</value>    <description>Location of Hive run time structured log file</description></property><property>    <name>hive.server2.logging.operation.log.location</name>    <value>/tmp/${user.name}/operation_logs</value>    <description>Top level directory where operation logs are stored if logging functionality is enabled</description></property><property>    <name>javax.jdo.option.ConnectionURL</name>    <value>jdbc:mysql://cetiti12: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>hive</value></property><property>    <name>javax.jdo.option.ConnectionPassword</name>    <value>hive</value></property></configuration>

配置hive-env.sh

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

先从模版文件复制出hive-env.sh,再编辑hive-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_121

export HIVE_HOME=/home/hadoop/hive-2.1.1

export HADOOP_HOME=/home/hadoop/hadoop-2.7.3

export PATH=$JAVA_HOME/bin:$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HIVE_HOME/lib:/home/hadoop/hbase-1.2.4/lib

export HIVE_CONF_DIR=$HIVE_HOME/conf

3.启动hive

先启动好hadoop,再启动HBase,如果不需要通过hive使用HBase,可以不启动HBase最后启动hive。hive的启动命令在hadoop/hive-2.1.1/bin目录下。启动hive时有几种不同的命令:

./hive 直接启动hive,进入到hive的命令行下,在命令行模式下进行hive操作

./hive -hiveconf hive.root.logger=DEBUG,console 带日志启动hive,还是在命令行模式下使用hive,但是会输出详细的信息,调试错误时非常有用

./hive –service hwi 带web接口启动hive,此时可以在浏览器打开hive的管理页面,前提是部署了hive-hwi-2.1.1.war。

./hive –service hiveserver 如果要在java代码里调用hive,必须这样启动

我用第二种方式启动,进入命令行

./hive -hiveconf hive.root.logger=DEBUG,console

启动成功后用jps查看,会看到一个RunJar进程。

如果启动多个hvie或者以多种方式启动hive,会看到相应数目的RunJar进程。

4.停止hive

在shell下直接输入quit命令

quit;

注意hive的命令结尾要加分号,和hbase不同。

这个时候再用jps命令就看不到RunJar进程了。

5.创建hive表

5.1外部表

创建外部表的时候hive只保存表的元数据,可以在hbase中先创建一个表,然后在hive里创建一个外部表来关联hbase中的表。现在我们先创建一个hbase的表。

进入到hbase的shell下执行:

create ‘member’,’id’,’address’

put ‘member’,’r1’,’id:address’,’dabaojiao’

要用hive关联hbase的表需要把hbase/lib和hadoop/share/hadoop/common/lib下的一些jar包拷贝到hive/lib目录下。

Hbase下的

hbase-client-1.2.4.jar,

hbase-server-1.2.4.jar,

hbase-common-1.2.4.jar,

hbase-protocol-1.2.4.jar,

htrace-core-3.1.0-incubating.jar

Hadoop2.7.3 的 /home/hadoop/hadoop-2.7.3/share/hadoop/common 目录下的

hadoop-common-2.7.3.jar

复制完后要重启hive。

进入hive的shell,关联hbase中的member表,注意此时hbase一定要启动哦。

在shell下输入

CREATE EXTERNAL TABLE hbase_member(key string, value string)

STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’

WITH SERDEPROPERTIES (“hbase.columns.mapping” = “id:address”)

TBLPROPERTIES(“hbase.table.name” = “member”);

如果不成功就用日志模式启动hive,会有详细的错误堆栈信息,关联hbase表时比较常见的异常是ClassNotFoundException和ClassNotFoundException。这是因为缺少了hadoop或者hbase的jar包,只要找到这些jar包拷贝到hive/lib目录下即可。

5.2内部表

hbase中没有创建表,直接在hive中创建内部表,间接在hbase中创建出表

create table hbase_table_1(key int, value string)

stored by ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’

with serdeproperties (“hbase.columns.mapping” = “:key,cf1:val”)

tblproperties (“hbase.table.name” = “xyz”);

6.使用serde导入json到hive中:

实际使用时可能会有这样的场景,就是把json格式的文件数据导入到hive中,可以通过serde的方式,常见的有2种serde分别介绍下。

6.1通过hive-json-serde-0.2.jar(google code)导入:把hive-json-serde-0.2.jar拷贝到hive/lib下

执行建表

CREATE TABLE thxd

(

callType STRING,callMobile STRING,callTime STRING,callTimeCost STRING

)

ROW FORMAT SERDE ‘org.apache.hadoop.hive.contrib.serde2.JsonSerde’

STORED AS TEXTFILE;

再导入json文件

LOAD DATA LOCAL INPATH “/home/hadoop/thxd.txt” OVERWRITE INTO TABLE thxd;

注意1)thxd.txt是在linux文件系统上的,不是hdfs里,所以从local导入。也可以从hdfs里导入。

2)txhd.txt里并不是合法的json格式,如果改成合法的hive-json-serde-0.2.jar将无法工作。

7.2通过https://github.com/rcongiu/Hive-JSON-Serde 的serde

把json-serde-1.3-jar-with-dependencies.jar拷贝到hive/lib

CREATE TABLE complex_json (

DocId string,

User struct

          Username:string,          Name: string,          ShippingAddress:struct                                 Address2:string,                                 City:string,                                 State:string>,          Orders:array                              OrderDate:string>>>

)

ROW FORMAT SERDE’org.openx.data.jsonserde.JsonSerDe’;

LOAD DATA LOCAL INPATH’/home/hadoop/test.json’ OVERWRITE INTO TABLE complex_json;

SELECT User.Orders FROM complex_json;

8.通过内置函数json_tuple和get_json_object导入json进入hive

由于get_json_object效率低下,官方推荐使用json_tuple

8.1通过json_tuple导入

8.1.1先建表:

CREATE TABLE thxd_json ( json string );

8.1.2导入数据(这个是标准的json格式文件,后缀名没关系,但格式要对。可在http://www.bejson.com/在线检查json格式)

LOAD DATA LOCAL INPATH ‘/home/hadoop/test.json’ INTO TABLE json_table;

8.1.3使用json_tuple查询

select v1.code, v1.errorDescription, v2.callMobile, v2.callTimeCost

from thxd_json jt

 LATERAL VIEW json_tuple(jt.json,'code','errorDescription','dataObject') v1 as code, errorDescription, dataObject LATERAL VIEW json_tuple(v1.dataObject,'callMobile','callTimeCost') v2 as callMobile, callTimeCost;