Hadoop 集群安装Hive

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/daoxu_hjl/article/details/86376411

参考: https://www.2cto.com/net/201803/731209.html

Hive 简介

概念

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便

特点

它存储架构在一个数据库中并处理数据到HDFS。
• 它是专为OLAP设计。
• 它提供SQL类型语言查询叫HiveQL或HQL。
• 它是熟知,快速,可扩展和可扩展的

架构

在这里插入图片描述

在这里插入图片描述

工作原理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

安装模式

在这里插入图片描述

相关文档资料: http://hive.apache.org/

官网下载: http://hive.apache.org/downloads.html

前置说明

  1. 安装并启动Hadoop 集群:使用hadoop-2.9.0
    https://blog.csdn.net/daoxu_hjl/article/details/85875136
  2. hive只需要在NameNode节点安装即可,可以不在datanode节点安装
  3. 以下 在本地独立模式的基础上安装: 建议选择远程模式安装mysql,步骤一样,修改url为其他节点名称、赋权语句指定%接收任何主机连接

1 下载与上传解压

1.1 下载

     https://mirrors.tuna.tsinghua.edu.cn/apache/hive/    
     选择稳定版:apache-hive-2.3.4-bin.tar.gz

1.2 上传解压

      主namenode节点hdp-01: mkdir -p /opt/hive
      通过FileZilla上传tgz安装包至hdp-01的hive目录       
      解压:cd /opt/hive && tar -zxvf apache-hive-2.3.4-bin.tar.gz

2 配置环境变量

vim ~/.bash_profile
#末尾添加环境变量
	#hive
	export HIVE_HOME=/opt/hive/apache-hive-2.3.4-bin
	export PATH=$HIVE_HOME/bin:$PATH
#立即生效
source ~/.bash_profile 	

3 Hive配置Hadoop HDFS

3.1 进入HIVE配置目录并复制模板文件

cd $HIVE_HOME/conf
cp hive-default.xml.template hive-site.xml

3.2 修改配置文件

vim hive-site.xml

#修改 属性:hive.metastore.warehouse.dir 为 /data/hive/warehouse
#修改 属性:hive.exec.scratchdir 为 /data/hive/tmp

3.3 创建配置的hdfs目录并赋权

3.2中配置的目录都是hdfs上的目录,需要单独创建

#创建warehouse目录
hdfs dfs -mkdir -p /data/hive/warehouse
hdfs dfs -chmod 777 /data/hive/warehouse
#创建tmp目录
hdfs dfs -mkdir -p /data/hive/tmp
hdfs dfs -chmod 777 /data/hive/tmp
#验证
hdfs dfs -ls /data/hive/

在这里插入图片描述

3.4 修改$HIVE_HOME/conf/hive-site.xml中的临时目录

  1. 将文件中的所有 ${system:java.io.tmpdir}替换成/opt/hive/apache-hive-2.3.4-bin/tmp
sed -i 's/\${system:java.io.tmpdir}/\/opt\/hive\/apache-hive-2.3.4-bin\/tmp/g' hive-site.xml
  1. 将文件中所有的${system:user.name}替换为hadoop
sed -i 's/\${system:user.name}/hadoop/g' hive-site.xml
  1. 创建上面定义的目录:
mkdir -p /opt/hive/apache-hive-2.3.4-bin/tmp

4 安装配置mysql

4.1 安装mysql

sudo yum install -y mysql

在这里插入图片描述

4.2 上传mysql驱动包并移动到$HIVE_HOME/lib

下载一个mysql-connector-java驱动包 mysql-connector-java-5.1.44.tar.gz,并上传解压

http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/

tar -zxvf mysql-connector-java-5.1.44.tar.gz 

移动jar包

cp mysql-connector-java-5.1.44-bin.jar $HIVE_HOME/lib

4.3 修改hive-site.xml数据库相关配置

修改属性值:
javax.jdo.option.ConnectionURL
javax.jdo.option.ConnectionDriverName
javax.jdo.option.ConnectionUserName
javax.jdo.option.ConnectionPassword
hive.metastore.schema.verification

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hdp-01:3306/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>

<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>hive</value>
    <description>Username to use against metastore database</description>
  </property>

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

<property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
    <description>
      Enforce metastore schema version consistency.
      True: Verify that version information stored in is compatible with one from Hive jars.  Also disable automatic
            schema migration attempt. Users are required to manually migrate schema after Hive upgrade which ensures
            proper metastore schema migration. (Default)
      False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
    </description>
  </property>

4.4 复制hive-env.sh模板并配置

cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh 

vim $HIVE_HOME/conf/hive-env.sh
增加如下内容

export HADOOP_HOME=/opt/hadoop/hadoop-2.9.0
export HIVE_CONF_DIR=/opt/hive/apache-hive-2.3.4-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.3.4-bin/lib

5 初次启动

5.1 启动mysql

sudo service mysqld start
sudo chkconfig mysqld on
sudo chkconfig --list | grep mysql

在这里插入图片描述

5.2 创建mysql账号并赋权

mysql
create user hive@'hdp-01' identified by 'hive';
grant all privileges on *.* to 'hive'@'hdp-01' with grant option;
flush privileges;

此处使用本地独立模式安装的mysql,若使用远程模式授权语句可改为:grant all privileges on . to ‘hive’@‘hdp-01’ with grant option;

5.3 初始化hive 数据库

schematool -initSchema -dbType mysql

在这里插入图片描述

登陆数据库查看

在这里插入图片描述

在这里插入图片描述

5.4 启动并登陆Hive

nohup hive --service metastore &
nohup hive --service hiveserver2 &
hive

在这里插入图片描述
问题:Caused by: java.lang.OutOfMemoryError: unable to create new native thread
原因:mysql启动了过多的线程
解决:ulimit -u 10240
https://www.cnblogs.com/zengkefu/p/5649407.html

6 测试

hive创建一张表
create table tmp_hjl_20190113_1 (id decimal(20,10),name string);

在这里插入图片描述

Mysql:存储Hive表的元数据

在这里插入图片描述

HDFS查看表对应的文件:表数据实际存储在HDFS上
在这里插入图片描述

7 常见问题

参考: https://blog.csdn.net/SunnyYoona/article/details/51648871

7.1 beeline连接失败: User: hadoop is not allowed to impersonate hive

19/01/13 17:55:09 [main]: WARN jdbc.HiveConnection: Failed to connect to hdp-01:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hdp-01:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hadoop is not allowed to impersonate hive (state=08S01,code=0)

解决方案:
修改Hadoop配置文件

vim /opt/hadoop/hadoop-2.9.0/etc/hadoop/core-site.xml 
<property>
  <name>hadoop.proxyuser.hadoop.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hadoop.groups</name>
  <value>*</value>
</property>

说明:
hadoop.proxyuser.XXX.hosts 与 hadoop.proxyuser.XXX.groups 中XXX为异常信息中User:* 中的用户名部分

<property> 
    <name>hadoop.proxyuser.xiaosi.hosts</name> 
    <value>*</value> 
    <description>The superuser can connect only from host1 and host2 to impersonate a user</description>
</property> 
<property> 
    <name>hadoop.proxyuser.xiaosi.groups</name> 
    <value>*</value> 
    <description>Allow the superuser oozie to impersonate any members of the group group1 and group2</description>
</property>

重启hadoop后,重新beeline

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/daoxu_hjl/article/details/86376411