知识点1:Spark访问HIVE上面的数据

  配置注意点:.

    1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你${spark_home}/lib中(spark2.0之后是${spark_home}/jars下),不清楚就全部拷贝过去

    2.将Hive的配置文件hive-site.xml拷贝到${spark_home}/conf目录下

    3.因为使用ThriftJDBC/ODBC Server访问spark SQL,所以要修改hive-site.xml文件 

        <property>

          <name>hive.metastore.uris</name>

          <value>thrift://hadoop1:9083</value>

          <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>

        </property>

   4.启动hivede metastroe后台进程。执行${hive_home}/bin/hive --service metastore启动hive的service metastore后台进程。

     5.启动spark-shell访问hive上数据。在${spark_home}/bin下执行./spark-shell --master spark://master:7077 (可添加其他参数rg:--jars等参数)    

    

知识点2:Spark访问与HBase关联的Hive表

  创建关联HBase的Hive外表:

DROP TABLE IF EXISTS table_name;
CREATE EXTERNAL TABLE table_name (ROWKEY STRING,Name STRING,ADDRESS STRING )
ROW FORMAT DELIMITED
COLLECTION ITEMS TERMINATED BY ','
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping"=":key,A:Name,A:ADDRESS")
TBLPROPERTIES("hbase.table.name" = "table_name");

  如果创建的是内部表,删除了hive表,hbase上对应的表也会被删除,不建议使用这种方式。

  如果创建的是外部表,使用drop只是删除了hive的元数据,hbase表不会受影响。

  扩展:使用drop删除hive的外表后,如果重新创建该表并load数据到该表中,将会出现部分数据是上次插入的数据,导致总数据量大于第二次插入的数据量,出现这种情况的原因是因为drop删除表,只是删除了表的元数据,不会删除表中的数据,表中的数据存储在创建语句location指定的hdfs路径下,只要删除该文件即可。

  配置注意点:

    1.Hive的配置部署与知识点1一样

    2.拷贝如下jar包到你${spark_home}/lib中(spark2.0之后是${spark_home}/jars下),缺少这些jarj将会报错,本人是将hbase下所有jar都复制到了${spark_home}/lib中

      • hbase-protocol-1.1.2.jar
      • hbase-client-1.1.2.jar
      • hbase-common-1.1.2.jar
      • hbase-server-1.1.2.jar
      • hive-hbase-handler-1.2.1.jar
      • metrics-core-2.2.0.jar

    3.将HBase的配置文件hbase-site.xml拷贝到${spark_home}/conf目录下

    4.启动spark-shell访问与hbase关联的hive上数据。在${spark_home}/bin下执行./spark-shell --master spark://master:7077 (可添加其他参数rg:--jars等参数,eg:

./bin/spark-shell --master spark://Master36:7077 --jars /usr/local/spark/lib/hive-hbase-handler-1.2.1.jar,/usr/local/spark/lib/hbase-common-1.1.2.jar,/usr/local/spark/lib/hbase-client-1.1.2.jar,/usr/local/spark/lib/hbase-protocol-1.1.2.jar,/usr/local/spark/lib/hbase-server-1.1.2.jar,/usr/local/spark/lib/metrics-core-2.2.0.jar,/usr/local/spark/lib/guava-12.0.1.jar,/usr/local/spark/lib/htrace-core-3.1.0-incubating.jar

代码:

 /**
*下面是spark1.6.2读取hive的简单代码
*/
val sqlContext=new org.apache.spark.sql.hive.HiveContext(sc) import sqlContext.implicites._ val df=sqlContext.sql("select xxx from table_name").collect().foreach(println) /**
*下面是spark2.11读取hive的简单代码
*spark2.0版本访问hive配置部分将会简单一点
*/
import org.apache.spark.sql.SparkSession
val warehouseLocation="hdfs://master:9000/user/hive/warehouse" val spark =SparkSession.builder().appName("spark-hive").config("spark.sql.warehouse.dir",warehouseLocation).enableHiveSupport().getOrCreate() import spark.implicits._
import spark.sql spark.sql("selectxxx from xx").show
//将数据框保存到到指定路径中,可通过format来指定要保存的文件格式,repartition(n)设置输出文件的个数
dataFrame.repartition(1).write.format("csv").save("hdfs://master:9000/xxx")

