spark如何读取hive里面的数据

首先,将hive-site.xml copy到spark/conf目录下

spark shell和spark sql:指定mysql驱动包位置,--jars只会在executor端读取到,driver-class-path可以在driver端读取到
spark-shell/spark-sql --master local[2] --jars ~/lib/mysql-connector-java-5.1.47-bin.jar --driver-class-path ~/lib/mysql-connector-java-5.1.47-bin.jar 

idea配置读取hive数据:
1.首先将hadoop一系列配置文件(core-site.xml/hdfs-site.xml/mapred-site.xml/yarn-site.xml/hive-site.xml)copy到idea上的Resources目录下,其实可能只需要hive-site.xml

2.启动hive元数据thrift服务,后台启动,将日志输出到指定文件
nohup hive --service metastore > metastore.log 2>&1 &

3.hive-site.xml文件中增加
 
        hive.metastore.uris
        thrift://hadoop001:9083
    
  
    	hive.metastore.warehouse.dir
    	/user/hive/warehouse
  
  
4.代码中设置用户
   System.setProperty("HADOOP_USER_NAME","hadoop")

以上针对物理机均没用问题


云主机的话可能不太一样,除了需要打开部分端口外,在通过idea查询hive的数据的时候会报错:
2019-12-18 01:43:05,710 WARN org.apache.hadoop.hdfs.DFSClient Failed to connect to /192.168.0.3:50010 for block, add to deadNodes and continue. java.net.ConnectException: Connection timed out: no further information
java.net.ConnectException: Connection timed out: no further information

其实就是一个内外网的问题,这里你配置的主机名都是内网ip,但是访问datanode需要使用外网,所以才会报这样的错

解决方案:
在copy到idea的配置文件hdfs-site.xml中增加
	
      dfs.client.use.datanode.hostname   
      true
	
	意思就是就是访问datanode使用主机名
	或者在你的代码创建SparkSession对象的时候使用config("dfs.client.use.datanode.hostname", "true")也是可以的

你可能感兴趣的:(Spark)