博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive 环境搭建
阅读量:7100 次
发布时间:2019-06-28

本文共 5595 字,大约阅读时间需要 18 分钟。

hot3.png

一、安装hive的机器上要有hadoop的环境  

hadoop集群搭建参考博客地址         https://my.oschina.net/xiaozhou18/blog/787902

二、现在机器上安装mysql数据库   用来存储hive的元数据信息   命令如下

         rpm -qa | grep mysql     查看机器上的mysql信息

         rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps   删除已安装的mysql

         rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm    安装mysql   服务端

         rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm      安装mysql  客户端

        mysql> use mysql;

        mysql> UPDATE user SET password=password("test123") WHERE user='root';   修改mysql密码 

        mysql>GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123' WITH GRANT OPTION;     允许用mysql客户端远程登陆mysql服务

                        mysql> flush privileges;

                        mysql> exit;  

         登陆mysql

         mysql -u root -p123

三、安装hive

1、解压hive 命令   [root java]# tar -zxvf apache-hive-1.2.1-bin.tar.gz 。

2 、复制一份hive的配置文件   命令[root conf]# cp hive-default.xml.template hive-site.xml

3、修改hive-site.xml的配置文件   内容如下

<configuration>

        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://node11: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>
</configuration>

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

五、启动hive   命令   hive/bin/hive

如果出现java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected这个错误表示hive 的 jline-xxx.jar 和hadoop的jline-xxx.jar 版本不一致  把$hive_home/lib下的jline-xxx.jar 复制到$hadoop_home/share/hadoop/yarn/lib下   重启hive。   看到如下界面表示进入到hive命令行模式。

六、简单使用

创建表  create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';

向表里添加数据  

load data local inpath '/home/hadoop/data/trade_detail' overwrite into table trade_detail;

七、hive的脚本执行

$>hive -e “” 可以在hive shell环境下直接执行hive命令  如  ./hive –e ‘show tables’

$>hive -e “”>aaa  把执行hive shell命令后查询的结果导入aaa文件内

$>hive -S -e “”>aaa   -S 执行速度快

$>hive -f file   执行file文件内的hive shell 命令

八、hive和hdfs   或liunx交互

与linux交互命令 !

!ls

!pwd

与hdfs交互命令

dfs -ls /

dfs -mkdir /hive

九、创建表

1、复合类型-struct

create table student_test(id INT, info struct<name:STRING, age:INT>)   ROW FORMAT DELIMITED FIELDS TERMINATED BY ','  COLLECTION ITEMS TERMINATED BY ':';  

ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 表示字段之间用逗号分割

COLLECTION ITEMS TERMINATED BY ':'  表示集合之间用冒号分割

查字段数据info.name  查询

2、复合类型-Array

create table class_test(name string, student_id_list array<INT>) ROW FORMAT DELIMITED  FIELDS TERMINATED BY ','  COLLECTION ITEMS TERMINATED BY ':';

查字段数据student_id_list[0]查询

3、复合类型—Map使用

create table employee(id string, perf map<string, int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':';

查字段数据用perf['字段名']

十、对表的操作

DROP DATABASE [IF EXISTS] mydb CASCADE; 级联删除mydb下的所有表

DESCRIBE DATABASE extended mydb;    extended查看mydb的扩展信息

CREATE TABLE t2 LIKE t1;  创建和t1表结构一样的表

Hive>desc formatted t1; 格式化 显示t1表的详细结构

SHOW TABLES in mydb; 查看mydb下的表

十一、对列的操作

修改列的名称、类型、位置、注释

hive>ALTER TABLE t3 CHANGE COLUMN old_name new_name String COMMENT '...' AFTER column2;

增加列

hive>ALTER TABLE t3 ADD COLUMNS(gender int);

十二、表的种类

1、管理表 也叫内部表

默认创建表时   就是内部表   内部表在删除表时   会删除表的元数据信息和hdfs上的真实数据

2、外部表

hive>create external table external_table1 (key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' location '/home/external';

在HDFS创建目录/home/external

#hadoop fs -put /home/external_table.dat /home/external

加载数据

LOAD DATA INPATH '/home/external_table1.dat' INTO TABLE external_table1;

查看数据

select * from external_table

select count(*) from external_table

删除表

drop table external_table

删除外部表的时候   只会把表的元数据信息删除 不会删除hdfs上的数据

3、分区表

分区表避免了全表扫描

CREATE TABLE t3(name string) PARTITIONED BY (province string);

SHOW PARTITIONS t3 [partition (province='beijing')];  显示t3表的分区

ALTER TABLE t3 ADD [IF NOT EXISTS] PARTITION(province='beijing') ; 增加分区

ALTER TABLE t3 DROP PARTITION(...); 删除分区

创建表

create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city string) row format delimited fields terminated by '\t' stored as TEXTFILE;

加载数据到分区

load data local inpath '/home/partition_table.dat' into table partition_table partition (daytime='2013-02-01',city='bj');

查看数据

select * from partition_table

select count(*) from partition_table

•删除表 drop table partition_table

添加防止删除的保护:

hive> alter table tablename partition (day='0925') enable no_drop;

添加防止查询的保护:

hive> alter table tablename  partition (day=20161207') enable offline;
删除防止查询的保护:
hive> alter table tablename  partition (day='20161207') disable offline;

4、桶表

桶表用来抽样查询的

桶表是对数据进行哈希取值,然后放到不同文件中存储。

创建表

  create table bucket_table(id string) clustered by(id) into 4 buckets; 

加载数据

  set hive.enforce.bucketing = true;  启用桶表

  insert into table bucket_table select name from stu; 

  insert overwrite table bucket_table select name from stu;

数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。

桶表的抽样查询

select * from bucket_table tablesample(bucket 1 out of 4 on id);

tablesample是抽样语句

语法解析:TABLESAMPLE(BUCKET x OUT OF y)

y必须是table总bucket数的倍数或者因子。

hive根据y的大小,决定抽样的比例。

例如,table总共分了64份,当y=32时,抽取(64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。

例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。

转载于:https://my.oschina.net/xiaozhou18/blog/794784

你可能感兴趣的文章
瑞信CDP与HA集群
查看>>
RAID各级别的特性
查看>>
Python学习笔记__7.3章 多重继承
查看>>
爱创课堂每日一题七十天- 说说你对前端架构师的理解?
查看>>
兄弟连第7节课
查看>>
学习笔记(11月15日)
查看>>
JavaWeb21-HTML篇笔记
查看>>
Java之品优购部署_day03(3)
查看>>
前端与移动开发之vue-day4(2)
查看>>
phpcms筛选功能
查看>>
简练软考知识点整理-制定进度计划过程
查看>>
26 LAMP
查看>>
Oracle解决用户锁的问题
查看>>
深入了解Kafka基本原理
查看>>
springCloud分布式事务实战(六)编写第二个微服务
查看>>
spark的HA集群搭建
查看>>
Essential Studio for WPF 2018 v3最新版发布(上)
查看>>
angularjs-currency 过滤器
查看>>
H3C-1000S 内部服务器映射
查看>>
Linux负载均衡软件LVS+keepalived
查看>>