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文件中增加
 <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop001:9083</value>
    </property>
  <property>
    	<name>hive.metastore.warehouse.dir</name>
    	<value>/user/hive/warehouse</value>
  </property>
  
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中增加
	<property>
      <name>dfs.client.use.datanode.hostname</name>   
      <value>true</value>
	</property>
	意思就是就是访问datanode使用主机名
	或者在你的代码创建SparkSession对象的时候使用config("dfs.client.use.datanode.hostname", "true")也是可以的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值