Spark教程——(4)Spark-shell基于Phoenix访问HBase数据

package statistics

import common.util.timeUtil
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.functions.{col, count, split}

class costMonth {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()
    //      .setAppName("finance test")
    //      .setMaster("local")
    val sc = new SparkContext(conf)
    //    sc.setLogLevel("WARN")
    val sqlContext = new SQLContext(sc)

    val df = sqlContext.load(
      "org.apache.phoenix.spark"
      , Map("table" -> "ASSET_NORMAL"
        , "zkUrl" -> "node3,node4,node5:2181")
    )
    df.registerTempTable("asset_normal")
    def costingWithin(originalValue: Float, years: Int): Double =  (originalValue*0.95)/(years*365)
    sqlContext.udf.register("costingWithin", costingWithin _)

    def costingBeyond(originalValue: Float): Double = originalValue*0.05/365
    sqlContext.udf.register("costingBeyond", costingBeyond _)

    def expire(acceptanceDate: String, years: Int): Boolean = timeUtil.dateStrAddYears2TimeStamp(acceptanceDate, timeUtil.SECOND_TIME_FORMAT, years) > System.currentTimeMillis()
    sqlContext.udf.register("expire", expire _)

    def monthSpace(stDate: String, endDate: String): Int = timeUtil.getMonthSpace(stDate, endDate)
    sqlContext.udf.register("monthSpace", monthSpace _)

    val costDay = sqlContext
      .sql(
        "select ID, ASSET_ID, ASSET_NAME, ACCEPTANCE_DATE, FIRST_DEPARTMENT_ID, SECOND_DEPARTMENT_ID, case when expire(ACCEPTANCE_DATE, DEPRECIABLE_LIVES_NAME) then costingWithin(ORIGINAL_VALUE, DEPRECIABLE_LIVES_NAME) else costingBeyond(ORIGINAL_VALUE) end as ACTUAL_COST, current_timestamp() as GENERATION_TIME from asset_normal "
      )

    //    df.show(false)
    costDay.write
      .format("org.apache.phoenix.spark")
      .mode("overwrite")
      .option("table", "ASSET_FINANCIAL_DETAIL")
      .option("zkUrl", "node3,node4,node5:2181")
      .save()

  }
}
ln -s /etc/hbase/conf.cloudera.hbase/hbase-site.xml /etc/spark/conf.cloudera.spark_on_yarn/hbase-site.xml
spark-shell --conf "spark.executor.extraClassPath=/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/spark/lib/cf/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/spark/lib/cf/phoenix-client-4.14.1-HBase-1.4.jar" --conf "spark.driver.extraClassPath=/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/spark/lib/cf/phoenix-spark-4.14.0-cdh5.14.2.jar:/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/lib/spark/lib/cf/phoenix-client-4.14.1-HBase-1.4.jar"
val df = sqlContext.load("org.apache.phoenix.spark",Map("table"->"ASSET_NORMAL","zkUrl"->"node3,node4,node5:2181"))

参考:

https://blog.csdn.net/dingyuanpu/article/details/52623655

https://www.cnblogs.com/feiyudemeng/p/9254046.html

http://dequn.github.io/2016/11/08/phoenix-spark-setting/

https://community.hortonworks.com/questions/212315/spark2-phoenix-plugin-with-zeppelin.html

https://community.hortonworks.com/content/supportkb/150591/how-to-connect-hbase-and-phoenix-tables-in-secure.html

https://community.hortonworks.com/articles/179762/how-to-connect-to-phoenix-tables-using-spark2.html

https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-spark/4.14.0-cdh5.14.2

https://mvnrepository.com/artifact/org.apache.phoenix/phoenix-client/4.14.1-HBase-1.4

https://blogs.apache.org/phoenix/entry/spark_integration_in_apache_phoenix

http://phoenix.apache.org/phoenix_spark.html#

https://www.cnblogs.com/skyEva/p/5859742.html

原文地址:https://www.cnblogs.com/ratels/p/11129744.html

时间: 2024-09-30 00:42:11

Spark教程——(4)Spark-shell基于Phoenix访问HBase数据的相关文章

Spark教程(2)-Spark概述及相关组件

1.概述 Spark起源于加州大学伯克利分校RAD实验室,起初旨在解决MapReduce在迭代计算和交互计算中的效率低下问题.目前Spark已经发展成集离线计算,交互式计算,流计算,图计算,机器学习等模块于一体的通用大数据解决方案. 2.Spark组件 Spark Core Spark Core 实现了 Spark 的基本功能,包含任务调度.内存管理.错误恢复.与存储系统 交互等模块. Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset

