设为首页 加入收藏

TOP

【Hadoop】Hive搭建
2018-11-26 01:05:20 】 浏览:62
Tags:Hadoop Hive 搭建
版权声明:小哥哥小姐姐们,本文为小博主原创文章,转载请附上博主博文网址,并标注作者谢谢~~。违者必究 https://blog.csdn.net/HuHui_/article/details/84202077

前言

这里介绍下hive安装,为后面hive的实操做铺垫。

Hive来历

Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的。

Hive究竟是什么?下面是wiki百科解释:

Apache Hive是一个建立在Hadoop架构之上的数据仓库。它能够提供数据的精炼,查询和分析。

它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。

这里提到了数据仓库的概念。

那跟我们常说的数据库有什么区别呢,我总结一段话:

数据库是一种软件,像Mysql,Oracle…etc,常用于联机事务处理OLTP(on-line transaction processing),联机分析处理OLAP(On-Line Analytical Processing)

当你数据量特别大的时候,数据仓库更适用OLAP,是数据库的一种应用场景。

Hive应用场景

Hive提供了类似SQL的查询语言,让大部分作业通过sql就可以运行计算

Hive 并不适合那些需要低延迟的应用

Hive 的最佳使用场合是大数据集的批处理作业

装备

  1. hadoop集群 (没安装可以参考 【Hadoop完全分布式集群搭建】https://blog.csdn.net/HuHui_/article/details/83960047)
  2. apache-hive-1.2.2-bin.tar.gz
  3. mysql-community-common-5.7.24-1.el7.x86_64.rpm(这里安装了比较新的5.7mysql)
  4. mysql-community-libs-5.7.24-1.el7.x86_64.rpm
  5. mysql-community-client-5.7.24-1.el7.x86_64.rpm
  6. mysql-community-server-5.7.24-1.el7.x86_64.rpm
  7. mysql-connector-java-5.1.47.jar

进坑

  1. mysql安装失败,mariadb-libs-包冲突

  2. hive启动失败java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.

  3. hive启动失败 Terminal initialization failed; falling back to unsupported

    java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
    service mysqld start/stop

Core

1. MySQL

  • Hive默认使用derby数据库,通常用mysql替换。所以需要先安装mysql

    Mysql官网下载RMP包

    https://www.mysql.com/downloads/

  • 查看是否安装了Mysql,如果有则先卸载

    # 查看mysql是否安装
    rpm -qa | grep mysql
    # 根据提示卸载
    rpm -e MySQL-XXX......_64
    
  • 安装Mysql

    rpm -ivh mysql-community-common-5.7.24-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.24-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.24-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.24-1.el7.x86_64.rpm
    
  • 启动Mysql,查看Mysql运行情况

    # 查看状态
    service mysqld status
    # stop/start
    service mysqld stop
    service mysqld start
    
  • 登录Mysql 修改密码

    # 先查看默认密码
    sudo grep 'temporary password' /var/log/mysqld.log
    # 用默认密码登录
    mysql -u root -p
    # 自己测试的环境,密码修改的简单一些。修改密码最小长度策略 (最小为4,比4低也是4)
    set global validate_password_length=4;
    # 修改密码强度检查等级策略
    set global validate_password_policy=0;
    # 修改密码 我就简单一点123456了
    set password for 'root'@'localhost' = password('123456');
    
    # 开启mysql的root用户远程连接服务
    # 为了日后子节点的hive客户端可以远程连接
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    # 刷新权限
    flush privileges;
    # 退出mysql
    exit;
    
  • Result

在这里插入图片描述

2. Hive

  • 解压hive源码包

    tar -zxvf apache-hive-1.2.2-bin.tar.gz -C /usr/local
    
  • 配置环境变量

    vi etc/profile
    ## 增加变量
    export HIVE_HOME=/usr/local/apache-hive-1.2.2-bin
    export CLASSPATH=.:${HIVE_HOME}/lib:$CLASSPATH
    export PATH=${HIVE_HOME}/bin:${HIVE_HOME}/conf:$PATH
    
  • 修改hive配置文件

    cd /usr/local/apache-hive-1.2.2-bin/conf/
    vi hive-site.xml
    # 修改hive配置文件
    <configuration>
    #JDBC的连接URL
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.31.60:3306/hive</value>
        <description>JDBC connect string for a JDBC metastore</description>
      </property>
      #数据库账号密码
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
      </property>
       <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
    
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/usr/local/apache-hive-1.2.2-bin/tmp</value>
     </property>
      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/usr/local/apache-hive-1.2.2-bin/warehouse</value>
      </property>
    
      <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/usr/local/apache-hive-1.2.2-bin/downloaded</value>
      </property>
    
      <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/usr/local/apache-hive-1.2.2-bin/scratchdir</value>
      </property>
    </configuration>
    
  • MySQL驱动包放到lib下

    cp /home/huweihui/mysql-connector-java-5.1.43-bin.jar /usr/local/apache-1.2.2-bin/lib
    
  • 启动hive 启动hive之前要先启动hadoop集群,需要搭建hadoop完全分布式集群的请看blog

    【Hadoop完全分布式集群搭建】https://blog.csdn.net/HuHui_/article/details/83960047)

    [root@master ~]# hive
    
  • Result

在这里插入图片描述

  • 其他子节点

     # 环境变量
     scp /etc/profile  root@slave1:/etc/
     scp /etc/profile  root@slave2:/etc/
     # hive
     scp -r apache-hive-1.2.2-bin/  root@slave1:/usr/local/
     scp -r apache-hive-1.2.2-bin/  root@slave3:/usr/local/
     # 另外两个子节点slave1 slave2
     source /etc/profile
    

    跳坑

  1. mysql安装失败,mariadb-libs-包冲突

    # 既然说冲突了,那就干掉吧
     rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64
    
  2. hive启动失败java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.

    # 原因1,hive版本太高了和hadoop的版本不兼容 
    #我由apache-hive-2.3.4 换成了 apache-hive-1.2.2。这是低级错误
    #当时候下载的时候太赶时间,忘了教程的hadoop是2.6.5的
    
    # 原因2,没有启动metastore 
    hive --service metastore &
    Starting Hive Metastore Server
    hive
    
  3. hive启动失败 Terminal initialization failed; falling back to unsupported

    java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
    service mysqld start/stop

    # Jline版本不对。因为hadoop里面的jline版本太低
    cp $HIVE_HOME/lib/jline-2.12.jar  $HADOOP_HOME/share/hadoop/yarn/lib
    # 以前的版本不用了(改个名字即可)
    cd $HADOOP_HOME/share/hadoop/yarn/lib
    mv jline-0.9.94.jar jline-0.9.94.jar.bak
    

总结

  1. hive原理和运行机制等往后更新深入的blog
  2. hive hbase是重点
  3. 原理如果没时间理解,也得先理解一下hive的作用和hive应用场景。
  4. 数据仓库的作用
  5. 额外了解:可以了解一下Apache Pig
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hive利用hbase实现更新 下一篇解决hive 与hbase 集成报空指针的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目