Spark连接Hive读取数据

这篇具有很好参考价值的文章主要介绍了Spark连接Hive读取数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#系统环境

        Ubuntu 16.04 LTS

#镜像文件

        ubuntu-16.04.6-desktop-i386.iso 

#软件依赖(链接提取码:6666)

        spark-3.0.0-bin-without-hadoop.tgz  

        hadoop-3.1.3.tar.gz

        apache-hive-3.1.2-bin.tar.gz

        spark-hive_2.12-3.2.2.jar

        openjdk 1.8.0_292

        mysql-connector-java-5.1.40.tar.gz 

        VMwareTools-10.3.23-16594550.tar.gz

目录

#系统环境

#镜像文件

#软件依赖(链接提取码:6666)

1. HADOOP环境搭建

1.1 创建一个hadoop用户

1.2 更新软件源、安装Vim

1.3 安装SSH、配置SSH无密码登陆

1.4 安装Java环境

1.5 安装Hadoop3

2. Spark3环境搭建

2.1 Spark安装及配置

2.2运行实例SparkPi

3. 使用Spark-shell进行交互式编程 

3.1 Hadoop伪分布式配置

3.2 使用Spark shell的准备工作

3.3 Spark RDD部分

3.4 Spark SQL部分

4. Hive3环境配置

4.1 安装配置Mysql

4.2 安装Hive

4.3 配置Mysql

4.4 HiveSQL操作

5. Spark连接Hive读写数据

5.1 前期准备

5.2 使用Spark读取Hive数据


1. HADOOP环境搭建

1.1 创建一个hadoop用户

        $ sudo useradd -m hadoop -s /bin/bash

        $ sudo passwd hadoop

        $ sudo adduser hadoop sudo

Spark连接Hive读取数据

1.2 更新软件源、安装Vim

        $ sudo apt-get update

        $ sudo apt-get install vim

Spark连接Hive读取数据

Spark连接Hive读取数据

1.3 安装SSH、配置SSH无密码登陆

        # 安装 SSH server

        $ sudo apt-get install openssh-server       

Spark连接Hive读取数据

        $ ssh localhost        # 登陆本机

Spark连接Hive读取数据 

        # 利用 ssh-keygen 生成密钥,并将密钥加入到授权中

        $ exit        # 退出刚才的ssh localho

        $ cd ~/.ssh/  

        $ ssh-keygen -t rsa   

        $ cat ./id_rsa.pub >> ./authorized_keys        # 加入授权

Spark连接Hive读取数据

1.4 安装Java环境

1.4.1 安装JDK

        # JDK

        $ sudo apt-get install default-jre default-jdk      

Spark连接Hive读取数据

1.4.2 配置环境变量

        $ vim ~/.bashrc        # 配置JAVA_HOME环境变量

        export JAVA_HOME=/usr/lib/jvm/default-java       

Spark连接Hive读取数据

        $ source ~/.bashrc        # 使变量设置生效

        $ echo $JAVA_HOME        # 检验变量值

        $ java -version

Spark连接Hive读取数据

1.5 安装Hadoop3

        $ cd /Downloads        # 进入对应文件夹

        $ sudo tar -zxf hadoop-3.1.3.tar.gz -C /usr/local        # 解压到/usr/local中

        $ cd /usr/local/

        $ sudo mv ./hadoop-3.1.3/ ./hadoop        # 将文件夹名改为hadoop

        $ sudo chown -R hadoop ./hadoop        # 修改文件权限

Spark连接Hive读取数据

        $ cd /usr/local/hadoop

        $ /bin/hadoop version

Spark连接Hive读取数据

2. Spark3环境搭建

2.1 Spark安装及配置

2.1.1 解压并赋予权限

        $ cd Downloads

        $ sudo tar -zxf spark-3.0.0-bin-without-hadoop.tgz -C /usr/local/

Spark连接Hive读取数据

        $ cd /usr/local

        $ sudo mv ./spark-3.0.0-bin-without-hadoop/ ./spark

        $ sudo chown -R hadoop:hadoop ./spark        # 此处的 hadoop 为当前用户名

Spark连接Hive读取数据

2.1.2 配置环境变量(添加时均在首行)

        $ cd /usr/local/spark

        $ cp ./conf/spark-env.sh.template ./conf/spark-env.sh

        $ vim ./conf/spark-env.sh        # 编辑spark-env.sh配置文件

