Window 环境连接虚拟机中Hadoop及Spark集群
1.Windows安装Hadoop
在windows上把hadoop的压缩包解压到一个没有空格的目录下,比如是D盘根目录
1.1 配置环境变量
HADOOP_HOME=D:\hadoop-2.7.7
Path下添加 %HADOOP_HOME%\bin
1.2 下载相似版本的文件
hadoop.dll #存放在C:\Windows\System32 目录下
winutils.exe #存放在%HADOOP_HOME%\bin 目录下
2. idea 进行远程连接操作
查了很多帖子,说要把hive-site.xml, hdfs-site.xml, core-site.xml配置放在resource目录中,就可以进行spark-sql操作hive了,但是我这边总是在idea中创建了hiveware目录,并没有连接远程集群hive, 最终其实只需两步简单的操作:
2.1. 启动hive元数据服务
hive --service metastore &
2.2. hive.metastore.uris 配置
我的集群中hive-site.xml没有配置hive.metastore.uris,且idea的resources目录中也没有放hive-site.xml, hdfs-site.xml, core-site.xml配置文件,而是只在创建SparkSession时配置就行了
def main(args: Array[String]): Unit = {
// 1. 创建SparkSession对象
val conf = new SparkConf().setMaster("local[*]").setAppName("******")
val spark: SparkSession = SparkSession.builder().config(conf)
.config("hive.metastore.uris", "thrift://hadoop:9083") //
// .config("hive.metastore.warehouse.dir", "hdfs://hadoop:9000/user/hive/warehouse") 不需要
.enableHiveSupport().getOrCreate()
spark.sql("select * from test.ad_click_log").show()
// 2. 连接集群mysql
// 创建Proterties对象
val connectionProperties: Properties = new Properties()
// 登录数据库的用户名
connectionProperties.put("user", "root")
// 登录数据库的密码
connectionProperties.put("password", "assiduity")
// 参数分别为:数据库url 表名 连接数据库的用户名,密码配置信息
val df: DataFrame = spark.read.jdbc("jdbc:mysql://192.168.240.128:3306/test?rewriteBatchedStatements=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true", "student", connectionProperties)
df.show()
// 3. 连接HDFS,读取其数据
val config = new Configuration()
config.set("fs.defaultFS", "hdfs://192.168.240.128:9000")
val fs = FileSystem.get(config)
println(fs.exists(new Path("hdfs://192.168.240.128:9000/user/hive/warehouse/ad_info/1.txt")))
}