Windows10-idea通过spark连接hive

8 篇文章 0 订阅
6 篇文章 0 订阅

步骤分析

idea如果想通过spark连接hive,首先pom文件中需要添加hive,除此之外必须要把hive-site.xml放到idea的resources下面。hive-site.xml里面是配置的hive的元数据库地址,hdfs-site.xml、core-cite.xml可以选择是否放进去。Windows系统操作hadoop肯定会出现一个警告。找不到winutils.exe。这个警告一般不用管,但是要想连接hive就必须得消除它,消除它只需要去GitHub上面下载hadoop-common-2.2.0-bin-master.zip。解压后把这个包的bin路径配置到Windows的环境变量下面就可以解决。解压后的这个包的bin目录下面有winutils.exe,找到这个就不会报错了。

操作步骤

1.配置idea的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>www.ruozedata.bigdata</groupId>
  <artifactId>g5-spark</artifactId>
  <version>1.0</version>
  <inceptionYear>2008</inceptionYear>
  <properties>
    <scala.version>2.11.8</scala.version>
    <spark.version>2.4.0</spark.version>
    <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
    <scalikejdbc.version>2.5.2</scalikejdbc.version>
    <mysql.version>5.1.38</mysql.version>
  </properties>
<repositories>
  <repository>
    <id>scala-tools.org</id>
    <name>Scala-Tools Maven2 Repository</name>
    <url>http://scala-tools.org/repo-releases</url>
  </repository>
  <repository>
  <id>cloudera</id>
  <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<pluginRepositories>
  <pluginRepository>
    <id>scala-tools.org</id>
    <name>Scala-Tools Maven2 Repository</name>
    <url>http://scala-tools.org/repo-releases</url>
  </pluginRepository>
