Hive环境搭建+读取es数据到内部表

场景:

        做的项目需要功能优化,需要比较同样数据,从hive中查询和从es中查询哪个效率更高。于是需要把es中某个索引的数据全量同步到hdfs上,通过hive查询hdfs数据来比较二者效率。

第一步:前期准备+hive下载

        由于hive需要查询hdfs中数据,所以首先需要进行hadoop环境的搭建,hadoop搭建流程我参考的教程如下:

        Hadoop集群搭建教程(详细)_fanxin_i的博客-CSDN博客_hadoop集群搭建

        而搭建hive,如果连接的是本地数据库,则还需要进行mysql的搭建。mysql的搭建流程我参考的教程如下:

        linux安装mysql教程 - 番薯大大 - 博客园

        而后就是进行hive的下载和搭建了,下载之前一定要确认一下hadoop和hive的对应版本,我下载的hadoop版本是2.7.7,然后hive对应下载的版本是2.3.9。hive下载地址如下:

        http://mirror.bit.edu.cn/apache/hive/

        为了方便我这里把解压出来的文件夹重命名为了hive,方便后续操作

第二步:hive搭建

        由于我是linux下部署,因此需要提前设置一下环境变量,路径:/etc/profile,添加如下代码:

export HIVE_HOME=填写hive的路径
export PATH=$PATH:$HIVE_HOME/bin

        然后执行命令:source /etc/profile

        也有人修改环境变量是在vim ~/.bashrc下,二者区别可以根据实际情况来

        进入到hive文件夹下的conf文件夹,把所有后缀有.template的文件,都把这个后缀移除掉,然后hive-default.xml移除后缀后,需要修改名为hive-site.xml 。

        编辑hive-site.xml ,现在hive-site.xml这个文件因为未去掉后缀之前是个模板文件,所以里面配置项很多,我只用到了如下几项:

       <property>
			<name>hive.exec.scratchdir</name>
			<value>hdfs下某个路径</value>
       </property>
       <property>
			<name>hive.querylog.location</name>
			<value>hdfs下某个路径</value>
      </property>    
      <property>
			<name>javax.jdo.option.ConnectionURL</name>
			<value>jdbc:mysql://数据库地址:3306/数据库名?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionDriverName</name>
			<value>com.mysql.jdbc.Driver</value>  com.mysql.cj.jdbc.Driver
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionUserName</name>
			<value>root</value>//数据库用户名
      </property>
      
      <property>
			<name>javax.jdo.option.ConnectionPassword</name>
			<value>123</value>   //数据库密码
      </property>	

        如果要配置其他的配置项,需要把其中${system:java.io.tmpdir}都替换成真实目录,不然会报错。

        修改hive-env.sh,增加如下代码:

export JAVA_HOME=jdk路径
export HADOOP_HOME=hadoop路径
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=hive路径
export HIVE_CONF_DIR=$HIVE_HOME/conf
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib

        由于需要连接数据库,因此最后一步就是要下载并把mysql-connector-java的驱动jar包放入hive的lib下,注意驱动jar包版本得和数据库版本一致,我mysql版本是8,因此驱动下载的版本也得是8

第三步:hive运行及排错

        进入hive文件夹下的bin目录下,运行./hive,如果运行出错,可以先去conf目录下的hive-log4j2.properties配置文件,查看property.hive.log.dir配置项,查看log打印的路径,然后去该路径下看详细日志

第四步:查询es中数据创建外部表

        运行hive后,先下载jar包:elasticsearch-hadoop-2.2.0.jar。然后执行命令:

        hive> add jar file:///home/hadoop/xuguokun/elasticsearch-hadoop-2.2.0.jar;

        然后创建外部表:

create external table ext_table(
    'id' bigint,
    'title' string,
    ...
)
stored by 'org.elasticsearch.hadoop.hive.EsStorageHandler'
TBLPRORERTIES(
    'es.nodes'='es地址',
    'es.port'='es端口',
    'es.index.auto.create'='false',
    'es.resource'='es索引',
    'es.nodes.warn.only'='true',
    'es.net.http.auth.user'='用户名',
    'es.net.http.auth.pass'='密码',
    'es.index.read.missing.as.empty'='false'
);

        此时,就可以通过select这个外部表来间接查询到es的数据了。

        创建内部表:

create table in_table(
    和外部表中字段保持一致
);

        最后把外部表数据导入内部表,等着就行了

insert overwrite table in_table select * from ext_table;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值