spark中HDFS文件操作,hive表操作

spark读取hive数据的两种方式 spark读取hive数据常用的有两种方式 一是通过访问hive metastore的方式,这种方式通过访问hive的metastore元数据的方式获取表结构信息和该表数据所存放的HDFS路径,这种方式的特点是效率高、数据量大、使用spark操作起来更加友好。 二是通过spark jdbc的方式访问,就是通过链接hiveserver2的方式获取数据,这种方式底层大题上跟spark链接其他rdbms上一样,可以采用sql的方式先在其数据库中查询出来结果再获取其结果数据,这样大部分数据计算的压力就放在了数. 阅读详情

file:///home/text1.txt 则从本地读

hdfs://clusterA/direct1/text1.txt 从集群上读

import java.io.OutputStreamWriter

/**
  * 读取hdfs文件
  *
  * @param aPath 要读取的文件路径,如hdfs://clusterA/direct1/text1.txt"
  * @return
  */

val sc = SparkSession.builder().enableHiveSupport().getOrCreate()
val pathArr = aPath.split("//")
    val uri = pathArr.head + "//" + pathArr(1).split("/").head
    val path = new Path(aPath)
    val hdfs = org.apache.hadoop.fs.FileSystem.get(
        new java.net.URI(uri),
        new org.apache.hadoop.conf.Configuration())
    if (hdfs.exists(path))
           val outpu=sc.sparkContext.textFile(aPath).collect()


/**
  * 删除hdfs目录
  *
  * @param aPath 要删除的路径,如hdfs://clusterA/direct1"
  * @return
  */
def deleteHdfsPath(aPath: String) = {
    val pathArr = aPath.split("//")
    val uri = pathArr.head + "//" + pathArr(1).split("/").head
    val path = new Path(aPath)
    val hdfs = org.apache.hadoop.fs.FileSystem.get(
        new java.net.URI(uri),
        new org.apache.hadoop.conf.Configuration())
    if (hdfs.exists(path))
        hdfs.delete(path, true)
}

/**
  * 获取文本变更时间
  *
  * @param aPath 要获取的文本,如hdfs://clusterA/direct1/file.txt"
  * @return
  */
def getMdfTime(aPath: String) = {
    val pathArr = aPath.split("//")
    val uri = pathArr.head + "//" + pathArr(1).split("/").head
    val path = new Path(aPath)
    val hdfs = org.apache.hadoop.fs.FileSystem.get(
        new java.net.URI(uri),
        new org.apache.hadoop.conf.Configuration())
    if (hdfs.exists(path))
       { val fileSt = hdfs.getFileStatus(new Path(path))
         val modTime = fileSt.getModificationTime.toString\\毫秒时间戳 Long型
       }
}

/**
  * 支持中文的hdfs文件写入-覆盖模式
  *
  * @param aPath 要写如的文本路径,如hdfs://clusterA/direct1/file.txt"
  * @param content 要写入的文本
  * @return
  */

  def writeOverwrite(aPath: String, content: Iterator[String], hdfs: FileSystem) = {
    //支持中文
    val path = new Path(aPath)
    val out = new OutputStreamWriter(hdfs.create(path, true)) //true则overwrite,false的话路径存在会报错
    content.foreach(str => out.write(str + "\n"))
    out.flush()
    out.close()
  }
/**
  * 支持中文的hdfs文件写入-追加模式
  *
  * @param aPath 要写如的文本路径,如hdfs://clusterA/direct1/file.txt"
  * @param content 要写入的文本
  * @return
  */
   
 def writeAppend( filename : String, content : Iterator[ String ],hdfs:FileSystem ) = {
      //支持中文
      val path = new Path( filename )
      var fileOutputStream:FSDataOutputStream= null
      try
        if (hdfs.exists(path)) {
          fileOutputStream = hdfs.append(path)
          content.foreach(x=>fileOutputStream.write((x+"\n").getBytes()))
        }
        else {
          fileOutputStream = hdfs.create(path)
          content.foreach(x=>fileOutputStream.write((x+"\n").getBytes()))
        }
      finally {
        if (fileOutputStream != null) fileOutputStream.close
      }
    }


