zoukankan      html  css  js  c++  java
  • Hive-01 配置| 架构原理

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

    本质是:将HQL转化成MapReduce程序

    1)Hive处理的数据存储在HDFS

    2)Hive分析数据底层的实现是MapReduce

    3)执行程序运行在Yarn上

    1. Hive架构原理

    hive的组成:

    Hive计算和存储都是基于Hadoop的;

    MetaStore元数据(描述表数据的数据)的存储,hive改变了数据的呈现形式,主流用的是mysql;

    Client + jdbc(都有接口实现的Driver,hive提供一套面向jdbc接口的输入输出,找到hive的jdbc连接driver就可以连接hive),

    sql进来经过driver翻译处理,进入到SQL Parser解析器 ---->Physical Plan编译器,翻译成MR--->Query Optimizer优化器进行优化--->Execution进行执行;

     可以配置Hive运行引擎Tez:

    https://www.cnblogs.com/shengyang17/p/10527700.html

    2. Hive安装及配置

    1)把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下
    (2)解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面
      [kris@hadoop101 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/3)修改apache-hive-1.2.1-bin.tar.gz的名称为hive
      [kris@hadoop101 module]$ mv apache-hive-1.2.1-bin/ hive
    (4)修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
      [kris@hadoop101 conf]$ mv hive-env.sh.template hive-env.sh5)配置hive-env.sh文件
        (a)配置HADOOP_HOME路径
          export HADOOP_HOME=/opt/module/hadoop-2.7.2
        (b)配置HIVE_CONF_DIR路径
          export HIVE_CONF_DIR=/opt/module/hive/conf

     Hadoop集群配置

    Hadoop集群配置
    (1)必须启动hdfs和yarn
      start-dfs.sh 
    若启动时出现nodenode进程或其他,受到Ha的影响,删除data数据,可重新格式化;
      killall java
    [kris@hadoop101 ~]$ cd /tmp/
    [kris@hadoop101 tmp]$ rm -rf *.pid
    
      start-yarn.sh
    在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写,看下没有这个文件(一般启动之后就会产生)就创建并修改权限;
    [kris@hadoop101 tmp]$ hadoop fs -chmod 777 /tmp/ 
    [kris@hadoop101 tmp]$ hadoop fs -chmod g+w /user/hive/warehouse

      可直接启动hive

      [kris@hadoop101 hive]$ bin/hive

    将本地文件导入hive:

      在/opt/module/目录下创建datas
      [atguigu@hadoop102 module]$ mkdir datas
      在/opt/module/datas/目录下创建student.txt文件并添加数据
    
    hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED
        >  BY '	';
    OK
    Time taken: 0.298 seconds
    hive> load data local inpath '/opt/module/datas/student.txt' into table student;
    Loading data to table default.student
    Table default.student stats: [numFiles=2, numRows=0, totalSize=330, rawDataSize=0]
    OK
    Time taken: 0.729 seconds
    hive> show tables;
    OK
    student
    Time taken: 0.021 seconds, Fetched: 1 row(s)
    hive> select * from student;
    OK
    1001    ss1
    1002    ss2
    1003    ss3
    1004    ss4
    1005    ss5

    再打开一个客户端窗口启动hive,会产生java.sql.SQLException异常。

     Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/module/hive/metastore_db.

    原因是,Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore;

      MySql安装

    [kris@hadoop101 ~]$ rpm -qa | grep mysql
    mysql-libs-5.1.73-7.el6.x86_64
    [kris@hadoop101 ~]$ sudo rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64  把之前安装的卸载掉;
    [kris@hadoop101 ~]$ rpm -qa | grep mysql
    
    [kris@hadoop101 ~]$ unzip /opt/software/mysql-libs.zip   
    
    [kris@hadoop101 mysql-libs]$ ll
    总用量 76048
    -rw-rw-r-- 1 kris kris 18509960 3月 26 2015 MySQL-client-5.6.24-1.el6.x86_64.rpm
    -rw-rw-r-- 1 kris kris 3575135 12月 1 2013 mysql-connector-java-5.1.27.tar.gz
    -rw-rw-r-- 1 kris kris 55782196 3月 26 2015 MySQL-server-5.6.24-1.el6.x86_64.rpm

    在root用户下安装Mysql

    sudo rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm  //1.在root用户下安装mysql服务器
    
    sudo cat /root/.mysql_secret
    sudo rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm  //2. 安装mysql客户端
    cat /root/.mysql_secret                  //3. 查看mysql默认密码,记下来登陆进去修改密码
     sudo service mysql start                //4. 开启mysql服务器;
      mysql -uroot -p iGD2pY1XQycacXKc                  //5.进入mysql修改
    
    mysql> show databases;
    ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
    mysql> set password=password("123456");                 
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    4 rows in set (0.00 sec)
    mysql> exit;
    Bye
    [kris@hadoop101 software]$ mysql -uroot -p123456
    use mysql;
    mysql> select user, host, password from user;
    +------+-----------+-------------------------------------------+
    | user | host      | password                                  |
    +------+-----------+-------------------------------------------+
    | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    | root | hadoop101 | *F989EA3B224D436B6BEAEAEB2E879B7E765C28C5 |
    | root | 127.0.0.1 | *F989EA3B224D436B6BEAEAEB2E879B7E765C28C5 |
    | root | ::1       | *F989EA3B224D436B6BEAEAEB2E879B7E765C28C5 |
    +------+-----------+-------------------------------------------+
    4 rows in set (0.00 sec)
    
    mysql> delete from user where host<>"localhost";
    Query OK, 3 rows affected (0.00 sec)
    
    mysql> update user set host='%' where host='localhost';
    mysql> flush privileges;

      Hive元数据配置到MySql

    拷贝驱动到hive的lib目录下面

    [kris@hadoop101 software]$ tar -zxf mysql-connector-java-5.1.27.tar.gz  
    [kris@hadoop101 software]$ ll
    总用量 200936
    drwxr-xr-x. 4 kris kris     4096 10月 24 2013 mysql-connector-java-5.1.27
    [kris@hadoop101 mysql-connector-java-5.1.27]$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib/

      配置Metastore到MySql

      1.在/opt/module/hive/conf目录下创建一个hive-site.xml
        [kris@hadoop101 conf]$ touch hive-site.xml
        [kris@hadoop101 conf]$ vi hive-site.xml
      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://hadoop101:3306/metastore?createDatabaseIfNotExist=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</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>123456</value>
              <description>password to use against metastore database</description>
            </property>
    </configuration>
    [kris@hadoop101 hive]$ bin/hive
    Logging initialized using configuration in jar:file:/opt/module/hive/lib/hive-common-1.2.1.jar!/hive-log4j.properties
    hive>

     配置完毕后,如果启动hive异常,可以重新启动虚拟机。(重启后,别忘了启动hadoop集群)

    多窗口启动Hive测试

    1.先启动MySQL
    [kris@hadoop101 hive]$ mysql -uroot -p123456
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | metastore          |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    5 rows in set (0.02 sec)
    2.再次打开多个窗口,分别启动hive
    [kris@hadoop101 hive]$ bin/hive
    3.启动hive后,回到MySQL窗口查看数据库,显示增加了metastore数据库

    HiveJDBC访问

    [kris@hadoop101 hive]$ bin/hiveserver2  //它就相当于是SQL Parser解析器+Physical Plan编辑器+优化器+执行器
    
    [kris@hadoop101 hive]$ bin/beeline     //它就相当于是Client + Driver + CLI + JDBC
    Beeline version 1.2.1 by Apache Hive
    beeline> !connect jdbc:hive2://hadoop101:10000      //必须把bin/hiveserver2启动了才能启动它,它们是配套的
    Connecting to jdbc:hive2://hadoop101:10000
    Enter username for jdbc:hive2://hadoop101:10000: kris
    Enter password for jdbc:hive2://hadoop101:10000: 
    Connected to: Apache Hive (version 1.2.1)
    Driver: Hive JDBC (version 1.2.1)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://hadoop101:10000> show databases;
    +----------------+--+
    | database_name  |
    +----------------+--+
    | default        |
    +----------------+--+
    1 row selected (1.233 seconds)
    0: jdbc:hive2://hadoop101:10000> 
    发现这里发生变化:它会记录查询情况,是否出错
    [kris@hadoop101 hive]$ bin/hiveserver2 
    OK

    3. Hive常见属性配置

    Hive数据仓库位置配置

           1)Default数据仓库的最原始位置是在hdfs上的:/user/hive/warehouse路径下。

           2)在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。

           3)修改default数据仓库原始位置(将hive-default.xml.template如下配置信息拷贝到hive-site.xml文件中)。

    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
    </property>

    配置同组用户有执行权限

    bin/hdfs dfs -chmod g+w /user/hive/warehouse

    查询后信息显示配置

    1)在hive-site.xml文件中添加如下配置信息,就可以实现显示当前数据库,以及查询表的头信息配置。

    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
    
    <!-- Hive客户端查询显示不带表名的字段名 -->
    <property>
        <name>hive.resultset.use.unique.column.names</name>
        <value>false</value>
    </property>
    
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>

    2)重新启动hive,对比配置前后差异。

     Hive运行日志信息配置

    1.Hive的log默认存放在/tmp/kris/hive.log目录下(当前用户名下)

    2.修改hive的log存放日志到/opt/module/hive/logs

           (1)修改/opt/module/hive/conf/hive-log4j.properties.template文件名称为 hive-log4j.properties

      2)在hive-log4j.properties文件中修改log存放位置   hive.log.dir=/opt/module/hive/logs

     参数配置方式

    1.查看当前所有的配置信息

    hive>set;

    2.参数的配置三种方式

           (1)配置文件方式; 默认配置文件:hive-default.xml; 用户自定义配置文件:hive-site.xml

           注意:用户自定义配置会覆盖默认配置。另外,Hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端启动的,Hive的配置会覆盖Hadoop的配置。配置文件的设定对本机启动的所有Hive进程都有效。

      (2)命令行参数方式

    启动Hive时,可以在命令行添加-hiveconf param=value来设定参数。例如:

    [kris@hadoop101 hive]$ bin/hive -hiveconf mapred.reduce.tasks=10;

    注意:仅对本次hive启动有效

    查看参数设置:hive (default)> set mapred.reduce.tasks;

      (3)参数声明方式

    可以在HQL中使用SET关键字设定参数; 例如:

    hive (default)> set mapred.reduce.tasks=100;

    注意:仅对本次hive启动有效。

    查看参数设置:hive (default)> set mapred.reduce.tasks;

    上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,因为那些参数的读取在会话建立以前已经完成了。

    4. Hive常用交互命令

    “-e”不进入hive的交互窗口执行sql语句;  “-f”执行脚本中sql语句

    退出hive窗口:在新版的hive中没区别了,在以前的版本是有的: exit:先隐性提交数据,再退出; quit:不提交数据,退出;

    [kris@hadoop101 hive]$ bin/hive -e "select * from student;"
    
    Logging initialized using configuration in jar:file:/opt/module/hive/lib/hive-common-1.2.1.jar!/hive-log4j.properties
    OK
    1001    ss1
    1002    ss2
    1003    ss3
    写入文件中:
    [kris@hadoop101 datas]$ vim hivef.sql
    select * from student;
    [kris@hadoop101 hive]$ bin/hive -f /opt/module/datas/hivef.sql 
    
    Logging initialized using configuration in jar:file:/opt/module/hive/lib/hive-common-1.2.1.jar!/hive-log4j.properties
    OK
    1001    ss1
    1002    ss2
    1003    ss3
    
    hive> dfs -ls /;
    Found 2 items
    drwxrwxr-x   - kris supergroup          0 2019-02-13 15:59 /tmp
    drwxr-xr-x   - kris supergroup          0 2019-02-13 15:54 /user
    hive> !ls /opt/module/datas
        > ;
    business.txt
    dept.txt
    emp_sex.txt
    emp.txt
    hivef.sql
    location.txt
    log.data
    score.txt
    student.txt
    hive> 
    
    查看在hive中输入的所有历史命令
        (1)进入到当前用户的根目录/root或/home/atguigu
        (2)查看. hivehistory文件
    [kris@hadoop101 ~]$ cat .hivehistory   
  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/shengyang17/p/10372242.html
Copyright © 2011-2022 走看看