1. spark sql支持哪些sql操作
支持Shark和sparkSQL 。
但是,隨著Spark的發展,其中sparkSQL作為Spark生態的一員繼續發展,而不再受限於hive,只是兼容hive;而hive on
spark是一個hive的發展計劃,該計劃將spark作為hive的底層引擎之一,也就是說,hive將不再受限於一個引擎,可以採用map-
rece、Tez、spark等引擎。
2. 如何使用Spark SQL 的JDBC server
首先確保SQLSERVER服務正在運行,並可以允許遠程訪問連接
然後按如下步驟進行連接
1.安裝JDBC驅動
1)下載JDBC驅動
2)執行sqljdbc_4.0.2206.100_chs.exe解壓驅動文件
3)拷貝以下目錄中的sqljdbc_auth.dll到Windows的System32目錄。對x64的機子,x64的dll拷到C:\Windows\System32,x86的dll拷到C:\Windows\SysWOW64目錄。
Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\chs\auth\
2.在Java程序中連接SQL Server
classpath中加上安裝好的SQL Server jdbc jar包
Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\chs\sqljdbc4.jar
連接SQL Server的JDBC代碼
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://localhost:54364;databaseName=master;IntegratedSecurity=True";
Connection con = DriverManager.getConnection(url);
在SQL Server Browser服務開啟的情況下也可以通過服務名連接
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=master;IntegratedSecurity=True";
Connection con = DriverManager.getConnection(url);
3.身份驗證模式
SQL Server默認使用Windows身份驗證模式,這也是官方推薦的模式,安全性更高。上面的連接例子就是採用的Windows認證。如果要使用混合認證模式,需要下載SQL Server Management Studio,並通過SQL Server Management Studio修改認證模式為混合認證模式。
3. 企業常用sparkcore還是sparksql
企業最常用的是sparkcore和sparksql協同處理的方式。
企業是基於微批處理的流式計算引擎,通常是利用sparkcore與sparksql一起來處理數據。在企業實時處理架構中,通常將sparkstreaming和kafka集成作為整個大數據處理架構的核心環節之一。
SparkSQL構建在SparkCore之上,專門用來處理結構化數據(不僅僅是SQL)。即SparkSQL是SparkCore封裝而來的。SparkSQL在SparkCore的基礎上針對結構化數據處理進行很多優化和改進,簡單來講,SparkSQL支持很多種結構化數據源,可以讓你跳過復雜的讀取過程,輕松從各種數據源中讀取數據。當你使用SQL查詢這些數據源中的數據並且只用到了一部分欄位時,SparkSQL可以智能地只掃描這些用到的欄位,而不是像SparkContexthadoopFile中那樣簡單粗暴地掃描全部數據。
4. 求問怎麼設置sparksql讀取hive的資料庫
求問怎麼設置sparksql讀取hive的資料庫
使用maven進行打包:
打包命令:
mvn -Pyarn -Dhadoop.version=2.3.0-cdh5.0.0 -Phive -Phive-thriftserver -DskipTests clean package
5. sparksql 多欄位join與單欄位join的性能問題
1 概念:流式遍歷表(streamIter)和查找表(buildIter)
流式遍歷表(streamIter)和查找表(buildIter)的概念見Spark SQL 之 Join 實現 - 雲+社區 - 騰訊雲 (tencent.com)
一般streamlter是大表,bulidler是小表
2 概念:sparksql種3種join的實現方式
sort merge join:有shuffle操作,適用於兩張大表
broadcast join:把bulidler表廣播到每個executor里,所以builder表應該小一點,sparks中默認builder表小於10M時使用broadcast join方法,適用於大表+小表
hash join:默認不開啟,開啟了sort merge join也比它差不了太多,適用於大表+小表(比broadcast的小表略大)
3 4種join方式
inner join:我們在寫sql語句或者使用DataFrmae時,可以不用關心哪個是左表,哪個是右表,在spark sql查詢優化階段,spark會自動將大表設為左表,即streamIter,將小表設為右表,即buildIter。
left outer join是以左表為准,在右表中查找匹配的記錄,如果查找失敗,則返回一個所有欄位都為null的記錄。我們在寫sql語句或者使用DataFrmae時,一般讓大表在左邊,小表在右邊。
right outer join是以右表為准,在左表中查找匹配的記錄,如果查找失敗,則返回一個所有欄位都為null的記錄。所以說,右表是streamIter,左表是buildIter,我們在寫sql語句或者使用DataFrmae時,一般讓大表在右邊,小表在左邊。
full outer join 不用關心左表右表
6. 如何使用sparksql向mysql中插入數據
f(isset($_POST['submit'])&&$_POST['submit']=='提交'){
3 //判斷是否是提交過來的
4 $intext = $_POST['intext'];
5 if($intext!=null||$intext!=''){
6 $link = mysql_connect("localhost", "root", "123456");
7 //資料庫配置信息 第一個參數資料庫位置第二個是用戶名第三個是密碼
8 mysql_select_db("szn_test");
9 //設置要使用的資料庫
10 $sql = "select * from demo where res = '".$intext."'";
7. 怎樣用sparksql查詢多表
一、啟動方法
/data/spark-1.4.0-bin-cdh4/bin/spark-sql --master spark://master:7077 --total-executor-cores 10 --executor-memory 1g --executor-cores 2
註:/data/spark-1.4.0-bin-cdh4/為spark的安裝路徑
/data/spark-1.4.0-bin-cdh4/bin/spark-sql –help 查看啟動選項
--master MASTER_URL 指定master url
--executor-memory MEM 每個executor的內存,默認為1G
--total-executor-cores NUM 所有executor的總核數
-e <quoted-query-string> 直接執行查詢SQL
-f <filename> 以文件方式批量執行SQL
8. 如何在集群外客戶端上使用sparksql工具
首先確保SQLSERVER服務正在運行,並可以允許遠程訪問連接 然後按如下步驟進行連接 1.安裝JDBC驅動 1)下載JDBC驅動 2)執行sqljdbc_4.0.2206.100_chs.exe解壓驅動文件 3)拷貝以下目錄中的sqljdbc_auth.dll到Windows的System32目錄。
9. 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()解決了該問題。
10. sparkSQL用jdbc連接hive和用元數據連接hive的區別,各自優缺點
spark on hive : 是spark 通過spark-sql 使用hive 語句操作hive ,底層運行的還是 spark rdd.
*(1)就是通過sparksql,載入hive的配置文件,獲取到hive的元數據信息
* (2)spark sql獲取到hive的元數據信息之後就可以拿到hive的所有表的數據
* (3)接下來就可以通過spark sql來操作hive表中的數據
hive on spark: 是hive 等的執行引擎變成spark , 不再是maprece. 相對於上一項,這個要實現責麻煩很多, 必須重新編譯你的spark. 和導入jar包,