欢迎投稿

今日深度:

安装配置hive,

安装配置hive,


安装hive:

下载hive,解压,直接可以运行hive。

hive提供了按照HQL语法的格式查询数据的功能。hive将数据和元数据分开存储。

元数据存储在关系型数据库中,默认是derby数据库,但是不支持并发,同一时刻只能有一个程序连接derby的元数据库。

数据存储在数据文件中,默认为纯文本文件。可以指定压缩和序列号类,比如spark默认存为parquet文件。数据文件存储位置可以配置:如存在hdfs上或本地文件系统。

下面我们配置用mysql存储元数据,并将数据文件存在hdfs上(spark默认创建的库为本地库):

安装mysql

centos 7中yum install mysql-server失败,mysql的替代数据库mariadb,mariadb和mysql的API和命令行完全兼容。
yum install mariadb-server mariadb
安装完成后配置root密码,并登录:
mysqladmin -uroot -p password "password"
mysql -uroot -p
增加一个hive用户,并创建一个hivedb库来存储hive元数据:
create database hivedb DEFAULT CHARACTER SET latin1;
GRANT ALL ON hivedb.* TO 'hive'@'%' IDENTIFIED BY 'Hive-123'; 
flush privileges;

注意hive只支持mysql的latin1编码的元数据表,如果是utf-8的在创建表时会报错(spark查看元数据直接报错)。

至此,数据库配置完成。

  • 查看数据库和表编码:
show create database hivedb;
show create table DBS;

更改hive配置文件

将hive-site.xml放入$HIVE_HOME/conf,并把mysql的jdbc驱动jar包放入$HIVE_HOME/lib下。
hive-site.xml内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!--  默认的元数据存储为derby数据库
    <property>
        <name>javax.jdo.option.ConnectionURL</name>  
        <value>jdbc:derby:/root/tmp/metastore_db;create=true</value>  
    </property>  
    <property>  
        <name>javax.jdo.option.ConnectionDriverName</name>  
        <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
    </property>
 -->   

<!-- 使用 mysql 数据库-->
    <property>  
        <name>javax.jdo.option.ConnectionURL</name>  
        <value>jdbc:mysql://localhost/hivedb?createDatabaseIfNotExist=true</value>  
    </property>  
  
    <property>  
        <name>javax.jdo.option.ConnectionDriverName</name>  
        <value>com.mysql.jdbc.Driver</value>  
    </property>  
  
    <property>  
        <name>javax.jdo.option.ConnectionUserName</name>  
        <value>hive</value>  
    </property>  
  
    <property>  
        <name>javax.jdo.option.ConnectionPassword</name>  
        <value>Hive-123</value>  
    </property> 

<!-- 默认数据文件存储位置,位于hdfs文件系统。配置了此项spark建库就不会在本地了。hive默认就为这个位置,但是hive on spark要显示配置 -->
<!-- 另外可以通过配 hive.exec.scratchdir来指定临时文件目录,这里没有配-->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>hdfs://master:9000/user/hive/warehouse/</value>
    </property>

<!-- 官网推荐配置 -->    
    <property>
        <name>datanucleus.autoStartMechanism</name>
        <value>SchemaTable</value>
    </property>

<!-- 版本校验,spark2.3.0支持版本为1.2.0,所以若用schematool初始化表需要指定1.2.0版本,或这里直接配置不校验false-->
<!-- schematool -dbType mysql -initSchemaTo 1.2.0 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>

<!--自动创建表,但是hive表需要是latin1编码,要求我们手动建立hivedb并指定默认编码为latin1,否则若是utf-8库会自动创建utf-8表,然后报错-->
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
    </property>
    
</configuration>    

远程客户端访问hive:

如果用hive客户端远程访问其他机器的hive服务,mysql也在其他机器。则这样配置hive-site.xml。

    <property>  
        <name>hive.metastore.local</name>  
        <value>false</value>  
    </property>  
  
    <property>  
        <name>hive.metastore.uris</name>  
        <value>thrift://192.168.0.101:9083</value>  
    </property>

并要求远程机器启动元数据服务:

hive --service metastore  &  # &后台启动

初始化元数据库、表:

$HIVE_HOME/bin/schematool -dbType mysql -initSchema  #若配了datanucleus.schema.autoCreateAll可以不用执行,但要注意编码,此命令默认创建utf-8库,latin1表。
schematool -dbType mysql -initSchemaTo 1.2.0  #指定版本,若不指定需要版本一致,或将hive.metastore.schema.verification配置为false

文档:http://www.cloudera.com/documentation/cdh/5-1-x/CDH5-Installation-Guide/cdh5ig_hive_schema_tool.html

www.htsjk.Com true http://www.htsjk.com/hive/33921.html NewsArticle 安装配置hive, 安装hive: 下载hive,解压,直接可以运行hive。 hive提供了按照HQL语法的格式查询数据的功能。hive将数据和元数据分开存储。 元数据存储在关系型数据库中,默认是derby数...
相关文章
    暂无相关文章
评论暂时关闭