spark指定hive字段_Spark2.0集成Hive操作的相关配置与注意事项
前言
補充說明
Hive中metastore(元數據存儲)的三種方式:內嵌Derby方式
Local方式
Remote方式
[一]、內嵌Derby方式這個是Hive默認的啟動模式,一般用于單元測試,這種存儲方式有一個缺點:在同一時間只能有一個進程連接使用數據庫。
配置文件 hive-site.xml 中jdbc URL、驅動、用戶名、密碼等的配置信息
執行初始化命令:schematool -dbType derby -initSchema
查看初始化后的信息: schematool -dbType derby -info
配置完成后就可在shell中以CLI的方式訪問hive 進行操作驗證。
[二]、Local方式以本地Mysql數據庫為例:創建好用戶:hive;database:hive。
配置文件 hive-site.xml 中jdbc URL、驅動、用戶名、密碼等屬性值配置信息
ps:需要把數據庫的驅動包copy到目錄 /lib 中
如果是第一次需要執行初始化命令:schematool -dbType mysql -initSchema
查看初始化后信息 schematool -dbType mysql -info
初始化后查看mysql中表情況:show tables;
配置完成后就可在shell中以CLI的方式訪問hive 進行操作驗證。
[三]、Remote方式以Postgres數據庫(192.168.174.200)為例:創建好用戶:hive;database:hive_meta。Remote方式需要分別配置服務端和客戶端的配置文件:
服務端的 hive-site.xml 中jdbc URL、驅動、用戶名、密碼等屬性值配置如下:
ps:需要把Postgres的驅動包copy到目錄 /lib 中
如果是第一次需要執行初始化命令:schematool -dbType mysql -initSchema
客戶端中配置內容修改如下:
hive.metastore.uris
thrift://192.168.174.200:9083
Thrift uri for the remote metastore. Used by metastore client to connect to remote metastore.
hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse
hive metastore 服務端啟動命令:
hive --service metastore -p
如果不加端口默認啟動:hive --service metastore,則默認監聽端口是:9083 ,注意客戶端中的端口配置需要和啟動監聽的端口一致。服務端啟動正常后,客戶端就可以執行hive操作了。
以下異常,可通過Remote方式配置解決。
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor
Spark2.0安裝
下載
Source code: Spark 源碼,需要編譯才能使用,另外 Scala 2.11 需要使用源碼編譯才可使用
Pre-build with user-provided Hadoop: “Hadoop free” 版,可應用到任意 Hadoop 版本
Pre-build for Hadoop 2.7 and later: 基于 Hadoop 2.7 的預先編譯版,需要與本機安裝的 Hadoop 版本對應??蛇x的還有 Hadoop 2.4 and later、Hadoop 2.3、Hadoop 1.x,以及 CDH 4。
解壓
tar -zxvf spark-2.0.0-bin-hadoop2.7.tgz
移動文件夾
mv spark-2.0.0-bin-hadoop2.7 /usr/local/hadoop/
修改配置文件
新建修改spark-env.sh
cd /usr/local/hadoop/spark-2.0.0-bin-hadoop2.7/conf
cp spark-env.sh.template spark-env.sh在spark-env.sh文件頂部添加以下內容
export SPARK_MASTER_HOST=127.0.0.1
export SPARK_LOCAL_IP=127.0.0.1
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.0
export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_CLASSPATH=$HIVE_HOME/lib:$SPARK_CLASSPATH
根據實際情況進行相應修改
export SPARK_MASTER_HOST=127.0.0.1
export SPARK_LOCAL_IP=127.0.0.1是為了解決
Spark2.0單機模式無法啟動master的問題
未配置會顯示以下異常
Exception in thread "main" java.net.BindException: 無法指定被請求的地址: Service 'sparkMaster' failed after 16 retries (starting from 7077)! Consider explicitly setting the appropriate port for the service 'sparkMaster' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
集成訪問已安裝的Hive1、拷貝$HIVE_HOME/conf/hive-site.xml和hive-log4j.properties到 $SPARK_HOME/conf/
2、在$SPARK_HOME/conf/目錄中,修改spark-env.sh,添加
export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
export SPARK_CLASSPATH=$HIVE_HOME/lib:$SPARK_CLASSPATH
3、另外也可以設置一下Spark的log4j配置文件,使得屏幕中不打印額外的INFO信息:
log4j.rootCategory=WARN, console
為解決以下異常:
Caused by: MetaException(message:Version information not found in metastore. )需修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值為 false即可解決
修改spark-submit、spark-sql
在文件頂部添加以下內容:
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.0
export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
為了解決以下異常:
EXCEPTION: When running with master 'yarn' either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment. in spark
啟動
啟動spark-sql
spark-sql
啟動spark-submit
spark-submit --class com.gm.hive.SparkHive.App --master yarn /usr/local/hadoop/kczyqktj_spark-0.0.1-SNAPSHOT-allinone.jar
JAVA編寫Spark2.0程序的注意事項
訪問已有Hive
.config("spark.sql.warehouse.dir", "/user/hive/warehouse/").enableHiveSupport()完整示例
package com.gm.hive.SparkHive;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
/**
* Spark sql獲取Hive數據
*
*/
public class App {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder().master("local[2]")
.appName("SparkHive")
.config("spark.sql.warehouse.dir", "/user/hive/warehouse/").enableHiveSupport()
.getOrCreate();
spark.sql("show databases").show();
spark.sql("show tables").show();
spark.sql("use db_hive_edu");
Dataset data = spark
.sql("select hc_storetypeid,count(hc_storetypeid) from db_hive_edu.hc_casewoodlist where hc_wpstate=2 and hc_storetypeid !='null' group by hc_storetypeid order by hc_storetypeid");
data.show();
}
}相關地址:
http://spark.apache.org/docs/2.0.0/sql-programming-guide.html
總結
以上是生活随笔為你收集整理的spark指定hive字段_Spark2.0集成Hive操作的相关配置与注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spark 持久化 mysql_Spar
- 下一篇: 抢救站位图片_抢救配合流程和站位,你真的