华为2015年7月20日在O'Reilly Open Source Convention (OSCON) 上宣布Spark SQL on HBase package正式开源。Spark SQL on HBase package 项目又名 Astro,端到端整合了 Spark,Spark SQL和HBase的能力,有助于推动帮助Spark进入NoSQL的广泛客户群,并提供强大的在线查询和分析以及在垂直企业大规模数据处理能力。 Astro的新特性使得数据修改,智能扫描系统具有强大的可操作性,类似于自定义过滤器和协处理器下推式,并让更多的传统RDBS能力可用,其查询优化算法适用于一般组织的数据集,并可以通过分布式SQL引擎进行查询。为了充分利用Spark最新的功能,包括Dataframe和外部数据源API ,华为全球团队一直持续更新项目代码并符合最新发布的Spark1.4版本。此项目吸引了众多社区贡献者参与到开发和验证中来。此外,华为团队还对Spark SQL,机器学习和Spark R贡献了很多新特性,丰富了Spark的标准库。
转载参考:http://lxw1234.com/archives/2015/07/430.htm 的文章,mark一下,下一步学习研究的参考。 Astro是继Phoenix后,SQL On HBase的又一利器。至于实际用起来怎么样,有待验证。
开源项目地址:https://github.com/Huawei-Spark/Spark-SQL-on-HBase
- 下载源码,解压
- cd Spark-SQL-on-HBase-master/
- 使用命令 mvn -DskipTests clean install 编译
- 运行需要Spark1.4.0和HBase0.98
HBase相关配置
- 每台HBase节点上配置,包括客户端,编辑hbase-site.xml
<property>
<name>hbase.coprocessor.user.region.classes</name>
<value>org.apache.spark.sql.hbase.CheckDirEndPointImpl</value>
</property>
- 将spark-sql-on-hbase的jar包添加到hbase的环境变量重启HBase集群
cp spark-sql-on-hbase-1.0.0.jar $HBASE_HOME/lib
vi hbase-env.sh
export HBASE_CLASSPATH=$HBASE_HOME/lib/spark-sql-on-hbase-1.0.0.jar:$HBASE_CLASSPATH
Spark相关配置
- 每台Spark节点上配置,包括客户端拷贝hbase-site.xml到$SPARK_HOME/conf目录
cp spark-sql-on-hbase-1.0.0.jar $SPARK_HOME/lib/
vi spark-env.sh
export SPARK_CLASSPATH=$SPARK_HOME/lib/spark-sql-on-hbase-1.0.0.jar:${SPARK_CLASSPATH}
- spark-default中配置参数:
- spark.sql.hbase.scanner.fetchsize 5000 ##该参数用于设置hbase中扫描器缓存
- spark.master spark://nn.uniclick.cloud:7077
- spark.executor.memory 2g
- spark.executor.cores 8
- 重启Spark集群
使用hbase-sql
- 进入 Spark-SQL-on-HBase-master/bin/ 目录,运行 ./hbase-sql 进入hbase-sql命令行
- hbase-sql默认读取 $SPARK_HOME/conf/spark-defaults.conf 中关于Spark的配置参数
- 先在HBase中建表:
- 在hbase-sql中使用如下语句建表:
- PRIMARY KEY指定HBase RowKey对应哪个字段
- MAPPED BY指定HBase表名,以及其他字段和HBase列的对应;
- 在hbase-sql中可以使用show tables;命令查看有哪些表
- hbase-sql会在HBase中创建一张元数据表,名为”metadata”,记录了在hbase-sql中创建的表及其元数据。
- 在hbase-sql中使用SQL查询HBase中的表:
- 其它SQL操作参见: https://github.com/Huawei-Spark/Spark-SQL-on-HBase/blob/master/doc/SparkSQLOnHBase_v2.2.docx