hive的环境搭建

因为hive是基于hadoop的,所以一定要有hadoop的平台支撑:
hadoop分布式集群搭建:https://blog.51cto.com/14048416/2341491

1. 内嵌Derby版本:

安装步骤

  • 上传安装包:apache-hive-2.3.2-bin.tar.gz
  • 解压安装包:tar -zxvf apache-hive-2.3.2-bin.tar.gz -C /application
  • 进入进入到 bin 目录,运行 hive 脚本:./hive
  • 初始化元数据库:./schematool -dbType derby -initSchema
  • 最终测试进入hive后:hive>show tables;

安装时的常见错误

  • Error: FUNCTION ‘NUCLEUS_ASCII’ already exists. (state=X0Y68,code=30000),这表示metastore_db已经存在,在相应的进入hive的目录中删除metastore_db,然后重新初初始化元数据即可。
  • Terminal initialization failed; falling back to unsupported。这是因为hadoop(/root/apps/hadoop-2.6.5/share/hadoop/yarn/lib)集群的 jline-0.9.94.jar 包版本 过低,替换成 hive/lib 中的 jline-2.12.jar 包即可,记住:所有 hdfs 节点都得替换。

注意:使用Derby方式部署的hive,在哪个工作空间进入hive,就会在哪个工作空间创建一个derby.log metastore_db,元数据。即元数据跟着空间跑,如果下次不在这个工作空间进入,则无法访问上传存储的数据。因此这也是使用Derby方式部署的hive的弊端。

2. 外置MySQL版本:

首先这里需要MySQL的服务,在集群的任意节点上配置MySQL。
安装步骤

  • 修改hive的配置文件:hive-site.xml
    <configuration>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop02:3306/hivedb?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
    <!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 位 localhost -->
    </property>
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    Stay hungry Stay foolish -- http://blog.csdn.net/zhongqi2513
    <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>root</value>
    <description>password to use against metastore database</description>
    </property>
    </configuration>
    <!--指定hive数据仓库的数据存储在hdfs上的目录:-->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    </property>
  • 把MySQL的驱动包,放置在hive/lib (mysql-connector-java-5.1.40-bin.jar)
  • 配置hive的环境变量
    export HIVE_HOME=/home/hadoop/apps/apache-hive-1.2.1-bin
    export PATH=$PATH:$HIVE_HOME/bin
  • 验证hive的安装:hive -help
  • 初始化元数据:schematool -dbType mysql -initSchema
  • 启动hive的客户端:hive
    注意:当配置好hive后,会在MySQL中生成57张表:
    DBS:管理库的表:

hive的环境搭建
TBLS:管理表的表
hive的环境搭建
COLUMNS_V2:管理字段的表
hive的环境搭建

3. 连接hive的客户端:

  • 直接使用hive命令,进入hive进行操作
  • 把hive启动成为一个后台服务:nohup hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &,然后使用beeline连接。
    • [hadoop hadoop01@~]$beeline # 连接hive
    • hadoop01>!connect jdbc:hive2://hadoop01:10000 #连接客户端连接hive仓库
    • 或者 [hadoop hadoop01@~]$beeline -u jdbc:hive2://hadoop01:10000 -n hadoop
      但是使用beeline连接通常会出现错误:
      Connecting to jdbc:hive2://hadoop01:10000
      Enter username for jdbc:hive2://hadoop01:10000: hadoop
      Enter password for jdbc:hive2://hadoop01:10000: ******
      18/10/15 16:30:37 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop01:10000
      Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop01: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 hadoop (state=08S01,code=0

      报这个错误的原因不是hive本身,而是hive底层所依赖的hdfs的权限管理提高了,hadoop集群报出来的。必须做权限认证。
      解决方法

  • 停止集群:stop-dfs.sh && stop-yarn.sh
  • 修改hadoop的hdfs-site.xml配置文件:加入:
    <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property>
  • 修改hadoop的core-site.xml文件,加入:
    <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>   
    </property>
    <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
    </property>
    <!--core-site.xml这两个配置的name中的第二个hadoop是你的用户,如果不是hadoop需要修改-->
  • 重新启动hadoop集群,重新启动hive的 server,然后使用beeline连接即可。

    4.用户接口的操作

     hive的命令分成两大类:
       - 进入hive客户端之后的操作:
         – query:正常的操作语句(查询+库表的DDL操作)
         – !linux命令:在hive客户端中执行Linux命令(只能执行部分)
         – 在hive客户端中执行hadoop相关命令

    hive>!hadoop  fs -ls / ;   (以Linux命令的形式执行)   慢
    hive>dfs -ls  /;    使用当前的hive客户端的jvm进程执行   快

    常见操作有:

    hive>quit;    #退出hive的客户端
    hive>set key=value;     #设置hive的参数
    hive>add jar xxx.jar   #临时的向hive添加jar包
    hive>add file          #向hive中的classpath中添加file
    hive>list   jars   #查看添加的jar
    hive>source  file   #执行一个脚本(这个脚本时存储在linux上)

   - 进入hive客户端之前的操作:

[hadoop hadoop01@~]$ hive -e 'hql' #在linux下执行hive语句
[hadoop hadoop01@~]$ hive -f linux中的hql脚本  #在Linux下执行hql脚本
[hadoop hadoop01@~]$ hive -h hiveconf   key=value # 进入hive客户端,并初始化参数(只能设置一个)
[hadoop hadoop01@~]$ hive -i linux参数文件  #进入,hive并执行参数文件中的所有参数设置
[hadoop hadoop01@~]$ hive -v #输出结果打印到控制台
[hadoop hadoop01@~]$ hive -S #不打印日志,经常和-e参数使用
[hadoop hadoop01@~]$ hive -S -e 'hql' >> file  #将查询到的结果输出到Linux文件中

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/192647.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

相关推荐

发表回复

登录后才能评论