spark hbase shc基本使用

article/2025/10/29 23:31:20

shc测试环境的搭建参考:
spark读写HBase之使用hortonworks的开源框架shc(一):源码编译以及测试工程创建

读写HBase需要两个核心的元素:

  • 用户描述数据结构的schema字符串
  • 与schema字符串相对应的实体类

1. 定义schema字符串

object Catalog {val schema = s"""{|   "table":{"namespace":"default", "name":"test1", "tableCoder":"PrimitiveType"},|   "rowkey":"key",|   "columns":{|       "col0":{"cf":"rowkey", "col":"key", "type":"string"},|       "col1":{"cf":"cf1", "col":"col1", "type":"boolean"},|       "col2":{"cf":"cf2", "col":"col2", "type":"double"},|       "col3":{"cf":"cf3", "col":"col3", "type":"float"},|       "col4":{"cf":"cf4", "col":"col4", "type":"int"},|       "col5":{"cf":"cf5", "col":"col5", "type":"bigint"},|       "col6":{"cf":"cf6", "col":"col6", "type":"smallint"},|       "col7":{"cf":"cf7", "col":"col7", "type":"tinyint"},|       "col8":{"cf":"cf8", "col":"col8", "type":"byte"}|   }|}""".stripMargin}

schema字符串说明:

2. 定义与schema字符串对应的实体类