Spark连接Hive读取数据

        export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

Spark连接Hive读取数据

        $ vim ~/.bashrc        # 修改环境变量

Spark连接Hive读取数据

        export JAVA_HOME=/usr/lib/jvm/default-java

        export HADOOP_HOME=/usr/local/hadoop

        export SPARK_HOME=/usr/local/spark

 export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH

        export PYSPARK_PYTHON=python3

        export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH

Spark连接Hive读取数据

        $ source ~/.bashrc        # 让该环境变量生效

Spark连接Hive读取数据

2.2运行实例SparkPi

2.2.1 运行SparkPi

        $ cd /usr/local/spark

        $ bin/run-example SparkPi        # 运行Spark自带实例SparkPi

Spark连接Hive读取数据

2.2.2 过滤屏幕信息

        $ bin/run-example SparkPi 2>&1 | grep "Pi is"        # 过滤屏幕信息

Spark连接Hive读取数据

3. 使用Spark-shell进行交互式编程 

3.1 Hadoop伪分布式配置

3.1.1 修改配置文件

        $ cd /usr/local/hadoop/etc/hadoop/

        $ chmod a+rw core-site.xml        # 设置可读写权限

        $ chmod a+rw hdfs-site.xml

        $ gedit core-site.xml        # 使用gedit编辑配置文件

Spark连接Hive读取数据

        # 将其中的<configuration></configuration>替换为以下配置, hdfs-site.xml 的修改与core-site.xml同理.

                <configuration>

                    <property>

                        <name>hadoop.tmp.dir</name>

                        <value>file:/usr/local/hadoop/tmp</value>

                        <description>Abase for other temporary directories.</description>

                    </property>

                    <property>

                        <name>fs.defaultFS</name>

                        <value>hdfs://localhost:9000</value>

                    </property>

                </configuration>

        $ gedit hdfs-site.xml        # 使用gedit编辑配置文件

Spark连接Hive读取数据

        # 将其中的<configuration></configuration>替换为以下配置

                <configuration>

                    <property>

                        <name>dfs.replication</name>

                        <value>1</value>

                    </property>

                    <property>

                        <name>dfs.namenode.name.dir</name>

                        <value>file:/usr/local/hadoop/tmp/dfs/name</value>

                    </property>

                    <property>

                        <name>dfs.datanode.data.dir</name>

                        <value>file:/usr/local/hadoop/tmp/dfs/data</value>

                    </property>

                </configuration>

3.1.2 执行 NameNode 的格式化

        $ cd /usr/local/hadoop

        $ ./bin/hdfs namenode -format        # 执行 NameNode 的格式化

Spark连接Hive读取数据

Spark连接Hive读取数据

3.1.3 报错Authentication failure解决方案(未出现忽略)

        #若在切换root用户时出现Authentication failure问题,使用如下命令设置密码即可.

        $ sudo passwd root

        $ su root

Spark连接Hive读取数据

3.1.4 开启NameNode和DataNode守护进程

        $ cd /usr/local/hadoop

        $ ./sbin/start-dfs.sh        # 开启NameNode和DataNode守护进程

       # 若在启动和使用期间出现WARN提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable WARN可以忽略,不会影响使用.

Spark连接Hive读取数据

        $ jps        # 验证NameNode和DataNode守护进程是否开启成功

Spark连接Hive读取数据

3.2 使用Spark shell的准备工作

3.2.1 启动hadoop

        $ /usr/local/hadoop/sbin/start-dfs.sh        # 启动hadoop

Spark连接Hive读取数据

3.2.2 准备本地测试文件

        # 本实验要在spark shell中进行词频统计,需准备一个本地文件,其中包含多个英文单词即可.text.txt的内容可随意输入,但不要出现中文字符,可以换行,这里使用安装Spark自带的README.md文件进行实验.

        $ cd /home/hadoop

        $ mkdir mydir        # 创建mydir文件夹,便于下一步验证

        $ cd mydir

        $ vim text.txt

Spark连接Hive读取数据

Spark连接Hive读取数据

3.2.3将本地测试文件上传到HDFS.

        $ ./bin/hdfs dfs -mkdir -p /user/hadoop         # 创建一个hdfs文件夹

