首先,将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")也是可以的
原文链接:https://blog.csdn.net/yoohhwz/article/details/102693365