分享

Hive总结

 昵称23016082 2015-05-10
1.安装:
    1.只需要解压压缩包;
    2.将conf目录下的hive-default.xml.template --> hive-site.xml,配置文件内容不需要修改和配置;
    3.hive是运行在HDFS之上的,必须给hadoop2.X配置环境变量,hive启动的时候会根据环境变量去读取HDFS的信息。
        export HADOOP_HOME=/opt/hadoop-2.5.1
        export PATH=$PATH:$HADOOP_HOME/bin
    4.hive运行还需要mysql数据库的支持:安装mysql数据库;
        将mysql-connector-java-5.1.32.tar.gz里面的连接数据库的jar包复制到hive目录的lib目录下。
    5.给用户授权:
        mysql>grant all on *.* to root@'%' identified by '123456';
        mysql>grant all on *.* to root@'Ivan-PC1' identified by '123456'
    6.配置文件hive-site.xml
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://Ivan-PC1/hive</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>123456</value>
        </property>
    7.运行:bin目录 ./hive 进入。
    (其中又步骤不是必须的,但是后面会用到,就直接配置了)

2.hive命令的使用:类似于sql语句。
    注意:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
    是到mysql中的hive数据库里执行 alter database hive character set latin1;改变hive元数据库的字符集,问题就可以解决!

3.创建表格举例:数组,map,集合,files
    create table t_stu(
        id int,
        name string,
        age int,
        like array<string>,
        tedian struct<color:string,classid:int>
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    COLLECTION ITEMS TERMINATED BY '_'
    MAP KEYS TERMINATED BY ':';

    输入文件格式:
        1,张三,25,sport1_book1_TV1_BM1,color:red1_classid:11
        2,李四,27,sport2_book2_TV2_BM2,color:red2_classid:12
        3,王五,35,sport3_book3_TV3_BM3,color:red3_classid:13
        4,赵六,22,sport4_book4_TV4_BM4,color:red4_classid:14
    
    加载文件命令:
        load data local inpath ‘/root/data.txt’ into table t_stu;

    hive在运行时有一些元数据需要保存。默认保持到DBMS。

4.通过java调用hive:
    通过java调用hive命令。
    开启hive服务hiveserver2
    
    修改配置文件:
        <name>hive.server2.thrift.bind.host</name>
            <value>Ivan-PC1</value> //监听指定主机,不能使用localhost,否则是监听127.0.0.1
        
        <name>hive.localize.resource.wait.interval</name>
            <value>5000(L)</value>    //hivede BUG 改成5000
        
    启动服务:
    hive --servic hiveserver2
    后台启动服务
    hive --servic hiveserver2 &>/dev/null &
    
    测试:
        找另外一台机器,解压hive
        ./beeline
        !connect jdbc:hive2://192.168.1.246:10000/default
        root
        连接成功之后可以运行ddl,dml等
        
    开放javajdbc客户端连接hiveserver2

    java代码:
package hiveTest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HiveJDBC {

    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            conn = DriverManager.getConnection("jdbc:hive2://Ivan-PC1:10000/default", "root", "");
            st = conn.createStatement();
            rs = st.executeQuery("select count(*) from t_tmp ");
            System.out.println(rs.getRow());
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


5.正则表达式建表:对于那些规则不好判断的文件使用正则表达式匹配
    add jar /opt/apache-hive-0.13.0/lib/hive-contrib-0.13.1.jar;需要jar
    tomcat登陆日志文件对应的表创建:
        create table t_log(
            host string,
            identity string,
            user string,
            time string,
            request string,
            status string,
            size string)
        row format
        serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
        with serdeproperties
        ("input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) (\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)")
        stored as textfile;
    ([^ ]*):除空格,匹配任意,一个()表示一个单元,每个()之间有空格
    (-|\\[[^\\]]*\\]):[]中的额内容,但是去除[]

6.课外题:自定义函数UDF
    count(),max(),min()......



load data inpath '/root/core.txt' into table t_core;  
FAILED: SemanticException Line 1:17 Invalid path ''/root/core.txt'': No files matching path hdfs://mycluster/root/core.txt
    错误原因:没有家local,默认的从hdfs中找文件

自定义函数的jar包添加,创建,使用:
add jar /home/user/hadoop_jar/hiveudf.jar;
create temporary function pass_score AS ‘com.oserp.hiveudf.PassExam’;
select stuNo,pass_score(score) from student;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多