Hive部署及整合Hbase和pyspark

Hive部署及整合Hbase

1.软件版本信息

hadoop: 2.8.3
hbase: 1.0.0
hive: 2.3.4
mysql:5.7.24

2.准备mysql

# mysql 主要用于存储hive表的元数据,不会存储具体的数据

2.1 创建名称为hive的数据库

2.2 修改数据库编码格式为 latin1 ,排序规则为 latin1_bin

3. hive配置

--我将下载好的tar.gz包解压到 /home/etc/这个目录下,成为 /home/etc/apache-hive-2.3.4/

3.1 复制 /home/etc/apache-hive-2.3.4/conf/ 目录下 hive-default.xml.template 一份命名为 hive-site.xml

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

3.2 修改内容

<!--根据name找到如下的配置并修改-->

<!--mysql连接的地址-->
<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>

<!--mysql连接DiverName-->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
</property>

<!--mysql连接用户名-->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>zabbix</value>
    <description>username to use against metastore database</description>
</property>

<!--mysql连接密码-->
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    <description>password to use against metastore database</description>
</property>

<!--io临时目录,需手动创建此目录-->
<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/home/etc/apache-hive-2.3.4/iotmp</value>
    <description>Local scratch space for Hive jobs</description>
</property>

<!--io临时目录,同上目录-->
<property>
    <name>hive.querylog.location</name>
    <value>/home/etc/apache-hive-2.3.4/iotmp</value>
    <description>Location of Hive run time structured log file</description>
</property>

<!--io临时目录,同上目录-->
<property>
    <name>hive.downloaded.resources.dir</name>
    <value>/home/etc/apache-hive-2.3.4/iotmp</value>
    <description>Temporary local directory for added resources in the remote file system.         </description>
</property>

3.3 创建 iotmp目录

在 apache-hive-2.3.4目录下创建iotmp目录

3.4 配置环境变量

修改 ~/.bash_profile(用户环境变量)

# 1.配置HIVE_HOME
export HIVE_HOME=、home/etc/apache-hive-2.3.4
# 2.将HIVE_HOME加到PATH环境变量中
export PATH=$PATH:$HIVE_HOME/bin
# 3.重新加载环境变量
source ~/.bash_profile

3.5 导入hbase的jar包和mysql的驱动包

# 1.放入mysql驱动包 到 /home/etc/apache-hive-2.3.4/lib/ 下
mysql-connector-java-5.1.9.jar
# 2.放入hbase相关包 到 /home/etc/apache-hive-2.3.4/lib/ 下
进入 hbase的lib目录下
cp hbase-protocol-1.0.0.jar /home/etc/apache-hive-2.3.4/lib/
cp hbase-server-1.0.0.jar /home/etc/apache-hive-2.3.4/lib/
cp hbase-client-1.0.0.jar /home/etc/apache-hive-2.3.4/lib/
cp hbase-common-1.0.0.jar /home/etc/apache-hive-2.3.4/lib/
cp hbase-common-1.0.0-tests.jar /home/etc/apache-hive-2.3.4/lib/

3.6 在hive中加入hbase的配置

修改 /home/etc/apache-hive-2.3.4/conf/ 下的 hive-site.xml配置

<!--file下的jar路径加入到path中-->
<property>
    <name>hive.reloadable.aux.jars.path</name>
    <value>
        file:///home/etc/apache-hive-2.3.4/lib/hive-hbase-handler-2.3.4.jar,
        file:///home/etc/apache-hive-2.3.4/lib/hbase-protocol-1.0.0.jar,
        file:///home/etc/apache-hive-2.3.4/lib/hbase-server-1.0.0.jar,
        file:///home/etc/apache-hive-2.3.4/lib/hbase-client-1.0.0.jar,
        file:///home/etc/apache-hive-2.3.4/lib/hbase-common-1.0.0.jar,
        file:///home/etc/apache-hive-2.3.4/lib/hbase-common-1.0.0-tests.jar,
        file:///home/etc/apache-hive-2.3.4/lib/zookeeper-3.4.6.jar,
        file:///home/etc/apache-hive-2.3.4/lib/guava-14.0.1.jar
    </value>
    <description>
      The locations of the plugin jars, which can be a comma-separated folders or jars. Jars can be renewed
      by executing reload command. And these jars can be used as the auxiliary classes like creating a UDF or SerDe.
    </description>
</property>

