1. 程式人生 > >spark結合hive

spark結合hive

如果mysql是安裝在windows上的話,hive在Linux上,要保證兩者能通訊的話需要改變windows上的字符集形式為latin1

方法如下

alter database hive character set latin1;

話不多說碼程式碼

(hive shell裡面        機器只啟動了hdfs沒有啟動yarn所以沒有啟動hadoop的mapreduce程式)

create table person(id int,name string,age int) row format delimited fields terminated by ",";  

load data inpath "hdfs://hadoop01:9000/person.txt" into table person;

select * from person;(沒有mapreduce也可以從中讀取出來,不會啟動mapreduce,不需要mapreduce)

select * from person order by age desc ; (會啟動本地自帶的mapreduce)

和spark結合必須將hive-site.xml 放到$SPARK_HOME/conf/目錄裡面cp hive-site.xml  $SPARK_HOME/conf/

同時將(hdfs也要拷貝過來cp hdfs-site.xml $SPARK_HOME/conf/

Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found

解決方法將jdbc驅動放到spark的jars目錄中 :

cp mysql-connector-java-5.1.32.jar /export/servers/spark-2.1.0-bin-hadoop2.7/jars/

或者也可以在啟動的時候告知jar在哪  --driver-class-path+jar的地址

遠端除錯的時候

新增下面這行配置在spark-env.sh中

export SPARK_MASTER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10000"

除錯master  

sbin/start-master.sh 

IDEA主要進行新增remote的一下配置


然後開始debug


除錯worker

在worker的spark-env.sh中新增 
export SPARK_WORKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10001"

start-slave.sh  spark://hadoop01:7077  //要告訴worker master的地址

然後主要的方法和除錯master基本一致

也可以Debug app (--driver-java-options)如下面

bin/spark-submit --class cn.itcast.spark.WC --master spark://node-1.itcast.cn:7077 --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10002" /root/bigdata-2.0.jar hdfs://node-1.itcast.cn:9000/words.txt hdfs://node-1.itcast.cn:9000/wordsout

任務提交流程
spark-submit --class cn.itcast.spark.WordCount

bin/spark-clas -> org.apache.spark.deploy.SparkSubmit 呼叫這個類的main方法

doRunMain方法中傳進來一個自定義spark應用程式的main方法class cn.itcast.spark.WordCount

通過反射拿到類的例項的引用mainClass = Utils.classForName(childMainClass)

在通過反射呼叫class cn.itcast.spark.WordCount的main方法

用一個IDE工具連線 建立一個remote application
172.16.0.13 10002
在本地的程式碼打斷點
debug按鈕開始除錯