zoukankan      html  css  js  c++  java
  • Hive基础

    Hive

    官网:http://hive.apache.org/
    Apache Hive?数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集。可以将结构投影到已存储的数据中。提供了命令行工具和JDBC驱动程序以将用户连接到Hive

    Hive提供了SQL查询功能 hdfs分布式存储

    Hive本质HQL转化为MapReduce程序
    环境前提:
    1)启动hdfs集群
    2)启动yarn集群
    如果想用hive的话,需要提前安装部署好hadoop集群

    为什么要学习Hive

    简化开发
    easycoding!
    高德地图使用Hive

    优势:
    1)操作接口采用类sql语法,select * from stu;
    简单、上手快!
    2)hive可以替代mr程序,sqoop
    3)hive可以处理海量数据
    4)hive支持UDF,自定义函数

    劣势:
    1)处理数据延迟高,慢
    引擎:1.2.2以前版本都是用的mr引擎
    2.x之后用的是Spark引擎
    2)HQL的表达能力有限
    一些sql无法解决的场景,依然需要我们写MapReduce

    hive架构原理解析

    sql->转换->MapReduce->job

    hive安装部署

    1)下载
    2)上传到Linux
    3)解压
    tar -zxvf apache-hive-1.2.2-bin.tar.gz -C hd/
    4)重命名
    mv apache-hive-1.2.2-bin/ hive

    5)修改配置文件
    mv hive-env.sh.template hive-env.sh
    vi hive-env.sh
    HADOOP_HOME=/root/hd/hadoop-2.8.4
    export HIVE_CONF_DIR=/root/hd/hive/conf

    6)启动
    bin/hive
    配置mysql元数据库
    1)拷贝mysql驱动到hive/lib
    cp/mv hive/lib
    2) 添加hive-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hsiehchou121:3306/metastore?createDatabas
    eIfNotExist=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</descr
    iption>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>username to use against metastore database</d
    escription>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</d
    escription>
    </property>

    3)注意:重启hadoop集群
    4)启动hive
    bin/hive
    此时mysql中创建metastore元数据库
    hive> create table hsiehchou(id int, name string)

    row format
    delimited fields
    terminated by ‘ ’;
    OK
    hive> load data local inpath ‘/root/hsiehchou.txt’ into table hsiehchou;
    OK
    hive> select * from hsiehchou;
    OK
    1 re
    2 mi
    3 zk
    4 sf
    5 ls

    杀死hive进程
    [root@hsiehchou121 hive]# ps -aux|grep hive
    root 3649 3.7 16.9 2027072 239240 pts/0 Tl 21:37 0:31
    root 4285 0.0 0.0 112648 948 pts/0
    [root@hsiehchou121 hive]# kill -9 3649

    安装mysql5.6
    yum search libaio # 检索相关信息
    yum install libaio # 安装依赖包
    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    添加 MySQL Yum Repository 到linux系统 repository 列表中,输入
    yum localinstall mysql-community-release-el7-5.noarch.rpm

    验证是否添加成功
    yum repolist enabled | grep “mysql.-community.

    查看 MySQL 版本,输入
    yum repolist all | grep mysql

    可以看到 5.5, 5.7 版本是默认禁用的,因为现在最新的稳定版是 5.6
    yum repolist enabled | grep mysql

    通过 Yum 来安装 MySQL,输入
    yum install mysql-community-server

    rpm -qi mysql-community-server.x86_64 0:5.6.24-3.el7

    查看 MySQL 的安装目录
    whereis mysql

    启动 MySQL Server
    systemctl start mysqld

    查看 MySQL Server 状态
    systemctl status mysqld

    关闭 MySQL Server
    systemctl stop mysqld

    测试是否安装成功
    mysql

    修改mysql密码
    use mysql;
    update user set password=password(‘root’) where user=’root’;
    flush privileges;

    数据导入操作

    load data []local] inpath ‘/root/hsiehchou.txt’ into table hsiehchou;
    load data:加载数据
    local:可选操作,如果加上local导入是本地linux中的数据,如果去掉local 那么
    导入的是hdfs中数据。
    inpath:表示的是加载数据的路径
    into table:表示要加载的对应的表

    hive数据类型

    Java数据类型 Hive数据类型 长度
    byte TINYINT 1byte有符号整数
    short SMALLINT 2byte有符号整数
    int INT 4byte有符号整数
    long GINT 8byte有符号整数
    boolean BOOLEAN false/true
    float FLOAT 单精度浮点
    double DOUBLE 双精度浮点
    string STRING 字符
    BINARY 字节数组

    DDL数据定义

    1)查看数据库

    show databases;

    2)创建库

    create database hive_db;

    3)创建库 标准写法

    create database if not exists hive_db;

    4)创建库指定hdfs路径

    create database hive_db location ‘/hive_db’;

    5)创建表

    如果指定了hdfs路径
    创建的表存在于这个路径

    6)查看数据库结构

    desc database hive_db;

    7)添加额外的描述信息

    alter database hive_db set dbproperties(‘created’=’hsiehchou’);
    注意:查询需要使用desc database extended hive_db;

    8)查看指定的通配库:过滤

    show databases like ‘h*’;

    9)删除空库

    drop database hive_db;

    10)删除非空库

    drop database hive_db2 cascade;

    11) 删除非空库标准写法

    drop database if exists hive_db cascade;

    创建表

    create [external] table [if not exists] table_name(字段信息) [partitioned by(字段信息)][clustered by(字段信息)] [sorted by(字段信息)]row format delimited fields terminated by ‘切割符’;

    管理表

    默认不加external创建的就是管理表,也称为内部表。
    MANAGED_TABLE管理表。
    Table Type:MANAGED_TABLE
    查看表类型:
    desc formatted hsiehchou2;

    外部表

    EXTERNAL_TABLE外部表
    创建方式:
    create external table student(id int,name string)
    区别:如果是管理表删除hdfs中数据删除,如果是外部表删除hdfs数据不删除!

    hive命令

    1)不登录hive客户端直接输入命令操作Hive
    [root@hsiehchou121 hive]# bin/hive -e “select * from hsiehchou;”
    19/02/28 03:09:23 WARN conf.HiveConf: HiveConf of name hive.cli,print.current.db does not exist
    Logging initialized using configuration in jar:file:/root/hd/hive/lib/hive-common-1.2.2.jar!/hive-log4j.properties
    OK
    hsiehchou.id hsiehchou.name
    1 re
    2 mi
    3 zk
    4 sf
    5 ls

    2)直接把sql写入到文件中
    bin/hive -f /root/hived.sql

    3)查看hdfs文件
    dfs -ls /;
    dfs -cat /wc/in/words.txt;

    4)查看历史操作
    [root@hsiehchou121 hive]# cat ~/.hivehistory

    在hive/conf/hive-site.xml中增加

    <!--是否显示当前表头-->
    <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
    </property>
    <!--是否显示当前所在库名-->
    <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
    </property

    显示效果
    hive> select * from hsiehchou;
    OK
    hsiehchou.id hsiehchou.name
    1 re
    2 mi
    3 zk
    4 sf
    5 ls

  • 相关阅读:
    input不可编辑
    span width无效
    react配置rem解决移动端适配问题
    iframe 根据内容自适应高度-终极解决方案
    页面导入样式时,使用link和@import有什么区别?
    怎么让Chrome支持小于12px 的文字?
    React Hook 父子组件相互调用方法
    CSS3实现毛玻璃效果
    React阻止组件渲染
    JSX 中内联条件渲染的方法
  • 原文地址:https://www.cnblogs.com/hsiehchou/p/10479052.html
Copyright © 2011-2022 走看看