/**
  * 保存dataframe到指定table
  *
  * @param aPath 
  * @return
  */
 def saveDF(sqlContext: HiveContext, tableNme: String, hdfsPath: String, DF: DataFrame,  day: String, hour: String, numPartitions: Int): Unit = {

      //方法1
        val savePath = hdfsPath + "/pt_d=" + day + "/pt_h=" + hour
        val sqlcode = "alter table " + tableNme + " add if not exists partition (pt_d='" + day + "', pt_h='" + hour + "')" 
        //覆写模式       
        funDeleteHdfsPath(savePath)//先删除路径下文件
        DF.repartition(numPartitions).write.format("orc").save(savePath)
        //追加模式//DF.repartition(numPartitions).write.mode("append").format("orc").save(savePath)
        sqlContext.sql("use biads")
        sqlContext.sql(sqlcode)
     
 //方法2
    val sc = SparkSession.builder().enableHiveSupport().getOrCreate()
    DF.createOrReplaceTempView(tempViewName)
    sc.sql(s"INSERT OVERWRITE TABLE biads.${logTableName}  PARTITION (pt_d='${timeD}',pt_h='${timeH}',pt_channel='${pt_channel}') select * from ${tempViewName}")//若想追加写表则,OVERWRITE改为 INTO
        outString

//方法3
val DATASCHEMA=Array("c1","c2")//和创建的hive表字段名称保持一致

val savePath = path + "/pt_d=" + date + "/pt_h=" + hour + "/pt_min=" + minute 
          rdd.toDF(DATASCHEMA: _*)
            .coalesce(1)
            .write.mode("append").format("orc").save(savePath)//.mode("append")可改.mode("overwrite")
          val sqlCode = "alter table " + table + " add if not exists partition (pt_d='" + date + "', pt_h='" + hour + "', pt_min='" + minute ')"
          sqlContext.sql(sqlCode)


// 方法4-动态分区
df=df.withColumn("pt_m", lit(ptm))//加入分区为pt_m
df.write.mode(SaveMode.Overwrite).insertInto(tableName)

//注意,动态分区方法需要开启一下两个参数:
// hive.exec.dynamic.partition = true
// hive.exec.dynamic.partition.mode = nonstrict


即:
sc = SparkSession.builder()
      .config("hive.exec.dynamic.partition", "true")
      .config("hive.exec.dynamic.partition.mode", "nonstrict")
      .config("spark.sql.parquet.writeLegacyFormat", "true")
      .config("spark.sql.sources.partitionOverwriteMode", "dynamic")
      .enableHiveSupport().getOrCreate()


}











rdd输出一个文件

yourRDD.coalesce(1).saveAsTextFile("outputPath")

spark+hdfs+hive 1 启动hdfs https://blog.youkuaiyun.com/ssllkkyyaa/article/details/86735817 2启动hive https://blog.youkuaiyun.com/ssllkkyyaa/article/details/86527365 s200启动hive $HIVE_HOME/bin/hive 3启动spark https://blog.csdn.n... 阅读详情

相关推荐

Spark与Hive的集成与互操作

Apache Spark和Apache Hive是强大的大数据工具,通过它们的集成和互操作,可以更好地处理和分析大规模数据。本文介绍了如何在Spark中集成和与Hive进行互操作,包括使用Hive数据仓库、使用Hive表、将Spark数据保存到Hive表、使用Hive UDF以及性能优化的建议。希望本文能够帮助大家更好地利用这两个工具来处理和分析数据。

日常分享数据分析开发、编程语言内容 2059

大数据编程实验一:HDFS常用操作和Spark读取文件系统数据

大数据编程实验,利用本地搭建的伪分布式集群进行HDFS常用操作和Spark读取文件系统数据的操作。

北天的博客 7268

Hive更换Spark引擎

一、前置准备 CentOS7、jdk1.8、hive-2.3.6、hadoop-2.7.7、spark-2.0.0-bin-hadoop2-without-hive 想要完成本期视频中所有操作,需要以下准备: Hadoop单机伪分布式-视频教程 Hadoop完全分布式集群环境搭建-视频教程 HA(高可用)-Hadoop集群环境搭建视频+图文教程 Linux下Hive的安装 DBeaverEE连接Hive-2.3.6-视频教程 HA-Spark集群环境搭建(Standalone模式)-视频教程 二、简单了

广彐水厂 4554

HDFS的exists函数解析

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34319817的博客 747

Hadoop Hive Spark hive建表语句对表在hdfs上存储的file或block数量、以及后续spark读文件跑模型的影响

Hadoop Hive Spark hive建表语句对表在hdfs上存储的file或block数量、以及后续spark读文件跑模型的影响 hive语句建的表在hdfs上存储的file个数( 即`fs -ls`命令展示的items个数)等于语句执行时候的reducer个数,而spark又是根据file的读取文件。所以若数据表的数据量过大而文