Spark连接Hive读取数据

        $ /usr/local/hadoop/bin/hdfs dfs -put /home/hadoop/mydir/text.txt /user/hadoop

Spark连接Hive读取数据

3.2.4 启动Spark Shell

        $ /usr/local/spark/bin/spark-shell         #启动spark shell

Spark连接Hive读取数据

Spark连接Hive读取数据

        # 进入Spark Shell需等待一段时间,如果见到scala>命令行,证明Spark Shell已经正常启动了.

3.3 Spark RDD部分

3.3.1 加载本地测试文件

        scala> val textFile = sc.textFile("file:///home/hadoop/mydir/text.txt")

        scala> textFile.first()

Spark连接Hive读取数据

        # 练习把textFile变量中的内容再写回到另外一个文本文件newtext.txt中.

        scala> textFile.saveAsTextFile("file:///home/hadoop/mydir/newtext.txt")

Spark连接Hive读取数据

3.3.2 加载HDFS文件

        scala> val hdfsFile = sc.textFile("hdfs://localhost:9000/user/hadoop/text.txt“)

        scala> hdfsFile.first()         #查看文件的第一行

Spark连接Hive读取数据

3.3.3 本地词频统计

        scala> val wordCount = textFile.flatMap(line => line.split(" ")).map(word =>(word,1)).reduceByKey((a,b)=>a+b)

        scala> wordCount.collect()

Spark连接Hive读取数据

3.3.4 统计HDFS文件词频

  scala> val hdfswordCount = hdfsFile.flatMap(line => line.split(" ")).map(word =>(word,1)).reduceByKey((a,b)=>a+b)

        scala> hdfswordCount.collect()

Spark连接Hive读取数据

        完成后可使用:quit或ctrl+c强制退出.

3.4 Spark SQL部分

3.4.1 准备json文件

        $ cd /usr/local/spark

        $ vim example.json

Spark连接Hive读取数据

                {"name":"Michael","age":25,"gender":"male"}

                {"name":"Judy","age":27,"gender":"female"}

                {"name":"John","age":20,"gender":"male"}

                {"name":"Mike","age":25,"gender":"male"}

                {"name":"Mary","age":20,"gender":"female"}

                {"name":"Linda","age":28,"gender":"female"}

                {"name":"Michael1","age":25,"gender":"male"}

                {"name":"Judy1","age":27,"gender":"female"}

                {"name":"John1","age":20,"gender":"male"}

                {"name":"Mike1","age":25,"gender":"male"}

                {"name":"Mary1","age":20,"gender":"female"}

                {"name":"Linda1","age":28,"gender":"female"}

                {"name":"Michael2","age":25,"gender":"male"}

                {"name":"Judy2","age":27,"gender":"female"}

                {"name":"John2","age":20,"gender":"male"}

                {"name":"Mike2","age":25,"gender":"male"}

                {"name":"Mary2","age":20,"gender":"female"}

                {"name":"Linda2","age":28,"gender":"female"}

                {"name":"Michael3","age":25,"gender":"male"}

                {"name":"Judy3","age":27,"gender":"female"}

                {"name":"John3","age":20,"gender":"male"}

                {"name":"Mike3","age":25,"gender":"male"}

                {"name":"Mary3","age":20,"gender":"female"}

                {"name":"Linda3","age":28,"gender":"female"}

Spark连接Hive读取数据

3.4.2 Spark SQL操作(查看)

        $ /usr/local/spark/bin/spark-shell        # 启动Spark shell

Spark连接Hive读取数据

        scala> import org.apache.spark.sql.SQLContext        # 引入SQLContext类

        scala> val sql = new SQLContext(sc)        # 声明一个SQLContext的对象

Spark连接Hive读取数据

        # 读取jason数据文件

        scala> val peopleInfo = sql.read.json(“file:///usr/local/spark/example.json”)

Spark连接Hive读取数据

        scala> peopleInfo.schema        # 查看数据

Spark连接Hive读取数据

        scala> peopleInfo.show        # show方法,只显示前20条记录

Spark连接Hive读取数据

        scala> peopleInfo.show(4)        # show(numRows:Int),显示前n条记录

Spark连接Hive读取数据

        # show(truncate: Boolean),是否最多只显示20个字符,默认为true

        scala> peopleInfo.show(true)

Spark连接Hive读取数据

        scala> peopleInfo.show(6,false)       # show(numRows: Int, truncate: Boolean)

Spark连接Hive读取数据

3.4.3 Spark SQL操作(条件查询)

        scala> peopleInfo.where("gender='female'").show()       # 查询所有性别为女的记录

Spark连接Hive读取数据

        # 查询所有性别为女且年龄大于25岁的记录.

        scala> peopleInfo.where("gender='female' and age>25").show()

Spark连接Hive读取数据

        scala> peopleInfo.filter("gender='male'").show()       # 筛选性别为男的记录

Spark连接Hive读取数据

        # 查询所有记录的姓名和年龄信息,不显示性别信息.

        scala> peopleInfo.select("name","age").show()

Spark连接Hive读取数据

        # 但是如果将filter换成where,就不必select出gender字段了.

        scala> peopleInfo.select("name","age").where("gender='male'").show()

Spark连接Hive读取数据

        scala> peopleInfo.select("name","age","gender").filter("gender='male'").show()

Spark连接Hive读取数据

        # 统计所有记录的平均年龄、最大年龄、最小年龄、总人数

        scala> peopleInfo.describe("age").show()

Spark连接Hive读取数据

        # 统计性别为”male”和”female”的人数并显示结果

        scala> peopleInfo.groupBy("gender").count().show()

Spark连接Hive读取数据

        # 统计男性、女性分别的最大年龄并显示结果

        scala> peopleInfo.groupBy("gender").max("age").show()

Spark连接Hive读取数据

        # 还可以试着统计一下女性的平均年龄并显示结果

        scala> peopleInfo.where("gender='female'").groupBy("gender").mean("age").show()

Spark连接Hive读取数据

4. Hive3环境配置

4.1 安装配置Mysql

4.1.1 更新软件源

        $ sudo apt-get update        #更新软件源

Spark连接Hive读取数据

4.1.2 安装mysql

        $ sudo apt-get install mysql-server        #安装mysql

Spark连接Hive读取数据

        $ service mysql start        # 启动Mysql服务器

        $ service mysql stop        # 关闭Mysql服务器

Spark连接Hive读取数据

        $ sudo netstat -tap | grep mysql        #确认是否启动成功

Spark连接Hive读取数据

4.2 安装Hive

4.2.1 下载并解压Hive安装包

        $ sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local   # 解压到/usr/local中

Spark连接Hive读取数据

        $ cd /usr/local/

        $ sudo mv apache-hive-3.1.2-bin hive       # 将文件夹名改为hive

Spark连接Hive读取数据

        $ sudo chown -R dblab:dblab hive         # 修改文件权限

Spark连接Hive读取数据

        # 上面的hadoop: hadoop是用户组和用户名,如果当前使用其他用户名登录了Linux系统,则把hadoop替换成其他.

4.2.2 配置环境变量

        $ vim ~/.bashrc

        $ export HIVE_HOME=/usr/local/hive

        $ export PATH=$PATH:$HIVE_HOME/bin

        $ export HADOOP_HOME=/usr/local/hadoop

Spark连接Hive读取数据

        $ source ~/.bashrc

Spark连接Hive读取数据

4.2.3 修改Hive配置文件

        $ cd /usr/local/hive/conf

        $ mv hive-default.xml.template hive-default.xml        # 重命名为hive-default.xml

Spark连接Hive读取数据

        $ cd /usr/local/hive/conf

        $ vim hive-site.xml        # 新建一个配置文件hive-site.xml

Spark连接Hive读取数据

        # 在hive-site.xml中添加如下配置信息:

                <?xml version="1.0" encoding="UTF-8" standalone="no"?>

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

                <configuration>

                  <property>

                    <name>javax.jdo.option.ConnectionURL</name>

                    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>

                    <description>JDBC connect string for a JDBC metastore</description>

                  </property>

                  <property>

                    <name>javax.jdo.option.ConnectionDriverName</name>

                    <value>com.mysql.jdbc.Driver</value>

                    <description>Driver class name for a JDBC metastore</description>

                  </property>

                  <property>

                    <name>javax.jdo.option.ConnectionUserName</name>

                    <value>hive</value>

                    <description>username to use against metastore database</description>

                  </property>

                  <property>

                    <name>javax.jdo.option.ConnectionPassword</name>

                    <value>hive</value>

                    <description>password to use against metastore database</description>

                  </property>

                </configuration>

Spark连接Hive读取数据

4.3 配置Mysql

4.3.1 解压并拷贝mysql jdbc

        $ tar -zxvf mysql-connector-java-5.1.40.tar.gz         # 解压

Spark连接Hive读取数据

        # 将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下

        $ cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar  /usr/local/hive/lib

Spark连接Hive读取数据

4.3.2 启动并登陆Mysql shell

        $ service mysql start          #启动mysql服务

        $ mysql -u root -p           #登陆shell界面

Spark连接Hive读取数据

4.3.3 报错Access denied for user 'root'@'localhost'解决方案(未出现忽略)

        $ sudo vim /etc/mysql/debian.cnf        # 查看机器中的密码并复制

Spark连接Hive读取数据

Spark连接Hive读取数据

        $ mysql -udebian-sys-maint -p

        $ gkyTUQlkhgFMUrWm        # 输入刚才复制的密码

Spark连接Hive读取数据

        mysql> select version();        # 查看数据库版本

Spark连接Hive读取数据

        mysql> use mysql;        # 使用名为mysql的数据库

Spark连接Hive读取数据

        mysql> select user, plugin from mysql.user;        # 查看root对应的plugin值

Spark连接Hive读取数据

        # 如果上一步中root对应的plugin的值是mysql_native_password,那么使用命令update user set authentication_string =password('666666') where user='root';否则使用update user set authentication_string =password('666666'),plugin='mysql_native_password' where user='root';

        # 这里并非为mysql_native_password,选择后者作为命令.

mysql> update user set authentication_string =password('666666'),plugin='mysql_native_password' where user='root';        # 更新用户名为root的密码为666666

Spark连接Hive读取数据

        mysql> FLUSH PRIVILEGES;        # 刷新,使之生效

Spark连接Hive读取数据

4.3.4 配置Mysql

        # hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

        mysql> create database hive;   

Spark连接Hive读取数据

        # 将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码

        mysql> grant all on *.* to hive@localhost identified by 'hive';        

Spark连接Hive读取数据

        mysql> flush privileges;         #刷新mysql系统权限关系表

Spark连接Hive读取数据

4.3.5 启动Hive

        $ /usr/local/Hadoop/sbin/start-dfs.sh        #启动hadoop

Spark连接Hive读取数据

        $ cd /usr/local/hive

        $ ./bin/schematool -dbType mysql -initSchema        # 初始化数据库

Spark连接Hive读取数据

       $ hive        # 启动hive

Spark连接Hive读取数据

        # 启动进入Hive的交互式执行环境以后,会出现如下命令提示符:hive>

4.3.6 出现java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument.报错的解决方案(未出现忽略)

Spark连接Hive读取数据

        # 原因:com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的.

        # 分别查看hadoop安装目录下share/hadoop/common/libguava.jar版本

Spark连接Hive读取数据

Spark连接Hive读取数据

        # 如果两者版本不一致,删除版本低的,并拷贝高版本.

        $ sudo rm -rf /usr/local/hive/lib/guava-19.0.jar        # 删除低版本

        $ cp -r /usr/local/Hadoop/share/hadoop/common/lib/guava-27.0-jre.jar/usr/local/hive/lib/        # 拷贝高版本guava-27.0-jre.jar

Spark连接Hive读取数据

Spark连接Hive读取数据

4.3.7 出现Hive-WARN: Establishing SSL connection without server‘s identity verification is not recommended. 报错的解决方案(未出现忽略)

        # 进入hive-site.xml和hive-env.sh.template修改配置.

        $ cd /usr/local/hive/conf

        $ vim hive-site.xml

Spark连接Hive读取数据

       # 修改数据库配置为不使用SSL,将原有代码修改

       Jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=True&amp;useSSL=false

Spark连接Hive读取数据

        $ vim hive-env.sh.template

        export   HADOOP_HOME=/usr/local/hadoop        # 首行添加配置

Spark连接Hive读取数据

Spark连接Hive读取数据

4.4 HiveSQL操作

        hive> create database if not exists sparktest;        # 创建数据库sparktest

Spark连接Hive读取数据

        hive> show databases;         # 显示一下是否创建出了sparktest数据库

Spark连接Hive读取数据

        # 下面在数据库sparktest中创建一个表student

        hive> create table if not exists sparktest.student(id int,name string,gender string,age int);

Spark连接Hive读取数据

        hive> use sparktest;         # 切换到sparktest

        hive> show tables;         # 显示sparktest数据库下面有哪些表

Spark连接Hive读取数据

        hive> insert into student values(1,'Xueqian','F',23);         # 插入一条记录

Spark连接Hive读取数据

        hive> insert into student values(2,'Weiliang','M',24);         # 再插入一条记录

Spark连接Hive读取数据

        hive> select * from student;         # 显示student表中的记录

Spark连接Hive读取数据

5. Spark连接Hive读写数据

5.1 前期准备

5.1.1 修改配置文件

        $ .bashrc

        export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

        export CLASSPATH=$CLASSPATH: /usr/local/hive/lib

        export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

        export HIVE_CONF_DIR=/usr/local/hive/conf

        export HIVE_HOME=/usr/local/hive

        export HADOOP_HOME=/usr/local/hadoop

        export SPARK_HOME=/usr/local/spark

export PATH=$PATH:$HIVE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/sbin: $SPARK_HOME/bin

Spark连接Hive读取数据

5.1.2 补充Jar包

        # 将mysql-connector-java-5.1.40-bin.jar拷贝一份到 /usr/local/spark/jars 路径

          $ cp /usr/local/hive/lib/mysql-connector-java-5.1.40-bin.jar .

Spark连接Hive读取数据

        # 补充spark-hive_2.12-3.2.2.jar包到/usr/local/spark/jars路径

        $ cp -r /home/Downloads/spark-hive_2.12-3.2.2.jar /usr/local/spark/jars/

Spark连接Hive读取数据

5.2 使用Spark读取Hive数据

5.2.1 进入spark-shell

        $ cd /usr/local/spark/

        $ ./bin/spark-shell

Spark连接Hive读取数据

5.2.2 读取数据

        Scala> import org.apache.spark.sql.Row

        Scala> import org.apache.spark.sql.SparkSession

        Scala> case class Record(key: Int, value: String)

Spark连接Hive读取数据

        Scala> val warehouseLocation = "spark-warehouse"

Spark连接Hive读取数据

        Scala>val spark = SparkSession.builder().appName("Spark Hive Example").config("spark.sql.warehouse.dir",warehouseLocation).enableHiveSupport().getOrCreate()

Spark连接Hive读取数据

        Scala> import spark.implicits._

        Scala> import spark.sql

Spark连接Hive读取数据

        scala> sql("SELECT * FROM sparktest.student").show()        # 显示运行结果

Spark连接Hive读取数据

        $ cd /usr/local/hive

        $ ./bin/hive         # 启动Hive对比插入数据前后Hive中的数据变化

Spark连接Hive读取数据

       hive> use sparktest;

        hive> select * from student;         # 令查看sparktest.student表中的数据

Spark连接Hive读取数据

        # 下面,我们编写程序向Hive数据库的sparktest.student表中插入两条数据,请切换到

        spark-shell终端,输入以下命令:

        scala> import java.util.Properties

        scala> import org.apache.spark.sql.types._

        scala> import org.apache.spark.sql.Row

Spark连接Hive读取数据

        scala> val studentRDD = spark.sparkContext.parallelize(Array("3 Rongcheng M 26","4 Guanhua M 27")).map(_.split(" "))          # 设置两条数据表示两个学生信息

        scala> val schema = StructType(List(StructField("id", IntegerType, true),StructField("name", StringType, true),StructField("gender", StringType, true),StructField("age", IntegerType, true)))          # 设置模式信息

Spark连接Hive读取数据

        scala> val rowRDD = studentRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))           # 创建Row对象,每个Row对象都是rowRDD中的一行

        # 建立Row对象和模式之间的对应关系,把数据和模式对应起来

        scala> val studentDF = spark.createDataFrame(rowRDD, schema)

        scala> studentDF.show()        # 查看studentDF

