zoukankan      html  css  js  c++  java
  • Hive学习笔记——安装和内部表CRUD

    1.首先需要安装Hadoop和Hive

    安装的时候参考 http://blog.csdn.net/jdplus/article/details/46493553

    安装的版本是apache-hive-2.1.1-bin.tar.gz,解压到/usr/local目录下

    然后在/etc/profile文件中添加

    export HIVE_HOME=/usr/local/hive
    export PATH=$PATH:$HIVE_HOME/bin
    

    2.修改配置文件

    在bin/hive-config.sh文件中添加

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_121
    export HIVE_HOME=/usr/local/hive
    export HADOOP_HOME=/usr/local/hadoop
    

    添加hive-env.sh文件

    cp hive-env.sh.template hive-env.sh
    

    修改conf目录下的hive-site.xml的内容,该模式是本地模式,且使用JDBC连接元数据,本地模式可以查看Hive编程指南P24-27

    实际数据还是存放在HDFS中,MySQL中存放的是元数据表,即schema信息

    <configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive</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>XXXX</value>
        <description>password to use against metastore database</description>
    </property>
    #如果不配置下面的部分会产生错误1.
    <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/usr/local/hive/tmp/local</value>
        <description>Local scratch space for Hive jobs</description>
      </property>
    <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/usr/local/hive/tmp/downloaded</value>
        <description>Temporary local directory for added resources in the remote file system.</description>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/usr/local/hive/tmp/location</value>
        <description>Location of Hive run time structured log file</description>
    </property>
    <property>
       <name>hive.server2.logging.operation.log.location</name>
        <value>/usr/local/hive/tmp/operation_logs</value>
        <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
    </property>
    </configuration>
    

    注意/usr/local/hive/tmp/local , /usr/local/hive/tmp/downloaded , /usr/local/hive/tmp/location , /usr/local/hive/tmp/operation_logs 这四个文件夹需要自己创建

    修改hive-log4j.properties

    #cp hive-log4j.properties.template hive-log4j.properties
    #vim hive-log4j.properties
    hive.log.dir=自定义目录/log/
    

    在HDFS上建立/tmp和/user/hive/warehouse目录,并赋予组用户写权限

    注意这里面的/user/hive/warehouse是由hive-site.xml中的${hive.metastore.warehouse.dir}指定的数据仓库的目录

    hadoop fs -mkdir       /tmp
    hadoop fs -mkdir       /user/hive/warehouse
    hadoop fs -chmod g+w   /tmp
    hadoop fs -chmod g+w   /user/hive/warehouse
    

     Mysql配置

    #创建数据库
    mysql> create database hive;
    #赋予访问权限
    mysql> grant all privileges on hive.* to root@localhost identified by '密码' with grant option;
    mysql> flush privileges;
    #将JDBC复制到Hive库目录用于java程序与mysql的连接
    cp mysql-connector-java-5.1.35/mysql-connector-java-5.1.35-bin.jar /usr/local/apache-hive-1.1.0-bin/lib/
    

    在hive的bin目录下,初始化元数据

    ./schematool -initSchema -dbType mysql
    

    如果想使用hive的web界面的话,参考 http://blog.csdn.net/yyywyr/article/details/51416721

    Hadoop和Hive的own和grp都是Hadoop

    Hive的安装很简单,在清华镜像站下载Hive的二进制文件,然后解压到/usr/local目录下

    修改own和grp就行

    2.启动hive之前需要先启动Hadoop,启动后显示

    hive> 
    

    3.查看有没有表

    show tables
    

    4.创建表,多个字段的时候需要指定用什么来分隔

    create table test(id int,name string)row format delimited fields terminated by '	';
    
    create table test(id int,name string)row format delimited fields terminated by ',';
    

    5.插入数据

    insert into table test values (1,'row1'),(2,'row2');
    

    也可以select任意一张空表来insert

    insert into table default.example_table (select 1L,'xiaodou',array(1L,2L,3L) from default.test limit 1);
    

    如果遇到 Unable to create temp file for insert values Expression of type TOK_FUNCTION not supported in insert/values

    insert into table test partition(ds="2019-08-20") select 1L,2,1S,1.111,"test",2Y,true,array(1,2,3),array(1Y,1Y,1Y),map('name','Xiao','age','20'),map(10L,false,20L,true),"lin","tong";
    

    6.加载数据,也可以使用Hadoop fs -put命令直接上传文件,注意文件中的分隔符需要和创建表的时候指定分隔符保持一致

    load data local inpath 'XXXX' into table XXXX;
    

    如果是加载分区的数据的话

    load data local inpath 'xxx/role_id=1' into table XXX PARTITION(role_id=1);
    

    7.查看数据

    select * from XXXX;
    

    8.删除表

    drop table XXXX;
    

    9.启动hive metastore

    bin/hive --service metastore
    
  • 相关阅读:
    c++中的工具(一):std::pair<class T1, class T2>
    mybatisplus Lambda 表达式
    将查询结果映射成map的注解,其中第一个字段为key,第二个字段为value.
    mybatisplus 添加 /修改 数据 插入公共字段
    mybatisplus扩展BaseMapper的方法(InsertBatchSomeColumn及AlwaysUpdateSomeColumnById)
    根据俩日期(yyyy-MM-dd)格式获取它们之间的年月日组合结果(js实现)
    oralce json字段中根据key提取value的函数(转载)
    记录一下关于oracle还原数据库的问题
    记录一下数据库外连接 的不同
    JAVA项目从运维部署到项目开发(六. Jenkins之静态页面(2))
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/7072935.html
Copyright © 2011-2022 走看看