Spark从Hive读取数据再写入HBase样例程序开发思路
场景说明
假定Hive的person表存储用户当天消费的金额信息,HBase的table2表存储用户历史消费的金额信息。
现person表有记录name=1,account=100,表示用户1在当天消费金额为100元。
table2表有记录key=1,cf:cid=1000,表示用户1的历史消息记录金额为1000元。
基于某些业务要求,要求开发Spark应用程序实现如下功能:
根据用户名累计用户的历史消费金额,即用户总消费金额=100(用户当天的消费金额) + 1000(用户历史消费金额)。
上例所示,运行结果table2表用户key=1的总消费金额为cf:cid=1100元。
数据规划
在开始开发应用前,需要创建Hive表,命名为person,并插入数据。同时,创建HBase table2表,用于将分析后的数据写入。
- 将原日志文件放置到HDFS系统中。
- 将导入的数据放置在Hive表里。
首先,确保JDBCServer已启动。然后使用Beeline工具,创建Hive表,并插入数据。
- 创建HBase表。
确保JDBCServer已启动,然后使用Spark-beeline工具,创建HBase表,并插入数据。
开发思路
- 查询Hive person表的数据。
- 根据person表数据的key值去table2表做查询。
- 把前两步相应的数据记录做相加操作。
- 把上一步骤的结果写到table2表。
运行前置操作
安全模式下Spark Core样例代码需要读取两个文件(user.keytab、krb5.conf)。user.keytab和krb5.conf文件为安全模式下的认证文件,需要在FusionInsight Manager中下载principal用户的认证凭证,样例代码中使用的用户为:sparkuser,需要修改为准备好的开发用户。
打包项目
- 将user.keytab、krb5.conf 两个文件上传客户端所在服务器上。
- 通过IDEA自带的Maven工具,打包项目,生成jar包。具体操作请参考在Linux环境中调测Spark应用。
编译打包前,样例代码中的user.keytab、krb5.conf文件路径需要修改为该文件所在客户端服务器的实际路径。例如:“/opt/female/user.keytab”,“/opt/female/krb5.conf”。
- 将打包生成的jar包上传到Spark客户端所在服务器的任意目录(例如“ /opt/female/” )下。
运行任务
进入Spark客户端目录,调用bin/spark-submit脚本运行代码,运行命令分别如下(类名与文件名等请与实际代码保持一致,此处仅为示例):
- 运行Java或Scala样例代码
bin/spark-submit --class com.huawei.bigdata.spark.examples.SparkHivetoHbase --master yarn --deploy-mode client /opt/female/SparkHivetoHbase-1.0.jar
- 运行Python样例程序
- 由于pyspark不提供Hbase相关api,本样例使用Python调用Java的方式实现。将所提供 Java代码使用maven打包成jar,并放在相同目录下,运行python程序时要使用--jars把jar包加载到classpath中。
- 由于Python样例代码中未给出认证信息,请在执行应用程序时通过配置项“--keytab”和“--principal”指定认证信息。
bin/spark-submit --master yarn --deploy-mode client --keytab /opt/FIclient/user.keytab --principal sparkuser --jars /opt/female/SparkHivetoHbasePythonExample/SparkHivetoHbase-1.0.jar /opt/female/SparkHivetoHbasePythonExample/SparkHivetoHbasePythonExample.py