Spark连接Hive读取数据

# 注册临时表

        scala> studentDF.registerTempTable("tempTable")       

        scala> sql("insert into sparktest.student select * from tempTable")

Spark连接Hive读取数据

        # 切换到刚才的hive终端窗口,输入命令查看Hive数据库内容的变化可以看到插入数据操作执行成功了.

        hive> select * from student;

Spark连接Hive读取数据文章来源地址https://www.toymoban.com/news/detail-427709.html

到了这里,关于Spark连接Hive读取数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spark读取hive表字段,区分大小写问题

    背景 spark任务读取hive表,查询字段为小写,但Hive表字段为大写,无法读取数据 问题错误: 如何解决呢? In version 2.3 and earlier, when reading from a Parquet data source table, Spark always returns null for any column whose column names in Hive metastore schema and Parquet schema are in different letter cases, no matter wh

    2024年01月23日
    浏览(43)
  • HDFS常用操作以及使用Spark读取文件系统数据

    掌握在Linux虚拟机中安装Hadoop和Spark的方法; 熟悉HDFS的基本使用方法; 掌握使用Spark访问本地文件和HDFS文件的方法。 启动Hadoop,在HDFS中创建用户目录“/user/hadoop” 在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,

    2024年04月22日
    浏览(30)
  • Spark---Spark连接Hive

    Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL 编译时可以包含 Hive 支持,也可以不包含。包含 Hive 支持的 Spark SQL 可以支持 Hive 表访问、UDF (用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在Spark SQL 中包含Hive 的库,并不需要事先安装 Hive。一般来说,最

    2024年02月03日
    浏览(33)
  • Ubuntu系统升级16.04升级18.04

      作为Linux发行版中的后起之秀,Ubuntu 在短短几年时间里便迅速成长为从Linux初学者到实验室用计算机/服务器都适合使用的发行版,目前官网最新版本是22.04。Ubuntu16.04是2016年4月发行的版本,于2019年4月停止更新维护。很多软件支持的Ubuntu最早版本也是18.04,所以考虑对现有

    2024年01月20日
    浏览(42)
  • 大数据编程实验一:HDFS常用操作和Spark读取文件系统数据

    这是我们大数据专业开设的第二门课程——大数据编程,使用的参考书是《Spark编程基础》,这门课跟大数据技术基础是分开学习的,但这门课是用的我们自己在电脑上搭建的虚拟环境进行实验的,不是在那个平台上,而且搭建的还是伪分布式,这门课主要偏向于有关大数据

    2024年04月10日
    浏览(38)
  • Ubuntu16.04 切换系统python和gcc版本

    ubuntu16.04中的gcc版本及版本切换 或者

    2024年04月12日
    浏览(28)
  • VMware虚拟机 Linux系统 Ubuntu 16.04 硬盘/磁盘扩容

    虚拟机 – VMware Workstation Pro Linux系统 – Ubuntu 16.04 LTS 硬盘容量从40G 扩容到 100G 查看硬盘大小及使用情况 终端: df -h 没有扩容前: 成功扩容后: 主要流程 扩展硬盘大小到100G 将未分配的60G分配到主分区 更新UUID值 超详细图文详解扩容步骤 查看磁盘的情况后,关闭客户机,可

    2024年01月21日
    浏览(52)
  • 【Linux】ubuntu使用root用户登录系统详细教程(ubuntu16.04+ubuntu20.04都有)

    目录 一:Ubuntu 16.04使用root用户登录系统 二:Ubuntu 20.04使用root用户登录系统 使用root用户登录系统【Ubuntu 16.04 + Ubuntu 20.04都有】 Ubuntu 系统版本确认是否为Ubuntu 16.04, 这里注意 不是VMware版本! 不同用户设置界面可能不同,但在 设置-关于 中都可以进行查看  修改Ubuntu系统

    2024年01月22日
    浏览(58)
  • 大数据系统常用组件理解(Hadoop/hive/kafka/Flink/Spark/Hbase/ES)

    一.Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。 Hadoop的核心是yarn、HDFS和Mapreduce。yarn是资源管理系统,实现资源调度,yarn是Hadoop2.0中的资源管理系统,总体上是master/slave结构。对于yarn可以粗浅将其理解

    2024年02月20日
    浏览(37)
  • Hive on Spark环境搭建

    Hive 引擎包括:默认 MR、tez、spark 最底层的引擎就是MR (Mapreduce)无需配置,Hive运行自带 Hive on Spark:Hive 既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark,Spark 负责采用 RDD 执行。 Spark on Hive : Hive 只作为存储元数据,Spark 负责 SQL 解析优化,语

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包