Wintersee的专栏 2365

Spark读取HDFS路径文件

有些时候我们希望直接读取HDFS上的文件进行处理,那么我们可以使用 `textFile` 这个方法,这个方法可以将指定路径的文件将其读出,然后转化为Spark中的RDD数据类型。

优快云 精品推荐 2659

【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)

【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)

showswoller的博客 1113

大模型系统构建的“三驾马车”——Prompt、Context与Harness工程

在LLM应用开发的早期阶段,我们热衷于比拼“提示词”的精妙程度。那时,一个精心构造的思维链CoT就能让模型的表现提升10%以上。随着大模型从“玩具”走向“生产系统”,我们逐渐意识到:单一的 Prompt 只是起点,而非终点。 真正的工业级应用,需要构建一套三层递进的工程体系——Prompt Engineering、Context Engineering 和 Harness Engineering。

西木风落 604

在inteillj idea中使用Spark操作Hive

前言: 都知道,小编前面已经简单介绍过在windows下hadoop和hive环境搭建和基本使用。这次的Spark有点突兀,但是也可以先忽略,重要的是先在IDEA中安装bigData插件连接hadoop已经HDFS,而后再简单介绍使用Spark操作Hive。 Big Data Tools安装: 1. 点击File, 选择Settings,再选择Plugins搜索Big Data Tools,最后下载安装。 2. 下载完毕后,底部和右侧栏会多出Hadoop或Big Data ...

北桥苏的博客 1304

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 400

AI Agent在智能投研中的实战:多智能体信息整合与策略生成

那么,什么是AI Agent?简单来说,AI Agent是一种能够感知环境、做出决策并采取行动的自主系统。自主性:能够在没有人类直接干预的情况下运行,对自己的行为和内部状态有一定的控制权。反应性:能够感知环境的变化,并及时做出反应。主动性:不仅能够对环境变化做出反应,还能够主动地设定目标并采取行动实现这些目标。社会性:能够与其他Agent(包括人类和人工智能)进行交互、协作和竞争。它们可以全天候不间断地监控和处理海量信息,大大提升信息处理能力;

AI大模型应用之禅 189

基于spark1.4.1的sparkR的实例操作

基于spark1.4.1的sparkR的实例操作,sparkR的操作基本语法与R一致,其中添加了rJava、rhdfs、SparkR的依赖库的支持。

Ganymede的Hadoop世界 1075

压电传感器信号放大难题?用运放设计电荷放大器的5个关键步骤

本文详细解析了压电传感器信号放大难题,并提供了用运放设计电荷放大器的5个关键步骤。从电压放大到电荷放大的范式转换,到运放选型、反馈网络设计、PCB布局及频响特性验证,帮助工程师解决工业自动化中的信号衰减问题,提升测量精度和稳定性。

weixin_27303545的博客 449

Hive on Spark 配置

Hive引擎包括:MR(默认)、tez、spark。Hive on Spark:Hive既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark,Spark 负责采用 RDD 执行。Spark on Hive:Hive 只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用 RDD 执行。

hu_wei123的博客 2756

实战解析:利用Wireshark解密QQ通信协议

本文提供了一份利用Wireshark工具分析QQ通信协议的实战指南。文章详细介绍了从环境准备、捕获数据包到解析协议层的完整流程,重点演示了如何识别QQ号码字段、观察加密数据特征以及区分不同通信类型(如文本、文件传输)。通过此实践,读者可以深入理解网络分层模型和现代应用加密通信机制,提升网络协议分析与安全诊断能力。

weixin_29210727的博客 408

Zemax物理光学实战:3分钟搞定高斯光束传播模拟(附菲涅尔局部分析技巧)

本文详细介绍了在Zemax中进行高斯光束传播模拟与菲涅尔局部分析的实战技巧。通过3分钟快速设置指南和参数解析,帮助光学工程师准确模拟激光光束特性,避免常见误区。特别分享了菲涅尔局部分析的关键技巧和传播参数优化策略,提升光学系统设计的精度与效率。

lambda的博客 804

Spark 读写Hive 表

Spark 操作Hive可以采用两种方式,一种是在Spark-sql中操作Hive表,另一种是通过Hive 的MetaStore在IDEA中操作Hive表,接下来分别介绍这两种方式 Spark-Shell操作Hive表 1.环境配置 将hive.xml 放置到Spark的conf目录下面,这里可以采用软连接的方式操作 将MySQL的驱动包放到Spark的jars目录下面,方便Spark连接MySQL 2.进入spark-sql客户端 $SPARK_HOME/bin/spark-sql spark-.

