• hive 安装 和基本使用


    hive是什么: hive是一个数据仓库,hive不是一个数据库,hive 不没有自己的数据,hive的数据存在hdfs 中,hive 依赖一个关系型数据库来存储 自己在 hdfs 中的数据的映射关系。

    hive用来干什么:用来把 sql 翻译成 mapreduce java 代码,并且提交到 hadoop 中运行的工具。 hive类似  数据库的视图。hive 的本质是 为了不写  mapreduce java代码的 人提供的一种 简单的可以 操作 mapreduce 的 一种翻译工具。

    hive 的安装:

         使用内嵌的数据库:

          1 解压 hive

          2 修改conf 目录下面的: cp hive-env.sh.template  hive-env.sh ,然后 配置 HADOOP_HOME,

            备注:或者把 HADOOP_HOME 写入环境变量(和第2 步 2 选一。都做也可以)。

        使用独立的数据库:

          

        cp hive-default.xml.template hive-site.xml 下面的修改都在这里面

          1.修改 数据库相关属性    

            修改 数据库连接。用户名,密码。驱动类,分别修改下面的几个配置:

    A、修改javax.jdo.option.ConnectionURL属性。
    
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost/hive?useSSL=false</value>
        <description>JDBC connect string for a JDBC metastore</description>
    </property>
    B、修改javax.jdo.option.ConnectionDriverName属性。
    
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    C、修改javax.jdo.option.ConnectionUserName属性。即数据库用户名。
    
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>Username to use against metastore database</description>
    </property>
    D、修改javax.jdo.option.ConnectionPassword属性。即数据库密码。
    
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
        <description>password to use against metastore database</description>
    </property>
    

      备注1:使用什么数据库 需要把 对应数据库驱动 jar 到复制到 lib  目录下面。 

      备注2: mysql 的 搞版本需要  useSSL=false 指定或略安全套接字。

       2 修改一些文件目录:

    E、添加如下属性hive.metastore.local:
    
    <property>
        <name>hive.metastore.local</name>
        <value>true</value>
        <description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
    </property>
    F、修改hive.server2.logging.operation.log.location属性 <property> <name>hive.server2.logging.operation.log.location</name> <value>/tmp/hive/operation_logs</value> <description>Top level directory where operation logs are stored if logging functionality is enabled</descripti on> </property> G、修改hive.exec.local.scratchdir属性。 <property> <name>hive.exec.local.scratchdir</name> <value>/tmp/hive</value> <description>Local scratch space for Hive jobs</description> </property> H、修改hive.downloaded.resources.dir属性。 <property> <name>hive.downloaded.resources.dir</name> <value>/tmp/hive/resources</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> I、修改属性hive.querylog.location属性。 <property> <name>hive.querylog.location</name> <value>/tmp/hive/querylog</value> <description>Location of Hive run time structured log file</description> </property>

      

      备注:如果 不是测试的换 上面的 目录最好不要指定到/tmp 里面。测试无所谓。

      3 修改日志配置: 好像可以不做(日志冲突也能运行)

      cp hive-log4j.properties.template hive-log4j.properties

      如果出现 日志冲突:
      cp /home/install/hive-1.2.1/lib/jline-2.12.jar /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/   
      rm -rf /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar

      4 初始化 hive的映射的mysql表结构:(实测需要先初始化才能启动)

        schematool -dbType mysql -initSchema

      5 如果配置hive 的 环境变量 ,直接使用 hive  启动 ,如果没有配置 ,在 bin 里面去 使用   ./hive 启动。

        ./hive

     -------------------------------------------------------------------------hive 的  服务启动  和  beeline 连接:- ---------------------------------------------  

    hive  如果需要java 代码连接需要启动 hive 服务。

        ./hive --service hiveserver2

        如果需要后台启动: nohup hive --service hiveserver2 &

        查找这个进程:ps -ef|grep hiveserver2

        默认端口10000 。

    使用 beelien 连接

      ./beeline

    然后:

      !connect jdbc:hive2://centos1:10000

    这样就 默认用户名  null 密码 null  就可以连接上了。( 默认没有密码),但是 hdfs 的写入全系有要求。这里的用户 就是 beeline 传给hdfs 的 用户名。所以这里最好使用 你的 hdfs 的用户名登陆,密码用null;

    这个就是匿名登陆抛出的异常:Permission denied: user=anonymous, access=WRITE, inode="/user/hive/warehouse/test":root:supergroup:drwxr-xr-x

    hive server2 配置密码方式参考:https://blog.csdn.net/hua_ed/article/details/51693659

    如果 如果不能连接  可能是 hdfs 的权限问题,在hdfs 的配置文件core-site.xml中加入如下配置

    <property>
      <name>hadoop.proxyuser.root.hosts</name>
      <value>*</value>
     </property>
     <property>
      <name>hadoop.proxyuser.root.groups</name>
      <value>*</value>
    </property>
    

      

    备注: hive 没有索引,如果要提高查询效率,可以通过提高 mr 的速度来提高。提高 mr 的速度 可以通过给文件合理的 副本数,然后同时在多台机子上去同步执行。

     ----------------------------------------------------------------------------语法-----------------------------------------------------------

              

    hive的 语法基础语法 :

      hive 的  语法和 sql  非常像:

    1 显示数据库:show  databases;

    2 使用数据库: use 数据库名;

    3 显示表:show tables;

    4 创建表 

      CREATE TABLE pokes (foo INT, bar STRING);

      使用 字段分隔符: ROW FORMAT DELIMITED FIELDS TERMINATED BY '  '

      如果已经有表: alter table test set SERDEPROPERTIES('field.delim'=' '); 

    5 修改表名

      

     ALTER TABLE pokes RENAME TO test;

    6 修改 表 字段

      

       ALTER TABLE pokes ADD COLUMNS (new_col INT);  部分修改
     ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');  全部修改



    7 删除表
      
      DROP TABLE pokes;

    8 修改字段类型或者名字

      alter table test change id id2 bigint;

    9 导入数据

       LOAD DATA 【LOCAL 】INPATH '/home/hadoop/hfxdoc/person.txt' 【OVERWRITE】 INTO TABLE test;

      

      LOCAL :导入本地文件

      OVERWRITE: 覆盖

      备注:导入的实际就是把这个文件复制到  hdfs 文件系统的这个表的 目录下面。如果是 原文件 在 hdfs 上,那么 会移动原来的文件到 表对应的目录下面。

    10 基础查询  

      select * from test;

    11 支持  where ,like , group by,order by,join  等等 ...........

    12  查询结果 输出到本地 

        

       INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;  //输出到磁盘
      insert overwrite directory  '/testrt' select * from test;  //输出到 hdfs

    13 查询结果插入
      
      INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
    14 插入
       insert into table award(id,event_id,award_type,amount,mark ) values(2,2,"b",2,"mark2");

    15 分区
      在 创建 表的 时候指定 partition by( a string);
      插入的时候指定 partition(a = "a")

      备注:分区就是在表的文件夹下面建了一个目录,分区的数据文件在这个文件夹里面。

    16 导出 表文件
       export table award to "/tools/data";

    17 导入sql 脚本
      hive -f 文件名

    18 导入 和 load 类似
      import table a '路径'

    19 hive的 自定义函数
  • 相关阅读:
    复利计算-做汉堡,结对2.0-复利计算再升级
    java集合
    java 封装,继承,多态基础
    购物车
    ajax
    演示
    实验四
    实验三
    构建之法6-7章读后感
    作业调度模拟程序
  • 原文地址:https://www.cnblogs.com/cxygg/p/9743514.html
Copyright © 2020-2023  润新知