</pluginRepositories>
<dependencies>
  <!--Scala dependency-->
  <dependency>
    <groupId>org.scala-lang</groupId>
    <artifactId>scala-library</artifactId>
    <version>${scala.version}</version>
  </dependency>
  <!--Spark core dependency-->
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>${spark.version}</version>
  </dependency>
  <!--hadoop dependency-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
    </dependency>
  <!--Test dependency-->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
  </dependency>
  <!--scalikejdbc dependency-->
  <dependency>
      <groupId>org.scalikejdbc</groupId>
      <artifactId>scalikejdbc_2.11</artifactId>
      <version>${scalikejdbc.version}</version>
  </dependency>
  <dependency>
      <groupId>org.scalikejdbc</groupId>
      <artifactId>scalikejdbc-config_2.11</artifactId>
      <version>${scalikejdbc.version}</version>
  </dependency>
  <!--mysql dependency-->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
  </dependency>
  <!--日志-->
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-repl_2.11</artifactId>
    <version>${spark.version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>${spark.version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>${spark.version}</version>
  </dependency>

</dependencies>
  <build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <plugins>
      <plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <scalaVersion>${scala.version}</scalaVersion>
          <args>
            <arg>-target:jvm-1.5</arg>
          </args>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <configuration>
          <downloadSources>true</downloadSources>
          <buildcommands>
            <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
          </buildcommands>
          <additionalProjectnatures>
            <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
          </additionalProjectnatures>
          <classpathContainers>
            <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
            <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
          </classpathContainers>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.scala-tools</groupId>
        <artifactId>maven-scala-plugin</artifactId>
        <configuration>
          <scalaVersion>${scala.version}</scalaVersion>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
</project>


2.解决警告:找不到winutils.exe

1.下载hadoop-common-2.2.0-bin-master.zip解压到E:\maven3.3.9\App\hadoop-common-2.2.0-bin。下载地址如下:
https://github.com/srccodes/hadoop-common-2.2.0-bin
2.配置环境变量

3.实现idea通过spark连接hive

1.idea里面创建一个resources,把hive-site.xml hdfs-site.xml core-cite.xml放进去

hive-site.xml配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    

<property>
   <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://192.168.2.65:3306/ruoze_d5?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
      </property>

<property>
      <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        </property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
    <value>******</value>
    </property>

<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>

idea连接hive的代码及运行结果

1.idea代码

import org.apache.spark.sql.SparkSession
object SparkSessionApp1 {
  def main(args: Array[String]): Unit = {
    val sparkSession=SparkSession.builder()
      .appName("SparkSessionApp")
      .config("spark.sql.warehouse.dir", "/tmp/hive/")
      .enableHiveSupport()//使用到hive一定要开启这个,idea要想连接hive得在pom中加上hive
      .master("local[2]")
      .getOrCreate()
    val gg=sparkSession.sql("show tables")
    gg.show
sparkSession.stop()
  }
}

2.运行结果

可能会遇到的问题

1.hive-site.xml 里面配置的数据库是一开始的时候在hive中以root用户创建的,所以mysql里面可能没有给它其他ip访问的权限,所以Windows的IP地址它肯定会报权限错误。这时候千万不要异想天开给hive-site.xml 换另一个mysql里面的%权限的数据库,这样虽然解决了权限错误,但是这个拥有%的数据库并不是hive的元数据库,它里面没有hive的元数据信息,所以就会报空指针异常的错误,也就意味着拿不到元数据信息。那么就只能按部就班去mysql里面改hive-site.xml 里面配置的数据库权限,给我们的Windows的IP一个访问它的权限,我的解决方式如下:
2.解决方法

mysql> use mysql;
mysql> select user,password,host from user;
此时其实发现root用户我已经给了host一个%的权限了,但是还是报了权限错误(其实是因为我当时改完权限忘了刷新权限。。。后来才想起来是这个原因)
看到已经给了root用户%的权限,接下来我就查root用户下面host为%的数据库,竟然没有。。
mysql> show grants for 'root'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'root' on host '%'
接着我又给hive-site.xml 里面配置的数据库ruoze_d5一个% ,然而报错了,意思是在user表里找不到这个这个用户。但是使用select查询user表,是可以查到的,原因是我们创建用户后,只是写入了user表,并没有写入权限表(grant table)。所以应该刷新权限
mysql> grant all privileges on ruoze_d5.* to root@'%' identified by '******';
ERROR 1133 (42000): Can't find any matching row in the user table
mysql> flush privileges;刷新权限
Query OK, 0 rows affected (0.00 sec)
接着我又重新给它 ruoze_d5这个数据库下面的数据给了它root用户的。其实这一步本可以不用做的。。。因为刷新权限之后我之前配置的%的权限应该也是生效了的。从下图就能看到有一个是给了* ,也就是之前修改的权限给了root用户下面的所有的host都能访问的权限,上面没查到就是因为忘了刷新权限。。。还有一个是ruoze_d5也就是刚刚才改的那个
mysql> grant all privileges on ruoze_d5.* to root@'%' identified by '******';
Query OK, 0 rows affected (0.00 sec)
再次查询root用户下面host为%的数据库
mysql> show grants for 'root'@'%';

改完之后去idea运行,权限问题解决,成功访问hive的元数据

### 回答1: 在Windows下使用IntelliJ IDEA连接SparkHive需要进行以下步骤: 1. 安装JavaSpark:首先需要安装JavaSpark,并设置环境变量。 2. 下载Hive JDBC驱动:从Apache Hive官网下载Hive JDBC驱动,并将其添加到Spark的classpath中。 3. 创建SparkSession:在Java代码中创建SparkSession对象,并设置连接Hive的参数,如下所示: ``` SparkSession spark = SparkSession.builder() .appName("SparkHiveExample") .config("spark.sql.warehouse.dir", "/user/hive/warehouse") .config("hive.metastore.uris", "thrift://localhost:9083") .enableHiveSupport() .getOrCreate(); ``` 其中,`spark.sql.warehouse.dir`指定Hive的数据仓库目录,`hive.metastore.uris`指定Hive的元数据存储地址。 4. 执行Hive查询:使用SparkSession对象执行Hive查询,如下所示: ``` Dataset<Row> result = spark.sql("SELECT * FROM mytable"); result.show(); ``` 其中,`mytable`是Hive中的表名。 通过以上步骤,就可以在Windows下使用IntelliJ IDEA连接SparkHive了。 ### 回答2: 在Windows操作系统下,使用IntelliJ IDEA连接Apache Spark到Apache Hive需要以下步骤: 1. 安装Spark<br> 首先需要安装Apache Spark,并将路径添加到系统环境变量中。建议使用最新版本的Spark,因为这些版本支持最新版本的Hive。 2. 安装Hadoop<br> 要访问Hive需要安装Hadoop并将路径添加到系统环境变量中。Spark使用Hadoop API访问HDFS,并通过Hive Metastore来访问Hive表。 3. 添加Spark样例库<br> 在IntelliJ IDEA中打开菜单“文件/设置”,然后在左侧窗格中选择“Libraries”。点击“+”图标,选择“Java”,然后选择Spark样例库的路径,然后点击“OK”。 4. 连接Hive<br> 创建一个Scala或Java项目。然后在IDEA中打开窗口“View”菜单下的“Tool Windows”,然后单击“Database”。 在“Database”窗口中,单击“+”图标,然后选择“Data Source” -> “Hive”。输入Hive Metastore的URL、用户名和密码,然后单击“Test Connection”以测试连接是否正常。 5. 创建连接<br> 在“Database”窗口中,单击“+”图标,然后选择“Data Source” -> “Spark SQL”。输入Spark Master的URL,单击“Test Connection”以测试连接是否正常。 6. 创建Spark应用<br> 创建一个新的Scala或Java类,并添加以下依赖项: ``` "org.apache.spark" %% "spark-core" % "2.4.7" "org.apache.spark" %% "spark-sql" % "2.4.7" % "provided" ``` 编写Spark应用程序来连接Hive表,例如: ```scala val spark = SparkSession.builder() .appName("Hive Spark Connection") .config("hive.metastore.uris", "thrift://localhost:9083") .enableHiveSupport() .getOrCreate() val df = spark.sql("select * from testdb.testtable") df.show() ``` 7. 运行应用程序<br> 如果应用程序没有运行,可以单击“Run”按钮,或使用命令行运行程序: ```bash spark-submit --class com.example.MyApp --master local[*] myapp.jar ``` 这就是使用IntelliJ IDEASpark连接Hive的基本步骤。通过这种方法可以方便地使用SparkHive进行大数据处理。 ### 回答3: 在Windows下使用IDEA连接SparkHive需要准备以下环境: 1.安装Java JDK和Hadoop 首先需要安装Java JDK和Hadoop。建议使用Java 8版本,同时要确保Hadoop已经正确安装。在Windows下安装Hadoop,可以参考官方文档或者其他教程。 2.安装SparkHive组件 接下来需要安装SparkHive组件。可以直接在官方网站上下载安装包进行安装,或者使用Maven进行自动化管理。 3.配置IDEA开发环境 在IDEA中,需要添加SparkHive相关依赖的jar包。可以在POM文件中添加依赖,也可以手动添加Jar包。 同时,还需要配置SparkHive的配置参数,主要包括以下内容: (1)Spark的Master和AppName (2)Hive Thrift Server的地址和端口 (3)Hive的JDBC驱动程序 (4)Hive的用户名和密码 (5)Hive的默认数据库名称 上述配置可以在IDEA的“Run Configuration”中进行设置。 4.编写代码连接SparkHiveIDEA中,可以使用Scala或Java编写代码连接SparkHive。示例代码如下: ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession.builder.appName("connectHive").master("local").getOrCreate() val df = spark.read.format("jdbc").option("url", "jdbc:hive2://hive-server:10000/default").option("driver", "org.apache.hive.jdbc.HiveDriver").option("user", "hive").option("password", "hive").option("dbtable", "mytable").load() df.show() ``` 在这个示例代码中,首先创建了一个Spark Session,并指定Master和AppName。然后使用Spark SQL的API连接Hive,通过HiveServer2访问Hive中的“mytable”表,最后展示查询结果。 总之,在Windows下使用IDEA连接SparkHive需要安装Java JDK、Hadoop、SparkHive组件,配置IDEA开发环境,然后使用Scala或Java编写连接代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值