问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

spark在处理数据的时候需要连接数据库吗

发布网友 发布时间:2022-05-02 08:12

我来回答

2个回答

懂视网 时间:2022-05-02 12:34

第一种方式,会告知无法识别SID,其实在连接时将orcl&user=kang&password=123456都当做其SID,其实就接近了。一般平时用jdbc连接数据库,url user password都分开,学习一下这种方式^^

Oracle的JDBC url三种方式:这

1 2 3 4 5 6 1.普通SID方式 jdbc:oracle:thin:username/password@x.x.x.1:1521:SID 2.普通ServerName方式 jdbc:oracle:thin:username/password@//x.x.x.1:1522/ABCD 3.RAC方式 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.2)(PORT=1521)))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxrac)))

具体参看这里

 

3.访问hive  

hive和spark sql的关系,参见

其实spark sql从一开始就支持hive。Spark提供了一个HiveContext的上下文,其实是SQLContext的一个子类,但从作用上来说,sqlContext也支持Hive数据源。只要在部署Spark的时候加入Hive选项,并把已有的hive-site.xml文件挪到$SPARK_HOME/conf路径下,我们就可以直接用Spark查询包含已有元数据的Hive表了。

1.Spark-sql方式

spark-sql是Spark bin目录下的一个可执行脚本,它的目的是通过这个脚本执行Hive的命令,即原来通过

hive>输入的指令可以通过spark-sql>输入的指令来完成。

spark-sql可以使用内置的Hive metadata-store,也可以使用已经独立安装的Hive的metadata store

配置步骤:

1. 将Hive的conf目录的hive-site.xml拷贝到Spark的conf目录

2. 将hive-site.xml中关于时间的配置的时间单位,比如ms,s全部删除掉

错误信息:Exception in thread "main" java.lang.RuntimeException: java.lang.NumberFormatException: For input string: "5s" 一直以为是输入格式的问题。。

3. 将mysql jdbc的驱动添加到Spark的Classpath上

1 export SPARK_CLASSPATH=$SPARK_CLASSPATH:/home/hadoop/software/spark-1.2.0-bin-hadoop2.4/lib/mysql-connector-java-5.1.34.jar
1 2 3 [hadoop@hadoop bin]$ ./spark-sql  Spark assembly has been built with Hive, including Datanucleus jars on classpath  SET spark.sql.hive.version=0.13.1

提示编译的时候要带2个参数

重新编译:./make-distribution.sh --tgz -Phadoop-2.4 -Pyarn -DskipTests -Dhadoop.version=2.4.1 -Phive -Phive-thriftserver

在Spark-default中已经指定

 

创建表

1 2 3 spark-sql> create table word6 (id int,word string) row format delimited fields terminated by ‘,‘ stored as textfile ;   OK  Time taken: 10.852 seconds 

 导入数据