Nice的博客 8396

以太网接口及POE设计

PoE标准 Power Over Ethernet 是有源以太网供电的简称 通过Cat-5电缆供电在IEEE 802.3af以太网供电标准中进行了定义。PoE标准以前限制在几瓦以内,但更新的PoE技术可实现更高的功率。例如,PoE+允许每端口功率高达25 W,而PoE++(四 对以太网供电系统)通过使用现有电缆的所有电线允许70 W到100 W的功率。与此PoE标准并行的是ADI公司定义的专有标准 LTPoE++™,该标准定义高达90W的受电设备(PD)功率规范(请参见表1)。 表1. ADI...

u010783226的专栏 1万+

【spark on kubernetes】spark operator访问hdfs,hive

前一篇部署了spark operator,这边介绍spark访问hdfs,hive数据 一. 编写代码 Java代码,访问hdfs及访问hive package com.seagate.client.zyspark; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import

你的博客 1万+

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

本文详细介绍了从.bib到.bbl的LaTeX参考文献处理完整流程,包括文献数据库构建、样式选择、主文档配置、编译流程及问题排查。特别针对.bib、.bbl等文件的操作提供了实战解决方案,帮助用户高效管理学术文献引用,适用于各类学术写作场景。

weixin_29292431的博客 285

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spark读取hdfs文件并写入hive表中

package com.job import org.apache.commons.cli.{BasicParser, CommandLine, Options} import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.types.{StringType, StructType} case class Transfer2HiveConfig(query_day: String) object Transf.

zl 3269

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spark-Streaming+HDFS+Hive实战

本文介绍了一个实战示例,展示了如何使用Spark Streaming从GBIF接口获取数据并进行处理,然后将处理后的数据保存到HDFS文件系统,并在Hive中创建外部表映射。文章从需求说明开始,详细介绍了使用Spark Streaming、HDFS和Hive的背景知识。接着,文章提供了代码示例,展示了如何编写工具类、实体类和接收器类来实现数据处理和存储。最后,文章展示了如何使用Spark Streaming将数据保存到HDFS,并在Hive中创建外部表映射。

zcs2312852665的博客 1813

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spark SQL操作Hive表

Spark SQL支持从Hive存储中读写数据。然而,Hive存在很多的依赖,而这些依赖又不包含在默认的各类Spark发型版本中。如果将Hive的依赖放入classpath中,Spark将自动加载它们。值得注意的是,这些依赖必须在所有节点中都存在。因为他们需要通过Hive的序列化和反序列化库(SerDes)来访问存储在Hive中的数据。 在Spark中配置Hive,需要将hive-site.xml, core-site.xml, hdfs-site.xml放置到Spark的conf/目录下。 需要操作H

RonieWhite的博客 3170

Hive on Spark配置

说明2:Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。说明1:采用Spark纯净版jar包,不包含hadoop和hive相关依赖,能避免依赖冲突。1、解压spark-3.3.1-bin-without-hadoop.tgz。2、修改spark-env.sh配置文件。--Spark依赖位置(注意:端口号。--Hive执行引擎-->source 使其生效。

指针先生 2096

Hadoop,HDFS,Map Reduce,Spark,Hive,Yarn之间的关系

Hadoop Hadoop 生态圈(或者泛生态圈)是一个能够对大量数据进行分布式处理的软件框架,是大数据平台的开发工具,但不是一个单一的工具,也不是一种单一的技术,而是一系列技术和工具的合集。用户在不需要了解分布式底层细节的情况下,能够开发分布式程序。 Hadoop大数据平台,采用分布式架构,包含多个与大数据处理相关的组件:HDFS、MapReduce、Yarn、Hbase、Hive、Spark、Kafak、Storm、HDF、Ambari等,并根据用户的实际需求完成功能定制。 Hadoop框架中

Rnan_prince的博客 6044

Spark整合Hive

通过hive来创建一定格式的表,将相应的数据上传到hdfs相应的hive目录下,实现用spark的SQL风格进行读取里面的数据 Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所以有SparkSql的应用而生,他是将sparksql转换成RDD,然后提交到集群执行,执行效率非常快! ...

小东升职记 1566
上一篇: 【Python练习cookbook】切片slice高级应用
下一篇: shell上启动spark
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值