当前位置:首页 » 编程语言 » sparksqljar

sparksqljar

发布时间: 2024-04-12 21:24:14

A. Sparksql同步Hbase数据到Hive表

spark 2.3.0
hive 3.0.0
hbase 2.0.0

常规操作 hbase数据同步到hive是蚂搭通过再hive端建立hbase的映射表。
但是由于集群组件问题,建立的枣物笑映射表不能进行
insert into A select * from hbase映射表
操作。报错!
org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the location for replica 0
at org.apache.hadoop.hbase.client..getRegionLocations(.java:332)

spark读取hbase数据形成RDD,构建schma信息,形成DF
通过sparkSQL 将df数据写入到指定的hive表格中。

hadoop本地环境版本一定要与依赖包版本保持一直,不然报如下错误
java.lang.IllegalArgumentException: Unrecognized Hadoop major version number: 3.1.1

hbase 1.X与2.X有很大差距,所以再看案例参考是一定要结合自己的hbase版本。
笔者程序编译中遇到
Cannot Resolve symbol TableInputFormat HBase找不到TableInputFormat
因为:新版本2.1.X版本的HBASE又把maprece.TableInputFormat单独抽取出来了
需要导入依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-maprece</artifactId>
<version>${hbase.version}</version>
</dependency>

一定要把hbase相关凳含的包都cp 到spark的jars文件下面。然后重启spark服务。
不然你会遇到此类错误
Class org.apache.hadoop.hive.hbase.HBaseSerDe not found

或者
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
这些都是缺少jar包的表现。

B. spark sql怎么处理hive的null

前面已经有篇文章介绍如何编译包含hive的spark-assembly.jar了,不清楚的可以翻看一下前面的文章。
cloudera manager装好的spark,直接执行spark-shell进入命令行后,写入如下语句:
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

你会发现没法执行通过,因为cm装的原生的spark是不支持spark hql的,我们需要手动进行一些调整:
第一步,将编译好的包含hive的JAR包上传到hdfs上配置的默认的spark的sharelib目录:/user/spark/share/lib


第二步:在你要运行spark-shell脚本的节点上的/opt/cloudera/parcels/CDH-
5.3.0-1.cdh5.3.0.p0.30/lib/spark/lib/目录下面,下载这个jar到这个目录:hadoop fs -get
hdfs://n1:8020/user/spark/share/lib/spark-assembly-with-hive-maven.jar(具
体路径替换成你自己的)。然后这个目录下面原来会有个软链接spark-assembly.jar指向的是spark-assembly-1.2.0-
cdh5.3.0-hadoop2.5.0-cdh5.3.0.jar,我们把这个软链接删除掉重新创建一个同名的软链接:ln -s
spark-assembly-with-hive-maven.jar
spark-assembly.jar,指向我们刚下载下来的那个JAR包,这个JAR包会在启动spark-shell脚本时装载到driver
program的classpath中去的,sparkContext也是在driver中创建出来的,所以需要将我们编译的JAR包替换掉原来的
spark-assembly.jar包,这样在启动spark-shell的时候,包含hive的spark-assembly就被装载到
classpath中去了。

C. sparkSQL和spark有什么区别

Spark为结构化数据处理引入了一个称为Spark SQL的编程模块。简而言之,sparkSQL是Spark的前身,是在Hadoop发展过程中,为了给熟悉RDBMS但又不理解MapRece的技术人员提供快速上手的工具。
sparkSQL提供了一个称为DataFrame(数据框)的编程抽象,DF的底层仍然是RDD,并且可以充当分布式SQL查询引擎。

SparkSql有哪些特点呢?

1)引入了新的RDD类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD。

2)在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。

3)内嵌了查询优化框架,在把SQL解析成逻辑执行计划之后,最后变成RDD的计算。

D. spark从hive数据仓库中读取的数据可以使用sparksql进行查询吗

1、为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。
在这里由于我的Spark是自动安装和部署的,因此需要知道CDH将hive-site.xml放在哪里。经过摸索。该文件默认所在的路径是:/etc/hive/conf 下。
同理,spark的conf也是在/etc/spark/conf。
此时,如上所述,将对应的hive-site.xml拷贝到spark/conf目录下即可
如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.22-bin.jar。
2、编写测试代码
val conf=new SparkConf().setAppName("Spark-Hive").setMaster("local")
val sc=new SparkContext(conf)

//create hivecontext
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ") //这里需要注意数据的间隔符

sqlContext.sql("LOAD DATA INPATH '/user/liujiyu/spark/kv1.txt' INTO TABLE src ");

sqlContext.sql(" SELECT * FROM jn1").collect().foreach(println)

sc.stop()

3、下面列举一下出现的问题:
(1)如果没有将hive-site.xml拷贝到spark/conf目录下,会出现:

分析:从错误提示上面就知道,spark无法知道hive的元数据的位置,所以就无法实例化对应的client。
解决的办法就是必须将hive-site.xml拷贝到spark/conf目录下
(2)测试代码中没有加sc.stop会出现如下错误:
ERROR scheler.LiveListenerBus: Listener EventLoggingListener threw an exception
java.lang.reflect.InvocationTargetException
在代码最后一行添加sc.stop()解决了该问题。

热点内容
php二级分类 发布:2024-11-28 10:40:49 浏览:851
机顶盒主时钟同步服务器地址修改 发布:2024-11-28 10:40:43 浏览:333
androidstudio输出 发布:2024-11-28 10:36:20 浏览:591
华为手机的音乐在哪个文件夹 发布:2024-11-28 10:34:54 浏览:720
赛尔号万能脚本 发布:2024-11-28 10:34:44 浏览:629
逆战端游二级密码在哪里设置 发布:2024-11-28 10:28:18 浏览:867
如何才能知道妈妈的手机密码 发布:2024-11-28 10:28:15 浏览:456
linux连接sftp 发布:2024-11-28 10:25:47 浏览:460
c语言显示日期 发布:2024-11-28 10:25:46 浏览:815
丛林法则脚本 发布:2024-11-28 10:24:54 浏览:124