case class HBaseRecord(col0: String,  // sql: stringcol1: Boolean, // sql: booleancol2: Double, // sql: doublecol3: Float, // sql: floatcol4: Int, // sql: intcol5: Long, // sql: bigintcol6: Short, // sql: smallintcol7: Byte, // sql: tinyintcol8: Array[Byte]) // sql: byteobject HBaseRecord {def apply(i: Int): HBaseRecord = {HBaseRecord(i + "",i % 2 == 0,i.toDouble,i.toFloat,i,i.toLong,i.toShort,i.toByte,(i + "").getBytes("UTF-8"))}}

3. 写数据到HBase表完整代码

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.execution.datasources.hbase.HBaseTableCatalog/*** Author: YangYunhe* Description: * Create: 2018/8/17 12:54*/
object WriteHBase {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("WriteHBase").getOrCreate()val sc = spark.sparkContextval sqlContext = spark.sqlContextimport sqlContext.implicits._// 模拟一批数据val data = (0 to 9).map(HBaseRecord(_))// 写数据sc.parallelize(data).toDF.write.options(Map(HBaseTableCatalog.tableCatalog -> Catalog.schema, HBaseTableCatalog.newTable -> "5")).format("org.apache.spark.sql.execution.datasources.hbase").save()spark.stop()}}

说明:

Map(HBaseTableCatalog.tableCatalog -> Catalog.schema, HBaseTableCatalog.newTable -> "5")

这个代码意味着HBase表是不存在的,也就是我们在schema字符串中定义的"test1"这个表不存在,程序帮我们自动创建,5是region的个数,如果你提前创建好了表,那么这里的代码是这样的:

Map(HBaseTableCatalog.tableCatalog -> Catalog.schema)

当表存在的时候,数据会追加进去。

执行完以上程序后,检查一下hbase表中的内容:

hbase(main):003:0> scan 'test1'
ROW                                         COLUMN+CELL                                                                                                                 0                                          column=cf1:col1, timestamp=1534732543615, value=\xFF                                                                        0                                          column=cf2:col2, timestamp=1534732543615, value=\x00\x00\x00\x00\x00\x00\x00\x00                                            0                                          column=cf3:col3, timestamp=1534732543615, value=\x00\x00\x00\x00                                                            0                                          column=cf4:col4, timestamp=1534732543615, value=\x00\x00\x00\x00                                                            0                                          column=cf5:col5, timestamp=1534732543615, value=\x00\x00\x00\x00\x00\x00\x00\x00                                            0                                          column=cf6:col6, timestamp=1534732543615, value=\x00\x00                                                                    0                                          column=cf7:col7, timestamp=1534732543615, value=\x00                                                                        0                                          column=cf8:col8, timestamp=1534732543615, value=0                                                                           1                                          column=cf1:col1, timestamp=1534732543615, value=\x00                                                                        1                                          column=cf2:col2, timestamp=1534732543615, value=?\xF0\x00\x00\x00\x00\x00\x00......

说明:程序本地执行会报以下错误

java.lang.IllegalArgumentException: Pathname /C:/Users/bonc/AppData/Local/Temp/spark-9fa1e56c-ce87-43e8-a936-f947b62e1af5/outputDataset/.spark-staging-5 
from C:/Users/bonc/AppData/Local/Temp/spark-9fa1e56c-ce87-43e8-a936-f947b62e1af5/outputDataset/.spark-staging-5 is not a valid DFS filename.

这是因为本地运行把临时文件夹创建在本地,而删除临时文件夹时认为这个文件夹是一个HDFS的路径,所以报错,这个错误不影响读写数据,当在集群上跑这个程序就不会报错

4. 从HBase表读数据完整代码

import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.execution.datasources.hbase.HBaseTableCatalog/*** Author: YangYunhe* Description: * Create: 2018/8/20 10:41*/
object ReadHBase {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("ReadHBase").master("local").getOrCreate()val sc = spark.sparkContextval sqlContext = spark.sqlContextimport sqlContext.implicits._val df: DataFrame = sqlContext.read.options(Map(HBaseTableCatalog.tableCatalog -> Catalog.schema)).format("org.apache.spark.sql.execution.datasources.hbase").load()df.createOrReplaceTempView("test1")spark.sql("select * from test1").show()spark.stop()}}

执行结果如下:

+----+-----+----+----+----+----+----+----+----+
|col0| col1|col2|col3|col4|col5|col6|col7|col8|
+----+-----+----+----+----+----+----+----+----+
|   0| true| 0.0| 0.0|   0|   0|   0|   0|  48|
|   1|false| 1.0| 1.0|   1|   1|   1|   1|  49|
|   2| true| 2.0| 2.0|   2|   2|   2|   2|  50|
|   3|false| 3.0| 3.0|   3|   3|   3|   3|  51|
|   4| true| 4.0| 4.0|   4|   4|   4|   4|  52|
|   5|false| 5.0| 5.0|   5|   5|   5|   5|  53|
|   6| true| 6.0| 6.0|   6|   6|   6|   6|  54|
|   7|false| 7.0| 7.0|   7|   7|   7|   7|  55|
|   8| true| 8.0| 8.0|   8|   8|   8|   8|  56|
|   9|false| 9.0| 9.0|   9|   9|   9|   9|  57|
+----+-----+----+----+----+----+----+----+----+

 


http://chatgpt.dhexx.cn/article/vRfHGCkM.shtml

相关文章

使用SHC命令工具加密Shell脚本

问题:如何在Linux环境中加密shell 脚本 应用场景: 1.当shell脚本中包含密码,不希望其他人查看到shell脚本中的密码等信息,可以安装使用SHC工具进行加密。 安装SHC 系统环境:Centos7 yum -y install shc创建一个she…

Spark读写HBase(主要讲解SHC的使用)

前言 Spark读写HBase本身来说是没啥可以讲的,最早之前都是基于RDD的,网上的资料就太多了,可以参考: 参考链接1 参考链接2 其实都一样,后来有了Hortonworks公司的研发人员研发了一个Apache Spark - Apache HBase Connector&#x…

shc将shell脚本转成二进制文件

最近在做一个项目,需要把shell脚本自定拷贝到目标客户端中执行,但是并不想让用户知道脚本的源码,于是采用shc对shell脚本进行处理 首先装个wget工具 yum -y install wget下载 wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.…

Shell脚本加密工具——Shc

Linux下的shell脚本用途广泛,经常包含IP、Pwd等关键信息,可读可写的特点很容易造成信息泄露,导致严重后果。基于这些原因,对脚本实施加密便变得很有必要。本文介绍的shc便是这样的一款加密工具。 1,下载安装 下载地址…

SHC加密sh脚本

SHC是一个将bash等脚本打包成二进制文件执行的工具,由于其执行脚本的方式不需要脚本文件落地,且在打包的二进制文件中加密脚本内容,在静态文件中没有脚本的痕迹,很多恶意文件利用该工具完成恶意行为,常规的恶意软件检测也难以判黑。 使用举例 生成二进制bin文件的命令:…

linux上shc下载和安装

安装好wget,有网直接下载即可 wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz下载后解压 tar zxf shc-3.8.7.tgz安装gcc yum install gcc -y进入目录 gcc shc-3.8.7.c -o shc将命令移动到根bin下 mv shc /bin安装结束

shc加密shell脚本

shc的官网下载地址http://www.datsi.fi.upm.es/~frosal/sources/ shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、 密码等不希望公开的问题。 如果你的shell脚本包含了敏感的口令或者…

shell脚本加密工具—shc

Shell脚本中包含大量信息,其中还有一些敏感信息,如用户名,密码,路径,ip等,这些信息在保存或运行时很容易就会泄露,所以需要对Shell脚本进行加密。 Shc是一个加密Shell脚本的工具,它的…

shc

2019独角兽企业重金招聘Python工程师标准>>> 1. shc是什么? shc是一个可以将shell script转化为可执行文件的工具, 默认一个shell script文件经过工具处理后有另外两个文件.x和.x.c文件, 其中.x文件可执行, 而.x.c文件是其源码. 需要注意的是这个工具不是编译, shc…

shell脚本shc加密解密

一、shc加密 #shc编译安装 #软件安装包地址:http://www.datsi.fi.upm.es/~frosal/sources/ tar xvfz shc-3.8.7.tgz cd shc-3.8.7 make #验证shc是否正确安装 ./shc -v #加密命令 shc -T -f a.sh #加密后生成的文件 #a.sh.x是加密后的可执行的二进制文件 #a.sh.x.c…

如何使用SHC加密Shell脚本

导读如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell脚本。SHC是指:Shell脚本编译器(Shell Script Compiler)。…

计算机类SCI期刊IF排名

数据基于最新的(2021)科睿唯安数据库,计算机科学及人工智能方向。 1-10名: 11-20名:

爱思唯尔计算机期刊排名,2017影响因子高增长爱思唯尔物理期刊推荐

原标题:2017影响因子高增长爱思唯尔物理期刊推荐 爱思唯尔Elsevier凭借出版高质量物理学期刊百余年的经验,能敏锐发现物理学领域的需求变化,帮助物理学家们脱颖而出,逐步建立完善他们的职业生涯。爱思唯尔物理期刊团队的目标很简单…

计算机中运行Xbrowser,丢失msvcr110.dll

删除那些向文件夹添加dll文件的说法。直接下载两个版本的文件安装即可: 官方下载地址

linux xbrowser 安装包,xmanager安装包

xmanager安装包是一款专门应用于远程遥控的专业软件。使用xmanager安装包用户们就可以对争的同意的设备来远程遥控,对xmanager安装包感兴趣那就快来下载吧。 xmanager安装包介绍 1、一款功能强大、使用方便的会话管理工具,主要供网管使用。 2、可以轻松连…

使用 Xbrowser4远程连接到 CentOS 7

2019独角兽企业重金招聘Python工程师标准>>> 将 gdm 切换到 lightdm 打开终端,切换root帐号 # su - 2.安装 lightdm # yum install lightdm 3.配置 lightdm,如果不存在,则创建之 # vi /etc/lightdm/lightdm.conf [XDMCPServer] e…

linux桌面网络连接是个X,Xbrowser如何运行多个X桌面

Xbrowser的用户界面非常直观。在Xbrowser中,可以使用X显示器控制协议(XDMCP)浏览或连接远程的UniX/LinuX机器。本集就同大家讲讲如何使用Xbrowser运行多个X桌面。 打开多个XDMCP会话的具体操作: 1、运行Xbrowser,Xbrowser中列出了所有连接的主…

【Xmanager】Xbrowser-Xstart远程访问RHEL5.3配置

转自http://www.throwexcept.com/article/1417030564765.html 用Xstart连接Linux远程桌面有一个好处,服务器端不用做什么设置,开启SSH即可。 服务器要有桌面环境和X Window。 用XDMCP连接,服务器端得做一些配置,麻烦。 开始菜单 -…

使用Xmanager - Xbrowser打开远程最小化方式安装的CentOS 7.6的图形化界面

默认开机后进入命令提示符界面: 如果需要使用图形界面,可执行如下操作: 1、关闭CentOS 7.6的firewalld防火墙,或打开177端口 2、安装桌面环境: # yum -y groupinstall "X Window System" # yum -y install g…

【原创】利用xbrowser进行远程连接

1.首先保证本机与目的机能够ping通,这是前提。 确定能够连通后,打开xbrower。 2.邮件点击空白,选择new->XDMCP Session。 3.弹出的属性卡中,在session中填入会话名称,在Host中填入目的机的ip。 4.然后就多出了登录图…