Hive进阶篇(二)基本操作--根据日志建表+常用命令(含汇总)

一、启动Hive(CDH集群的)

参考:

二、上传日志文件

上传到HDFS上的/user/hive/warehouse/目录下

首先创建一个目录:

[root@cdh ~]# hdfs dfs -mkdir /user/hive/warehouse/original_access_logs-0104

然后将将日志文件上传到该目录下:

[root@cdh ~]# hdfs dfs -put access.log /user/hive/warehouse/original_access_logs-0104

三、虚拟机进入Hive命令行beeline

[root@cdh alternatives]# beeline -u jdbc:hive2://localhost:10000 -n hive -p hive

-u :传Hive JDBC的地址(hive2是数据库的类型,服务器地址-localhost主机名:10000是hive的默认端口号)

-n :用户名(hive就是最大权限的用户)

-p :密码

如果没有什么认证的话就直接用户名是hive,密码也是hive

hive 创建表decimal hive 创建表指定路径_数据库

如果连错了,可以按输入 !q 退出。

四、根据日志建表

对应于日志文件建立Hive外部表-EXTERNAL

里面的正则表达式根据文件格式进行修改,基本上不用自己写,到网上查询即可。正常工作中多数情况下也不需要自己写。

注:LOCATION后面跟的是要插入的数据的地址, 对应的路径必须存在,否则创建出来的就是一个空的文件夹。

DROP TABLE IF EXISTS original_access_logs;
CREATE EXTERNAL TABLE original_access_logs (
    ip STRING,
    request_time STRING,
    method STRING,
    url STRING,
    http_version STRING,
    code1 STRING,
    code2 STRING,
    dash STRING,
    user_agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
    'input.regex' = '([^ ]*) - - \\[([^\\]]*)\\] "([^\ ]*) ([^\ ]*) ([^\ ]*)" (\\d*) (\\d*) "([^"]*)" "([^"]*)"',
    'output.format.string' = "%1$$s %2$$s %3$$s %4$$s %5$$s %6$$s %7$$s %8$$s %9$$s")
LOCATION '/user/hive/warehouse/original_access_logs-0104';
注意:'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'是引用的一个类Hive的话需要加载这个包contrib,
命令如下(注意区分CDH的版本,上面的是CDH6的,下面的是针对CDH5的):
ADD JAR /opt/cloudera/parcels/CDH/lib/hive/contrib/hive-contrib-2.1.1-cdh6.3.2.jar
ADD JAR /opt/cloudera/parcels/CDH/lib/hive/lib/hive-contrib.jar;

注意:安装的jar包的权限要和登陆beeline时的用户一致,不然创建表格会失败。

           就是说,这里的jar包权限是root,那么登陆的时候是这样的:[root@cdh ~]。

五、常用命令

1、查询所有的数据库show databases;

2、查询当前数据库下所有的show tables;

3、切换/使用特定的数据库use + 数据库名;

4、创建数据库create database + 数据库名;

5、删除数据库drop database + 数据库名;

      内部表的话采用上面的命令行可以实现彻底删除;

      如果是外部表,仅drop的话只能删掉表的结构,数据依然在HDFS上。

      如果想彻底删掉外部表,需要在drop前先执行命令:ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False');

6、查看中有哪些字段:desc + 表名;

      查看更详细的字段信息:desc extended / formatted + 表名;  (这里formatted格式上会更规整好看)

7、查看建语句:show create table + 表名;

      (可能会加入些其他的字段)

8、查询中指定条数的内容:select * from + 表名 + limit +查询的条数;

       limit不会用到MR,它只是读取表数据然后用正则表达式选出指定条数的内同

9、查询一共有多少行:select count(*) from + 表名;

       count会用到MR,需要计算行数的。

       打印出的日志会较多,如果执行较慢也可以进入可视化界面进行跟踪。

10、汇总概要:

       

hive 创建表decimal hive 创建表指定路径_hive_02