Spark教程-构建Spark集群(1)

对于90%以上想学习Spark的人而言,如何构建Spark集群是其最大的难点之一,为了解决大家构建Spark集群的一切困难,家林把Spark集群的构建分为了四个步骤,从零起步,不需要任何前置知识,涵盖操作的每一个细节,构建完整的Spark集群. 从零起步,构建Spark集群经典四部曲: 第一步:搭建Hadoop单机和伪分布式环境: 第二步:构造分布式Hadoop集群: 第三步:构造分布式的Spark集群: 第四步:测试Spark集群: 本文内容为构建Spark集群经典四部曲的第一步,从零起步构建

Spark教程-构建Spark集群-安装Ubuntu系统(2)

3.点击“Finish”完成虚拟系统的创建,如下图所示: 点击我们创建的Ubuntu,如下所示 点击“CD/DVD(IDE)”进入如下界面 选择我们的Ubuntu的ISO的具体存放路径,选择好后如下图所示: 点击“OK”完成设置: 点击“Memory”,进入如下界面: 此时把我们虚拟的内存设置为2G,如下所示: 点击“OK”完成设置. Spark教程-构建Spark集群-安装Ubuntu系统(2)

Spark教程-构建Spark集群-安装Ubuntu系统(1)

Unbuntu系统是我们开发Hadoop时最常用的操作系统,下面带领大家一步步完成Vmware虚拟机下Unbuntu系统的安装 创建Vmware中的虚拟系统: 我们选择的是“Typical”的方式,点击“Next”进入下一步: 选择稍后安装操作系统,点击“Next”进入下一步: 选择安装Linux系统的Ubuntu版本,点击“Next”进入下一步: 家林这里选择了自定义系统的存放路径为“E:\VMware\Virtual Machines\Master” 如下图所示: 点击“Next”进入下一步

Spark教程-构建Spark集群-运行Ubuntu系统(2)

安装Java 1.打开终端,建立新目录“/usr/lib/java”,如下图所示: 2.把下载的JDK文件移到刚刚创建的“/usr/lib/java”中,如下图所示 3.解压JDK文件,如下图所示: 解压完成的文件目录如下图所示: 4.修改环境变量: 进入如下图所示的配置文件中: 按下“i”进入INSERT模式,把Java的环境编写信息加入其中,如下图所示: 按下“esc“键回到正常模式,保存并退出配置文件: 执行以下命令是配置文件的修改生效: 5.在终端中显示刚刚安装的Java版本,如下图所示

Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)

安装ssh Hadoop是采用ssh进行通信的,此时我们要设置密码为空,即不需要密码登陆,这样免去每次通信时都输入秘密,安装如下: 输入“Y”进行安装并等待自动安装完成. 安装ssh完成后启动服务 以下命令验证服务是否正常启动: 可以看到ssh正常启动: 设置免密码登录,生成私钥和公钥: 在/root/.ssh中生成两个文件:id_rsa和id_rsa.pub,id_rsa为私钥,id_rsa.pub为公钥,我们将公钥id_rsa.pub追加到 authorized_keys中,因为author

Spark教程-构建Spark集群-运行Ubuntu系统(1)

为了简化权限等问题,下面我们以root用户的身份登录和使用Ubuntu系统,而Ubuntu在默认情况下并没有开启root用户,这需要我们做如下设置: sudo  -s进入 root用户权限模式 vim /etc/lightdm/lightdm.conf [SeatDefaults] greeter-session=unity-greeter user-session=ubuntu greeter-show-manual-login=true #手工输入登陆系统的用户名和密码 allow-gues

Spark 教程:Spark的体系架构

最近看到一篇关于Spark架构的博文,作者是 Alexey Grishchenko.看过Alexey博文的同学应该都知道,他对Spark理解地非常深入,读完他的 “spark-architecture” 这篇博文,有种醍醐灌顶的感觉,从JVM内存分配到Spark集群的资源管理,步步深入,感触颇多(腾云科技ty300.com).因此,在周末的业余时间里,将此文的核心内容译成中文,并在这里与大家分享.如在翻译过程中有文字上的表达纰漏,还请大家指出. 首先来看一张Spark 1.3.0 官方给出的图片

spark 教程二 spark中的一些术语和概念

1.Application:基于spark的用户程序,包含了一个driver program 和集群中多个 executor 2.Driver Program:运行application的main()函数并自动创建SparkContext.通常SparkContext 代表driver program 3.Executor:为某个Application运行在worker node 上的一个进程.该进程负责运行task并负责将数据存储在内存或者硬盘上,每个application 都有自己独立的 e