Fork me on GitHub

ubuntu16.04下hive安装与配置

Hive是什么?

由Facebook开源用于解决海量 结构化日志的数据统计; Hive是基于Hadoop的一个 数据仓库工具,可以将结构化的数据文件映射 成一张表,并提供类SQL查询功能;

构建在Hadoop 之上的数据仓库; 1. 使用HQL作为查询接口; 2. 使用HDFS存储; 3. 使用MapReduce计算;

本质是:将HQL转化成MapReduce 程序 灵活性和扩展性比较好:支持UDF,自定义存储格式等; 适合离线数据处理;

Hive架构

用户接口: Client

CLI(hive shell)、JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)

元数据: Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/ 分区字段、表的类型(是否是外部表)、表的数据所在目录等; 默认存储在自带的derby数据库中,推荐使用采用MySQL存储Metastore;

Hadoop

使用HDFS进行存储,使用MapReduce进行计算;

驱动器: Driver

包含:解析器、编译器、优化器、执行器;

  1. 解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工 具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否 存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现);
  2. 编译器:将AST编译生成逻辑执行计划;
  3. 优化器:对逻辑执行计划进行优化;
  4. 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark;

Hive的有点及使用场景

  1. 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
  2. 避免了去写MapReduce,减少开发人员的学习成本;
  3. 统一的元数据管理,可与impala/spark等共享元数据;
  4. 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
  5. 数据的离线处理;比如:日志分析,海量结构化数据离线分析…
  6. Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求 不高的场合;
  7. Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执 行延迟比较高。

 

下载

  • wget http://mirrors.hust.edu.cn/apache/hive/hive-2.3.2/apache-hive-2.3.2-bin.tar.gz

  • 解压到指定目录 tar -zxvf ..

配置环境变量

如果是对所有的用户都生效就修改vi /etc/profile 文件, 如果只针对当前用户生效就修改 vi ~/.bahsrc 文件。

vim /etc/profile

export HIVE_HOME=/home/hadoop/hive-2.3.0/

export PATH=$PATH:$HIVE_HOME/bin

使环境变量生效,运行 source /etc/profile使/etc/profile文件生效

Hive 配置 Hadoop HDFS

复制 hive-site.xml

cd /home/hadoop/hive-2.3.0/conf
cp hive-default.xml.template hive-site.xml

新建 hdfs 目录

使用 hadoop 新建 hdfs 目录,因为在 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>

进入 hadoop 安装目录 执行hadoop命令新建/user/hive/warehouse目录,并授权,用于存储文件

cd /home/hadoop/hadoop-2.7.4

bin/hadoop fs -mkdir -p /user/hive/warehouse  
bin/hadoop fs -mkdir -p /user/hive/tmp  
bin/hadoop fs -mkdir -p /user/hive/log  
bin/hadoop fs -chmod -R 777 /user/hive/warehouse  
bin/hadoop fs -chmod -R 777 /user/hive/tmp  
bin/hadoop fs -chmod -R 777 /user/hive/log  

用以下命令检查目录是否创建成功

bin/hadoop fs -ls /user/hive

修改 hive-site.xml

搜索hive.exec.scratchdir,将该name对应的value修改为/user/hive/tmp

<property>  
    <name>hive.exec.scratchdir</name>  
    <value>/user/hive/tmp</value>  
</property>  

搜索hive.querylog.location,将该name对应的value修改为/user/hive/log/hadoop

<property>
    <name>hive.querylog.location</name>
    <value>/user/hive/log/hadoop</value>
    <description>Location of Hive run time structured log file</description>
</property>

搜索javax.jdo.option.connectionURL,将该name对应的value修改为MySQL的地址

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://host:port/hive?createDatabaseIfNotExist=true</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
</property>

搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>

搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive1</value>
    <description>Username to use against metastore database</description>
</property>

搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码

<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>mima</value>
    <description>password to use against metastore database</description>
</property>

创建 tmp 文件

mkdir /home/hadoop/hive-2.3.0/tmp

并在 hive-site.xml 中修改

把{system:java.io.tmpdir} 改成 /home/hadoop/hive-2.3.0/tmp

把 {system:user.name} 改成 {user.name}

新建 hive-env.sh

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

vi hive-env.sh

HADOOP_HOME=/home/hadoop/hadoop-2.7.4/
export HIVE_CONF_DIR=/home/hadoop/hive-2.3.0/conf
export HIVE_AUX_JARS_PATH=/home/hadoop/hive-2.3.0/lib

下载 mysql 驱动包

cd /home/hadoop/hive-2.3.0/lib

wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

初始化 mysql

MySQL数据库进行初始化 首先确保 mysql 中已经创建 hive 库

cd /home/hadoop/hive-2.3.0/bin
./schematool -initSchema -dbType mysql

如果看到如下,表示初始化成功

Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)

mysql -uroot -p
#(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

启动hive

cd bin
./hive

问题

hive Call From node1/ip to node1:9000 failed on connection exception: java.net.ConnectException: Connection refused

  • 以上问题一般就是hadoop没有启动

 

https://segmentfault.com/a/1190000011303459

posted @ 2018-03-17 19:00  迁梦余光  阅读(270)  评论(0编辑  收藏  举报