hive基础

Hive安装:

JDK1.6以上

Hadoop要启动

Hive下载:http://apache.cs.utah.edu/hive/hive-0.11.0/

HIve解压:

hive-0.11.0.tar.gz解压到/home/hive路径下

tar -zxvf hive-0.11.0.tar.gz

产生hive的安装目录/home/hive/hive-0.11.0

配置环境变量:

sudo vi /etc/profile

export HIVE_HOME=/home/hive/hive-0.11.0

export PATH=$HIVE_HOME/bin:$PATH

执行./etc/profilesource /etc/profile

启动hive

hive

show databases;//查看有哪些数据库

use mytest;//使用数据库

show tables;//显示所有的表

 

Hive HA原理:

将若干hive实例纳入一个资源池,然后对外提供一个唯一的接口,进行proxyrelay

对于程序开发人员,就把它认为是一台超强hive就可以了,每次它接收到一个HIVE查询连接后,都会轮询资源池里可用的hive资源。用HAProxy实现。

 

Hive的元数据存储到Mysql

Hive的默认元数据信息存在Derby里面,内置的Derby是单session的。即一次只能连接一个客户端。

Mysql配置:

hive-site.xml文件:

<configuration>

         <property>

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

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

</property>

<property>

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

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

</property>

<property>

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

<value>root</value>

</property>

<property>

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

<value>root</value>

</property>

</configuration>

 

Hive数据类型:

基本数据类型:

TINYINT1个字节(8位)有符号整数

SMALLINT2个字节有符号整数

INT4个字节有符号整数

BIGINT8个字节有符号整数

FLOAT4个字节单精度浮点数

DOUBLE8个字节双精度浮点数

BOOLEANtrue/false

STRING:字符串

 

复合数据类型:

ARRAY:一组有序字段,字段的类型必须相同 Array(1,2)

MAP:一组无序的键值对,键的类型必须是原子的,值可以是任何类型,同一个映射键的类型必须相同,值的类型也必须相同。 Map('a',1,'b',2)

STRUCT:一组命名的字段,字段类型可以不同 Struct('a',1,2,0)

 

创建Hive表:

create [External] Table [if not exits] table_name

[{col_name datatype[comment col_comment],...}]

[COMMENT table_comment]

[PARTITIONED by (colname datatype[comment col_ment],...)]

[CLUSTERED BY (colname,colname,...)[SORTED BY (colname[ASC|SESC],...)] INTO num_buckets BUCKETS]

[ROW FORMAT row_format]

[STORED as file_format]

[LOCATION hdfs_path]

内部表:

create table test_table(

id int,

name string,

num int) row format delimited fields terminated by ','

stored as textfile

外部表:

create external table test_table(

id int,

name string,

num int) row format delimited fields terminated by ','

stored as textfile;

 

加载数据:

本地加载数据:

load data local inpath '/tmp/20150525/stu.txt' [overwrite] into table hive_test

HDFS加载数据:

load data inpath '路径' [overwrite] into table 表名

 

HiveSQL的对比:

               hive                   sql

数据插入         支持批量插入          支持单条和批量导入

数据更新    不支持                支持

索引        支持                  支持

分区        支持                  支持

执行延迟                           

扩展性                          有限

 

Hive的访问方式:

1.客户端

2.hwi

hive --service hwi

3.hive server 远程访问

hive --service hiveserver &

创建一个java项目

class HiveJDBCConnection{

         private static String driverName="org.apache.hadoop.hive.jdbc.HiveDriver";

         private static String url = "jdbc:hive://192.168.1.45:10000/test";

         private static String userName="root";

         private static String password="root";

 

         private static String sql="";

 

         public static void main(String[] args){

         try{

                   Class.forName(driverName);

         Connection conn = DriverManager.getConnection(url,uerName,password);

         Statement stmt = conn.createStatement();

         //system.out.prinln(stmt);

        

         //创建一个表,如果存在了就删除

         String tableName = "jdbc_table";

         sql = "drop table "+tableName;

         stmt.execute (sql);

         //创建表

         sql = "create table "+tableName+

                   " (key String,value String) row format delimited fields terminated by ','";

         stmt.execute(sql);

 

         //load数据到jdbc_table表中

         String path = "/home/sml/hive_test.txt";

         sql = "load data local inpath '"+path+"' into table "+tableName;

         stmt.execute();

 

         //查询jdbc_table中的数据

         sql ="select * from "+tableName;

         ResultSet rs = stmt.executeQuery(sql);

         while(rs.next()){

                   String result = rs.getString(1)+"\t"+rs.getString(2);

                   System.out.println(result)

         }

         }catchh(Exception e){

                   System.out.println("没有找到驱动!");

                   e.printStackTrace();

         }

}

        

}

 

Hive常用功能:

参数:

YEAR=2015 hive-e "select * from table where yaer=${env:YEAR}"

Hive 的一次命令

hive -e "select * from table limit 3"

Hive的结果存到本地

hive -S -e "select* from table limit 3" >> /tmp/mydata

Hive查找

hive -S -e "set"|grep warehouse

执行hive文件

hive -f /path/to/file/mydata.sql

查看当前路径

! PWD

hive里面执行shell命令

! /bin/echo "helloWorld"

查看HDFS

dfs -ls /tmp

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值