美文网首页我爱编程
Apache Spark整合Hive

Apache Spark整合Hive

作者: Michaelhbjian | 来源:发表于2018-01-13 16:22 被阅读0次

安装hive前提是要先安装hadoop集群,并且hive只需要在NameNode节点集群中安装即可,可以不在DataNode节点的机器上安装。另外还需要说明的是,虽然修改配置文件并不需要你已经把hadoop跑起来,但是本文中用到了hadoop命令,在执行这些命令前你必须确保hadoop是在正常跑着的,而且启动hive的前提也是需要hadoop在正常跑着,所以建议你先将hadoop跑起来在按照本文操作。

1.前提环境

这里需要提前安装好mysql数据库,将mysql数据库作为hive的元数据库。

mysql连接器下载地址:mysql-connector-java-5.1.32-bin.jar

hive数据仓库的下载地址: hive-2.3.2/

2.Hive的安装和配置

2.1配置环境变量

编辑/etc/profile 文件,添加hive的环境变量

image.png

执行以下命令让配置生效:source /etc/profile

2.2使用mysql作为默认的元数据库

mysql-connector-java-5.1.32-bin.jar 驱动包上载Hive的lib目录下:/usr/local/hadoop/apache-hive-2.3.2-bin/lib/

hive/lib/jline-2.12.jar 替换$HADOOP_HOME/share/hadoop/yarm/lib/ ,如果没有替换,运行./bin/hive 命令会出错。

 cp jline-2.12.jar /usr/local/hadoop/hadoop-2.8.2/share/hadoop/yarn/lib/

3.配置hive-site.xml文件

3.1新建hive-site.xml(建议使用touch)

/usr/local/hadoop/apache-hive-2.3.2-bin/conf 目录下新建hive-site.xml,执行下面命令将hive-default.xml.template 复制到hive-site.xml

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

3.2使用hadoop新建HDFS目录

因为在hive-site.xml中有这样的配置

  <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>

所以要在hadoop集群新建/user/hive/warehouse目录,执行命令

cd $HADOOP_HOME #进入Hadoop主目录
bin/hadoop fs -mkdir -p  /user/hive/warehouse #创建目录
bin/hadoop fs -chmod -R 777 /user/hive/warehouse #新建的目录赋予读写权限
bin/hadoop fs -mkdir -p /tmp/hive/#新建/tmp/hive/目录
bin/hadoop fs -chmod -R 777 /tmp/hive #目录赋予读写权限
#用以下命令检查目录是否创建成功
bin/hadoop fs -ls /user/hive
bin/hadoop fs -ls /tmp/hive

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

将下面的配置信息添加到hive-site.xml文件中:

<property>
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://59.68.29.105:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</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>root</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>

3.4修改hive-site.xml临时目录

1、将hive-site.xml文件中的${system:java.io.tmpdir}替换为hive的临时目录例如:/usr/local/apache-hive-2.3.2-bin/bin/tmp/,该目录如果不存在则要自己手工创建,并且赋予读写权限chmod -R 777 tmp/

2、将${system:user.name}都替换为root

image.png

注意:将该配置文件中的所有${system:java.io.tmpdir}${system:user.name} 全部替换掉。

3.修改hive-env.sh文件

同样将hive-env.sh.template 复制到hive-env.sh,添加hadoop的安装目录:

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=/usr/local/hadoop/hadoop-2.8.2

# Hive Configuration Directory can be controlled by:
# export HIVE_CONF_DIR=
export HIVE_CONF_DIR=/usr/local/apache-hive-2.3.2-bin/conf

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
# export HIVE_AUX_JARS_PATH=
export HIVE_AUX_JARS_PATH=/usr/local/apache-hive-2.3.2-bin/lib

4.启动和测试

4.1.对mysql数据库进行初始化

进入到hive的bin 目录,对数据库进行初始化,执行命令:(默认情况下,Hive元数据保存在内嵌的Derby数据库中,只能允许一个会话连接,只适合简单的测试,在实际生产环境中选择mysql作为元数据存储)

schematool -initSchema -dbType mysql

如果出现以下错误的情况:

image.png

上面的是将hive-default.xml.template 的内容复制到hive-default.xml ,现在解决这个问题的方法是直接新建这个hive-default.xml 这个文件,然后将关于mysql的相关配置复制上去即可。

image.png

4.2启动hive

进入hive的bin目录下执行hive的启动脚本命令:./hive

image.png

如果输入SQL语句出现下面错误

image.png

则执行./hive --service metastore &,出现下面页面则表示启动成功:

image.png

启动mysql之后会出现hive数据库(这里不知道会不会出现hive表,我这里是手动创建的Hive数据库

  • mysql>create database hive;
  • grant all on *.* to root@localhost identified by '密码'; 这里的root和密码是和上面的mysql配置是一致的。
  • flush privileges;
image.png

用数据库客户端查看hive数据库中表;

image.png

创建数据库

create database db_hive_test;

use db_hive_test;
image.png

创建测试表

create table student(id int,name string) row format delimited fields terminated by '\t';
image.png

加载数据到表中

/home/hadoop 目录下新建student.txt文件,在该文件中写入数据(id,name 按tab键分隔

image.png
load data local inpath '/home/hadoop/student.txt' into table  db_hive_test.student;
image.png

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

http://59.68.29.105:50070/explorer.html#/user/hive/warehouse/db_hive_test.db
image.png

通过mysql查看创建的表:

select * from TBLS;
image.png

5.Spark SQL整合Hive

5.1新建hive-site.xml文件

在Spark的安装包下的conf下创建一个文件 hive-site.xml,不需要更新到其他的节点,只需要在Master节点有一份hive-site.xml就可以了。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</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>root</value>
        <description>username to use against metastore database</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>NewThread506/</value>
        <description>password to use against metastore database</description>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    //使用Hive的MetaStore,因此需要在Spark中添加其uris
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://master:9083</value>
        <description>Thrift URI for remote metastore.Used by metastore client to connect to                 remote metastore</description>
    </property>
</configuration>

5.2开启Hive的MetaStore服务

在使用Spark SQL CLI之前需要启动Hive的MetaStore。如果数据存放在HDFS文件系统中,还需要启动Hadoop的HDFS服务。使用下面命令可启动hive的MetaStore并在后台运行。

nohup hive --service metastore > metastore.log 2>&1 &

5.3启动spark-shell

启动spark-shell之前,先spark集群start-all.sh

import org.apache.spark.sql.hive.HiveContext
val hc = new HiveContext(sc)
hc.sql("show databases").show
image.png
hc.sql("use db_hive_test")
hc.sql("select * from student").show
image.png

6.参考资料

https://www.jianshu.com/p/83b2f9cb3d33

hive2.1.1 安装部署

https://www.cnblogs.com/kinginme/p/7233315.html

http://blog.csdn.net/jssg_tzw/article/details/72354470

搭建Hive所遇到的坑

相关文章

网友评论

    本文标题:Apache Spark整合Hive

    本文链接:https://www.haomeiwen.com/subject/ywicoxtx.html