• Ubuntu16.04 和 hadoop2.7.3环境下 hive2.1.1安装部署


    参考文献:

    http://blog.csdn.NET/reesun/article/details/8556078

    http://blog.csdn.Net/zhongguozhichuang/article/details/52702476

    http://blog.csdn.net/huoyuyan/article/details/50769104

    http://blog.csdn.net/u014695188/article/details/54646575

    一、Hive 运行模式

    Hadoop 类似,Hive 也有 3 种运行模式:

    1. 内嵌模式

    将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。

    2. 本地模式

    这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这用就可以支持多会话和多用户连接了。

    3. 远程模式

    此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。

     

     

     

    二、下载安装 Hive

    http://hive.apache.org/downloads.html

     

    选择最后一个链接,是清华大学的资源,在教育网内基本上可以保持每秒M级以上传输。

     

     

     

     

    三、配置系统环境变量

    export HIVE_HOME=/opt/hive-2.1.1
    export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH
    

    四、内嵌模式

    (1)修改 Hive 配置文件

     $HIVE_HOME/conf 对应的是 Hive 的配置文件路径, 该路径下的 hive-site.xml 是 Hive 工程的配置文件。默认情况下,该文件并不存在,我们需要拷贝它的模版来实现:

    cp      hive-default.xml.template      hive-site.xml

     

    hive-site.xml 的主要配置有:

    • hive.metastore.warehouse.dir
      该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。

    • hive.exec.scratchdir
      该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。

     
     
    (2)修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改:

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

    添加配置

    # Set HADOOP_HOME to point to a specific hadoop install directory
    # HADOOP_HOME=${bin}/../../hadoop
    HADOOP_HOME=/opt/hadoop-2.7.3
    
    # Hive Configuration Directory can be controlled by:
    # export HIVE_CONF_DIR=
    export HIVE_CONF_DIR=/opt/hive-2.1.1/conf
    
    # Folder containing extra ibraries required for hive compilation/execution can be controlled by:
    export HIVE_AUX_JARS_PATH=/opt/hive-2.1.1/lib
    
    (3)创建必要目录:
    前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS 是否有这些路径:
    hadoop fs   -ls   / 

    没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。
        $HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hive/warehouse  
        $HADOOP_HOME/bin/hadoop fs -mkdir -p /tmp/hive/  
        hadoop fs -chmod 777 /user/hive/warehouse  
        hadoop fs -chmod 777 /tmp/hive  
    

     (3)修改 io.tmpdir 路径:

     同时,要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir} 字段的 value 即路径(vim下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为 /hello , 再回车即可),你可以自己新建一个目录来替换它,例如 /opt/hive-2.1.1/iotmp

    1. mkdir /opt/hive-2.1.1/iotmp
    2. chmod    777  /opt/hive-2.1.1/iotmp
    3. hive-site.xml 中所有包含 ${system:Java.io.tmpdir}   替换成   /opt/hive-2.1.1/iotmp

     

     全局替换命令 先按Esc键  再同时按shift+:把以下替换命令粘贴按回车即可全局替换

     

     %s#${system:java.io.tmpdir}#/home/hadoop/cloud/apache-hive-2.1.1-bin/iotmp#g

     

     

    (4)运行 Hive

     

     

     

     

    解决办法:

     

    ./bin/schematool        -initSchema        -dbType         derby

     

     

     

     

     

     

     

    如果报错

     

     

     

     

    解决方法:删除  hive-2.1.1-bin目录下metastore_db文件夹

     

    rm -rf metastore_db/ 在初始化:./bin/schematool -initSchema -dbType derby
    重新运行

    ./bin/schematool        -initSchema        -dbType         derby

     

     

     

     

    成功运行

     

     

     

     

     

     

     

     

    五、   本地模式

     

    设置mysql关联hive

    修改配置文件

    ### 创建hive-site.xml文件
    在hive/conf/目录下创建hive-site.xml文件

    <configuration>
    
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>指定JDO驱动类型,这里是mysql</description>
        </property>
    
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://localhost:3306/hiveMetastore?createDatabaseIfNotExist=true</value>
            <description>
                mysql地址,使用的DB名是hiveMetastore, createDatabaseIfNotExist为true表示当hiveMetastore这个DB不存在时,
                会自动创建hiveMetastore
            </description>
        </property>
    
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>XXXXX</value>
            <description>
                mysql账户
            </description>
        </property>
    
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>12345678</value>
            <description>
                mysql密码
            </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 metastore matches with one from Hive jars.  Also disable automatic    
                schema migration attempt. Users are required to manully 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>
    
    </configuration>
    

    如果没有以下部分:

    报错:Caused by: MetaException(message:Version information not found in metastore. )

    报错:缺少mysql jar包

    解决:将其(如mysql-connector-Java-5.1.15-bin.jar)拷贝到$HIVE_HOME/lib下即可。

    报错:

    Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized.   

        Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed,   

        don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)

    解决:

    #数据库的初始化。  

         bin/schematool -initSchema -dbType mysql

    成功运行。

    测试

    创建数据库

    create database db_hive_test;

     

    创建测试表

    use db_hive_test;

    create table student(id int,name string) row format delimited fields terminated by ' ';

     

     

     

     

    加载数据到表中

    新建student.txt 文件写入数据(id,name 按tab键分隔)

    vim student.txt

    1001	zhangsan  
    1002	lisi  
    1003	wangwu  
    1004	zhaoli  
    

     

     

     

     

    load data local inpath '/tmp/student.txt' into table  db_hive_test.student;

     

     

     

     

     

     

    查询表信息

    select * from student;

     

     

     

     

     

     

    查看表的详细信息

    desc formatted student;

     

     

     

     

     

     

     

     

     

    通过ui页面查看创建的数据位置

     

    http://localhost:50070/explorer.html#/user/hive/warehouse/db_hive_test.db

     

     

     

     

     

     

     

     

     

     

     

     

     

    通过Mysql查看创建的表

     

     

     

     

     

     

     

     

     

     

     

     

    查看hive的函数 

     

    show functions;

     

    查看函数详细信息 

    desc function sum;

     

     

     

     

     

     

     


    desc function extended

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    从excel表中生成批量SQL,将数据录入到数据库中
    执行git命令时出现fatal: 'origin' does not appear to be a git repository错误
    小程序获取openid 出现null,{"errcode":40163,"errmsg":"code been used, hints: [ req_id: WNUzlA0105th41 ]"}
    由客户端内部通讯引发的插件化开发的随想和实践
    Prism6下的MEF:基于微软企业库的Cache
    从微信SDK看ProtoBuffer文件的生成
    Prism6下的MEF:添加Logger
    Prism6下的MEF:第一个Hello World
    讲讲Windows10(UWP)下的Binding
    Windows10(UWP)下的MEF
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/6913708.html
Copyright © 2020-2023  润新知