1 2 3 4 5 6 7 spark-sql> load data local inpath ‘/home/hadoop/word.txt‘ into table word6 Copying data from file:/home/hadoop/word.txt  Copying file: file:/home/hadoop/word.txt  Loading data to table default.word6  Table default.word6 stats: [numFiles=1, numRows=0, totalSize=31, rawDataSize=0 OK  Time taken: 2.307 seconds

 与其他数据源联合查询

1 select * from src join jdbcmysql on (src.key=jdbcmysql.id);

2.Spark-shell方式 

1 sqlContext.sql("select count(*) from hive_people").show()

  

4.将dataframe数据写入Hive分区表

DataFrame将数据写入hive中时,默认的是hive默认数据库,insertInto没有指定数据库的参数,使用下面方式将数据写入hive表或者hive表的分区中。这

1、将DataFrame数据写入到Hive表中

从DataFrame类中可以看到与hive表有关的写入Api有以下几个:

1 2 3 4 registerTempTable(tableName: String): Unit, insertInto(tableName: String): Unit insertInto(tableName: String, overwrite: Boolean): Unit saveAsTable(tableName: String, source: String, mode: [size=13.3333320617676px]SaveMode, options: Map[String, String]): Unit

还有很多重载函数,不一一列举

registerTempTable函数是创建spark临时表

insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接进行写入。

向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....")

 

下面语句是向指定数据库数据表中写入数据:

1 2 3 4 5 6 7 case class Person(name:String,col1:Int,col2:String)  val sc = new org.apache.spark.SparkContext     val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)  import hiveContext.implicits._  hiveContext.sql("use DataBaseName" val data=sc.textFile("path").map(x=>x.split("\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))<br>data.toDF() insertInto("tableName")

创建一个case类将RDD中数据类型转为case类型,然后通过toDF转换为DataFrame,调用insertInto函数时,首先指定数据库,使用的是hiveContext.sql("use DataBaseName")语句,就可以将DataFrame数据写入hive数据表中了

 

2、将DataFrame数据写入hive指定数据表的分区中

hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ...."),使用saveAsTable时数据存储格式有限,默认格式为parquet,可以指定为json,如果有其他格式指定,尽量使用语句来建立hive表。

将数据写入分区表的思路是:首先将DataFrame数据写入临时表,之后是由hiveContext.sql语句将数据写入hive分区表中。具体操作如下:

1 2 3 4 5 6 7 8 case class Person(name:String,col1:Int,col2:String)  val sc = new org.apache.spark.SparkContext     val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)  import hiveContext.implicits._  hiveContext.sql("use DataBaseName" val data = sc.textFile("path").map(x=>x.split("\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))  data.toDF().registerTempTable("table1" hiveContext.sql("insert into table2 partition(date=‘2015-04-02‘) select name,col1,col2 from table1")


使用以上方式就可以将dataframe数据写入hive分区表了。

spark连数据库

标签:copy   loading   val   远程   cin   def   awd   oop   联合查询   

热心网友 时间:2022-05-02 09:42

spark在处理数据的时候需要连接数据库吗
spark也不是无所不能的啊,提供思路: 直接监听mysql的bin log 然后处理bin log的日志到hdfs上
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
不喜欢参加聚会怎么办 ...的电信8兆的宽带是169元每月可是用了2天就停机了,他说第一个月... 电信8兆宽带多少钱 爸妈想换5G套餐有没有那种可以绑定宽带一起的? ...换了波箱油后加速转速变高且偶有空转是怎么回事? 苦菜花的花语和寓意是什么? 苦菜花的花语是什么? 安徽省人事档案查询,调档等网上操作指南 安徽哪个网站调档 宽带10M与100M有什么区别啊?宽带10M和100M与平板电脑4G卡的用法用量有... 有QQ会员,开通腾讯视频有优惠没有? 如何在WINDOWS资源管理器中显示隐含性的文件和文件夹 幽默抖音为什么抢不到东西 懂:分析手机配置的进! 摩托罗拉XT165参数 现在买什么手机好2000左右 摩托罗拉XT1060的参数配置 摩托罗拉G5s plus和G5 plus手机壳是一样的吗? 要是玩堡垒之夜手游,用摩托罗拉 moto G5S行不行? 摩托罗拉 v8手机配置 moto g5s plus支持移动4g吗 现在小米商城里的黑鲨分6期真的能免息吗? 消博士的空气消毒液怎么样?有什么味道吗? 小米商城买手机可以分期付款吗 消博士的空气消毒液怎么用?在车里可以用吗?有什么注意的? 空气消毒液哪家好 王者荣耀开怎么得 王者荣耀开有什么用 民间借贷中借款人逾期,借款逾期利息和违约金怎么计算?法律的相关规定是怎么说的? 行政判决赔偿逾期执行是否计算迟延履行利息。依什么法 营业执照和欠债人是一个人还不上贷款怎么处里 pc微信视频关闭麦克风,视频就断了,要怎么解决 夏天延长馒头保质期(冰箱除外)? 微信视频怎么关闭麦克风 谁能告诉我 名著汤姆索亚历险记阅读与练习(初一) 的答案 夏天馒头怎样保存才不会坏,除了放冰箱内 衣服上面拉链遮挡三角怎么做 门襟拉链上口怎么样加一个本布的三角,防止划伤 《汤姆索亚历险记》补充习题答案,急急急!!! 汤姆索亚历险记1~8章出12道题目并有答案 蒙口拉链上的三角牌剪掉么 物理小问题 衣服拉链合上时中间的三角形受力是怎么样的要示意图 把拉链拉上时们可以看到有一个三角形的东西在两链中间运动,他的原理是什么? 装扮的意思? 请教各位一道高一物理题,跪求,谢谢! 衣服拉链的拉头上有一个三角,里面有三个力,好几件衣服拉链都有,这是什么意思? 对工作态度的自我评价,工作态度自我评价怎么写 生活中的物理知识无处不在,如图所示是我们衣服上拉链的一部分,在把拉链拉开的时候, 装饰和装扮这两个词语的区别在哪儿? 羽绒服拉链那块的挡边是在衣服里面的,能起到档风效果不,谢谢!