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
包含:解析器、编译器、优化器、执行器;
- 解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工 具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否 存在、SQL语义是否有误(比如select中被判定为聚合的字段在group by中是否有出现);
- 编译器:将AST编译生成逻辑执行计划;
- 优化器:对逻辑执行计划进行优化;
- 执行器:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/TEZ/Spark;
Hive的有点及使用场景
- 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手);
- 避免了去写MapReduce,减少开发人员的学习成本;
- 统一的元数据管理,可与impala/spark等共享元数据;
- 易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数);
- 数据的离线处理;比如:日志分析,海量结构化数据离线分析…
- Hive的执行延迟比较高,因此hive常用于数据分析的,对实时性要求 不高的场合;
- 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没有启动