<!--防止启动时报MissingTableException:Required table missing : "VERSION" in Catalog ""
Schema "". DataNucleus requires this table to perform its persistence operations-->
<property>
    <name>datanucleus.schema.autoCreateAll</name>
    <value>true</value>
    <description>Auto creates necessary schema on a startup if one doesn't exist</description>
</property>

4.启动hive

4.1 交互式启动

启动一个hive交互shell,在任意地方输入hive即可启动

set hive.cli.print.current.db=true; (让提示符显示当前库)
set hive.cli.print.header=true;(显示查询结果时显示字段名称)

4.2 启动hive服务

在 /home/etc/apache-hive-2.3.4/bin/目录下

hiveserver2 -hiveconf hive.root.logger=DEBUG,console

或者后台启动

hiveserver2 1>/dev/null 2>&1 &

5.hive建表

5.1 创建hive表的同时,创建hbase的表

在hive交互式环境下执行

# Hive中的表名tbl_name
# 指定存储处理器
# 声明列族,列名
# hbase.table.name 声明HBase表名, 为可选属性默认与Hive的表名相同, 
# hbase.mapred.output.outputtable 指定插入数据时写入的表, 如果以后需要往该表插入数据就需要指定该值
# key为rowkey,cf1为列族,val为列
CREATE TABLE tbl_name(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "tbl_name", "hbase.mapred.output.outputtable" = "tbl_name"); 

5.2 根据hbase表创建hive表

在hive交互式环境下执行

# 现在hbase中存在一个表名为 JIAYUAN ,有一个列族为 body
# 列有userId,url,deviceId,type,platId,channelId,citycode,req,res,time
# EXTERANL代表为hbase的外部表
# jiayuan_table1为hive中的表名

CREATE EXTERNAL TABLE jiayuan_table1 (
rowkey string,
userId string,
url string,
deviceId string,
type string,
platId string,
channelId string,
citycode string,
req string,
res string,
time string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,body:userId,body:url,body:deviceId,body:type,body:platId,body:channelId,body:citycode,body:req,body:res,body:time")
TBLPROPERTIES ("hbase.table.name" = "JIAYUAN");

查看数据

show tables;查看所有的表

select * from jiayuan_table1 limi 1; 从表中查询一条数据

hive> select * from jiayuan_table1 limit 1;
OK
8c64a436-afb7-4d91-8e24-726e7437dc791604887326065       8c64a436-afb7-4d91-8e24-726e7437dc79    /house/search-keyword           GET     KM      ios     NULL    {"searchType":"forsale","cityCode":"530100","keyword":"j"}   {"code":"hlsp-err-02","data":[],"errMsg":"关键词字数不少于2个字"}       1604887326065
Time taken: 3.282 seconds, Fetched: 1 row(s)

6.pyspark 连接 hive

6.1 迁移jar包

在 /home/etc/apache-hive-2.3.4/lib/ 里 找到 hive-hbase-handler-2.3.4.jar 包
放入 spark 文件夹下的 jars 目录里
否则会在读取 hive 表数据时报如下错误
# java.lang.ClassNotFoundException: org.apache.hadoop.hive.hbase.HBaseStorageHandler

6.2 修改配置文件

修改 /home/etc/apache-hive-2.3.4/conf/hive-site.xml

<!--host为hive服务器的地址,9083为默认的端口-->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://host:9083</value>
    <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
  </property>

6.3 迁移配置文件

将/home/etc/apache-hive-2.3.4/conf/hive-site.xml
复制一份到 spark目录下的conf文件夹内

6.4 启动服务

# 1.启动metastore服务
hive --service metastore
# 2.启动hive服务
hiveserver2 -hiveconf hive.root.logger=DEBUG,console

6.5 pyspark 访问

from pyspark.sql import SparkSession

# config中配置的即为6.2修改配置文件的地址
# enableHiveSupport,开启hive支持
spark = SparkSession\
    .builder\
    .appName('map-search-list')\
    .config("hive.metastore.uris", "thrift://128.196.216.16:9083")\
    .enableHiveSupport()\
    .getOrCreate()
 
# 展示所有表
spark.sql('show tables').show()
hive_database = "default"             #  要操作的数据库
hive_table = "jiayuan_table1"             #  要操作的数据表
hive_read_sql = "select * from {}.{}".format(hive_database, hive_table)
df = spark.sql(hive_read_sql) #default.jiayuan_table1
df.show()
print('读取hive完成')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351