出现的错误总结(解决方法仅供参考):

 1.error: Error creating transactional connection factory

  解决方法:在hive和spark集群都能正常使用情况下,检查一下hive的service metastore后台进程是否已经启动了

 2.Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

  解决方法:有可能是hive连接数据库部分出现了问题,在hive-site.xml文件中添加<property><name>hive.metastore.uris</name><value>thrift://hadoop1:9083</value></property>,如果配置后执行出现了新的错误:ERROR ObjectStore: Version information not found in metastore,这个新错误可能使用hive的jar包和存储元数据信息版本不一致而抛出的异常,可以在hive-site.xml文件中添加参数跳过版本的问题,<name>hive.metastore.schema.verification</name><value>false</value>,重启hive服务,如果还是继续报ERROR ObjectStore: Version information not found in metastore这个错误,说明刚刚配置的参数没有生效,接着要把hdfs-site.xml文件拷贝到${spark_home}/conf文件下,这可能是因为环境变量的问题引起的

 3.java.io.IOException: java.lang.reflect.InvocationTargetException

  解决方法:由于缺少htrace-core-3.1.0-incubating.jar包,引入该包即可。

 4.java.lang.ClassNotFoundException Class org.apache.hadoop.hive.hbase.HBaseSerDe not found

  解决方法:由于缺少相关的hbase的jar包(hbase-protocol-1.1.2.jar,hbase-client-1.1.2.jar,hbase-common-1.1.2.jar,hbase-server-1.1.2.jar等),可以在启动spark-shell通过--jars来添加。

 5.java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/util/Bytes

  解决方法:由于缺少guava-12.0.1.jar包,引入该包即可。

Spark访问Hive表的更多相关文章

  1. Spark 读写hive 表

    spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...

  2. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

    [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...

  3. Spark&Hive:如何使用scala开发spark访问hive作业,如何使用yarn resourcemanager。

    背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.m ...

  4. SparkSQL On Yarn with Hive,操作和访问Hive表

    转载自:http://lxw1234.com/archives/2015/08/466.htm 本文将介绍以yarn-cluster模式运行SparkSQL应用程序,访问和操作Hive中的表,这个和在 ...

  5. spark使用Hive表操作

    spark Hive表操作 之前很长一段时间是通过hiveServer操作Hive表的,一旦hiveServer宕掉就无法进行操作. 比如说一个修改表分区的操作 一.使用HiveServer的方式 v ...

  6. 使用spark对hive表中的多列数据判重

    本文处理的场景如下,hive表中的数据,对其中的多列进行判重deduplicate. 1.先解决依赖,spark相关的所有包,pom.xml spark-hive是我们进行hive表spark处理的关 ...

  7. 使用spark访问hive错误记录

    在spark集群中执行./spark-shell时报以下错误: 18/07/23 10:02:39 WARN DataNucleus.Connection: BoneCP specified but ...

  8. Spark访问与HBase关联的Hive表

    知识点1:创建关联Hbase的Hive表 知识点2:Spark访问Hive 知识点3:Spark访问与Hbase关联的Hive表 知识点1:创建关联Hbase的Hive表 两种方式创建,内部表和外部表 ...

  9. 【原创】大叔经验分享(65)spark读取不到hive表

    spark 2.4.3 spark读取hive表,步骤: 1)hive-site.xml hive-site.xml放到$SPARK_HOME/conf下 2)enableHiveSupport Sp ...

随机推荐

  1. Python xml模块

    xml模块 自己创建xml文档 import xml.etree.cElementTree as ET new_xml = ET.Element("personinfolist") ...

  2. xshell的优化和连接

    远程连接linux ###远程连接工具---xshell/SecureCRT/Putty 商业版(收费) 家庭版(免费) 一.xshell进行优化 1.打开文件属性 2.设置终端类型问linux,输入 ...

  3. ldap 集成harbor

    harbor: 1.6 默认配置文件在harbor.cfg,我们可以先不添加配置,直接在harbor web界面进行配置(harbor 1.6 如果db 启动失败提示postgresql 数据目录已存 ...

  4. 复旦大学2016--2017学年第一学期(16级)高等代数I期末考试第七大题解答

    七.(本题10分)  设 $A,B$ 均为 $m\times n$ 阶实矩阵, 满足 $A'B+B'A=0$. 证明: $$r(A+B)\geq\max\{r(A),r(B)\},$$并且等号成立的充 ...

  5. mvc 之 配置EF+oralce

    只需要在项目中加载nuGet包就可以了 操作:工具--nuGet包管理器--程序包管理器控制台 在 PM>处输入 install-package entityframework 加载sqlser ...

  6. loj#3 -Copycat

    原题链接:https://loj.ac/problem/3 题目描述: --- Copycat 内存限制:256 MiB 时间限制:1000 ms 输入文件: copycat.in 输出文件: cop ...

  7. 数组中的stdClass Object如何访问

    使用print_r($data)输出结果为 Array ( [0] => stdClass Object ( [color_item_no] => 1 [color_name] => ...

  8. 《温故而知新》JAVA基础三

    面向对象 现实定义: 购买手机 阐述描述配置尺寸啥的,要求能打电话,然后服务员给你拿出一款手机,你所阐述的就是类,服务员给你的就是对象 package com.xie public class Tel ...

  9. ssm 整合(方案二 maven)

    通过maven来整合ssm方便很多,至少不用去找jar包 具体架构如下: 1.配置pom.xml <project xmlns="http://maven.apache.org/POM ...

  10. 巧用同步请求处理react页面刷新问题

    很多时候,我们会遇到这种情况,组件加载需要请求后台数据,然后填充组件.那么我们一般会这样处理:如[使用异步请求的方式]代码: 加载组价的时候,未获得数据,render一个空的div: 然后异步请求数据 ...