Apache Spark整合Hive

安装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所遇到的坑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342