目錄
一、Spark SQL介紹
perl連接oracle數據庫。SQL on Hadoop框架:
1)Spark SQL
2)Hive
hive直接運行sql、3)Impala
4)Phoenix
Spark SQL是用來處理離線數據的,他的編程模型是DF/DS
hive編寫存儲過程,Spark SQL的特點:
1)集成:可以和各種復雜SQL:spark.sql("")
2)統一的數據訪問:連接Hive, Avro, Parquet, ORC, JSON, and JDBC外部數據源統一的方式:spark.read.format("").load("")
sql parser。3)與Hive的集成:由于共享元數據庫的存在,表、UDF都可以共享。impala、Hive、Spark SQL都是共享metastore元數據的
4)jdbc方式:需要啟動服務,比如Hive的hiveserver2、mysql。
Spark的SQL框架:
linux curl命令。1)Spark分支: Spark SQL
2)Hive:Hive on Spark
交互Spark SQL的方式:SQL、DF/DS
DataFrame 是1.3版本出來的,DataSet1.6出現的。
DataFrame=RDD+schema
DataFrame=Dataset[Row]
DF支持使用Scala, Java, Python, and R進行開發。但是DS只支持Scala and Java. Python暫時不支持,所以使用Python是有局限性的。
二、Spark和Hive的整合
只需要兩步:
1)將Hive元數據的配置文件放到Spark/conf下:
cd $SPARK_HOME
cd conf
cp /home/hadoop/app/hive-1.1.0-cdh5.7.0/conf/hive-site.xml .(hive-site.xml中配置了元數據的連接)
2)在Spark中加入mysql的driver驅動包(因為Hive元數據是存儲在MySQL上)。有多種方式添加jar包:
1)方式1:加在spark-shell或者spark-submit后:
啟動的時候通過--jars加入,但是有的時候并不能傳到driver端,所以還需要再使用--driver-class-path:
spark-shell \
--jars /home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar \
--driver-class-path /home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar
如果包多的時候使用--package。
2)方式2:cp包進SPARK_HOME/jars
3)方式3:把jar包配置在spark-default.conf下:
多包的時候使用:
spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*
spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*
單個包的時候使用(本人):
spark.executor.extraClassPath=/home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar
spark.driver.extraClassPath=/home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar
注意:
1)Hive底層是HDFS,一定要保證HDFS進程是開啟的。
2)mysql的服務需要是開啟的。
3)想要使用Spark整合Hive,在編譯Spark的時候需要在編譯指令中加入-Phive -Phive-thriftserver。
4)因為Spark配置中加入了hive-site.xml,所以默認的文件系統就是 HDFS。
否則就是本地文件系統,create table的時候就會在本地創建/user/hive/warehouse目錄 。
SparkSession是Spark SQL程序的入口。在Spark Shell中SparkSession的別名是spark。
三、Spark的thriftserve2/beeline/jdbc
hive有hiveServer2,spark中也有類似的thriftserve2。
位置:spark/sbin
步驟:
1)將${HIVE_HOME}/conf/hive-site.xml 拷貝到${SPARK_HOME}/conf下。
2)添加mysql驅動。
啟動thriftserver服務:
sbin$ ./start-thriftserver.sh --jars ~/software/XXX/mysql-connector-java-5.1.27-bin.jar
會提示日志文件的位置,通過`tail -f XX.log`可以查看這個server是否啟動成功。
占用的端口是10000。
啟動beeline客戶端:
bin$ ./beeline -u jdbc:hive2://localhost:10000 -n hadoop ? #通過過JDBC連接hive
jdbc:hive2://localhost:10000> ?#成功連接
jdbc:hive2://localhost:10000> ?show tables;
jdbc:hive2://localhost:10000> select * from emp;
注意:
要在`$SPARK_HOME/bin`下通過`./beeline`啟動start-thriftserver.sh對應的客戶端,否則啟動啟動成hive的客戶端,因為環境變量中配置了`HIVE_HOME/bin`,也配置了`SPARK_HOME/bin` ,所以要明確位置進行使用。
開啟server之后,也可以在windows上的IDEA中使用JDBC進行連接服務。同樣不需要寫用戶名和密碼。
觀察Spark UI界面:
1)應用的名稱是Thrift JDBC/ODBC Server
2)頁面上多了一個JDBC/ODBC Server的頁簽,并且展示SQL的很多信息和SQL的執行計劃。
四、shell方式使用SQL
實際上就是訪問操作Hive表。
shell方式使用SQL有兩種方式:
1)spark-shell進入:
scala> spark.sql("show databases").show(false)
scala> spark.sql("use hive")
scala> spark.sql("show tables").show(false)
scala> spark.sql("select * from test").show(false)
2)spark-sql進入:
bin$ ./spark-sql --jars
spark-sql(default)> show tables;
spark-sql(default)> select * from emp;
spark-sql (default)> show databases; #直接寫SQL,用;符號結束
用exit;退出spark-sql
spark-sql 底層調用的也是spark-submit。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态