非CDH的 hive on spark(spark on yarn)

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


总帖:CDH 6系列(CDH 6.0、CHD6.1等)安装和使用

1.电商用户画像环境搭建(SparkSql整合hive)
    Hive 的执行任务是将 hql 语句转化为 MapReduce 来计算的,Hive 的整体解决方案很不错,但是从查询提交到结果返回需要相当长的时间,查询耗时太长。
    这个主要原因就是由于Hive原生是基于MapReduce的,那么如果我们不生成MapReduceJob,而是生成 Spark Job,就可以充分利用 Spark 的快速执行能力来缩短 HiveHQL 的响应时间。
    本项目采用 SparkSql 与 hive 进行整合,通过 SparkSql 读取 hive 中表的元数据,即使用select查询时,把 HiveHQL 底层采用 MapReduce 来处理任务,导致性能慢的特点,    
    改为更加强大的 Spark 引擎来进行相应的分析处理,快速的为用户打上标签构建用户画像。

在使用select时,会调用spark进行计算:
            通过 SparkSql 读取 hive 中表的元数据,即使用select查询时,不生成MapReduceJob,而是生成 Spark Job,
            就可以充分利用 Spark 的快速执行能力来缩短 HiveHQL 的响应时间
            insert overwrite table 数据库名.表名 partition(分区字段名=分区字段值) 
            select 
            字段名1, 字段名2,     
            from_unixtime(unix_timestamp())  dw_date  
            from (select * from 数据库名.表名 where 分区字段名=分区字段值) a 
            join (select * from 数据库名.表名 where 分区字段名=分区字段值) b on a.字段名 = b.字段名;


----------------------------------------------------------------------------------------------------------------

    1.环境准备
        1.需要搭建一个zk集群,并启动zk集群。每台机器都启动zookeeper(启动zookeeper 都必须执行 时间同步命令:ntpdate ntp6.aliyun.com)
            cd /root/zookeeper/bin/
            zkServer.sh start
          查看集群状态、主从信息:
            1.cd /root/zookeeper/bin/
            2../zkServer.sh status # 查看状态:一个leader,两个follower
            3.“follower跟随者”的打印结果:
                JMX enabled by default
                Using config: /root/zookeeper/bin/../conf/zoo.cfg
                Mode: follower
            4.“leader领导者”的打印结果:
                JMX enabled by default
                Using config: /root/zookeeper/bin/../conf/zoo.cfg
                Mode: leader
            5.jps命令:QuorumPeerMain

        2.搭建 hadoop 集群:脚本一键启动(推荐) 
            如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。 
            1.启动 hdfs 集群:
                cd /root/hadoop/sbin    
                ./start-dfs.sh 
            2.停止 hdfs 集群:
                cd /root/hadoop/sbin 
                ./stop-dfs.sh

        3.搭建 hive 构建数据仓库 
            创建数据库 实际是在hdfs文件系统中 /user/hive/warehouse目录下 创建一个文件夹“数据库名.db”
            1.连接 Hive:
                cd /root/hive/bin
                ./hive 或 ./beeline -u jdbc:hive2://NODE1:10000 -n root 
            2.执行 show databases; 默认只有一个 数据库: default 
            3.创建新的数据库:create database [if not exists] 数据库名;

            4.进入 http://192.168.25.100:50070 或 http://node1:50070
                如果点击 user目录显示以下信息表示当前用户没有权限访问该目录,修改权限:hadoop fs -chmod -R 777 /user

            5.进入 /user/hive/warehouse,即能看到所创建的 数据库(文件夹):

            6.数据库相关操作
                1.创建数据库:create database [if not exists] 数据库名;
                2.显示所有数据库:show databases;
                3.删除数据库:(drop database 数据库名)
                    drop database [if exists] 数据库名 [restrict|cascade];
                    默认情况下,hive不允许删除含有表的数据库,要先将数据库中的表清空才能drop,否则会报错    
                      restrict:默认是restrict,表示有限制的
                    cascade:加入cascade关键字,可以强制删除一个数据库 
                    强制删除一个数据库:drop database if exists users cascade;
                 4.切换数据库:use 数据库名;
        4.搭建 spark 集群:此处使用spark HA集群
            1.在NODE1主节点上启动 start-all.sh 命令 启动 spark集群
                cd /root/spark/sbin
                ./start-all.sh
            2.然后在NODE2节点上 启动多一个 master节点(那么此时NODE1和NODE2都有master节点,并交由zookeeper来进行选举)
                cd /root/spark/sbin
                ./start-master.sh 
            3.停止spark集群
                在 上执行:cd /root/spark/sbin
                        ./stop-all.sh
    2.sparksql 整合 hive
        Spark SQL 主要目的是使得用户可以在 Spark 上使用 SQL,其数据源既可以是 RDD,也可以是外部的数据源 (比如文本、 Hive、 Json 等)。
        Spark SQL 的其中一个分支就是 Spark on Hive, 也就是使用 Hive 中 HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,
        可以近似认为仅将物理执行计划从 MR 作业替换成了 Spark 作业。SparkSql 整合 hive就是获取 hive 表中的元数据信息,然后通过 SparkSql 来操作数据。

        1.整合步骤:
            1.需要将 /root/hive/conf/hive-site.xml 文件拷贝到 /root/spark/conf/ 目录下,这样就可以通过这个配置文件找到 Hive 的元数据以及数据存放位置。
              hive-site.xml中:配置了hive的元数据对应存储的数据库
                  cp /root/hive/conf/hive-site.xml /root/spark/conf
                  scp /root/hive/conf/hive-site.xml NODE2:/root/spark/conf
                  scp /root/hive/conf/hive-site.xml NODE3:/root/spark/conf

            2.如果 Hive 的元数据存放在 Mysql 中,我们还需要准备好 Mysql相关驱动,比如:mysql-connector-java-5.1.32.jar
              因为spark和hive整合之后,任务都运行在spark引擎中,因此spark引擎需要MySQL建立连接来读取hive表的元数据信息,所以需要MySQL驱动
                  cp /root/hive/lib/mysql-connector-java-5.1.32.jar /root/spark/jars
                 scp /root/hive/lib/mysql-connector-java-5.1.32.jar NODE2:/root/spark/jars
                  scp /root/hive/lib/mysql-connector-java-5.1.32.jar NODE3:/root/spark/jars

        2.进入 spark-sql 客户端命令行界面出现的日志太多的话,可以修改 spark 的日志输出级别:配置为WARN级别的话,则可以把info信息都屏蔽掉不显示了
                cd /root/spark/conf/
                mv log4j.properties.template log4j.properties  
                vim log4j.properties 
                把 log4j.rootCategory=INFO, console 修改为 log4j.rootCategory=WARN, console

        3.测试 sparksql 整合 hive 是否成功 
            1.先启动 hadoop 集群,再启动 spark 集群,确保启动成功之后执行命令。
                  1.如果使用的是 spark 2.0 之前的版本,启动命令是:指明 master 地址、每一个 executor 的内存大小、一共所需要的核数、mysql 数据库连接驱动
                    /root/spark/bin/spark-sql \
                    --master spark://NODE1:7077 \
                    --executor-memory 1g \
                    --total-executor-cores 4 \
                    --driver-class-path /root/hive/lib/mysql-connector-java-5.1.35.jar
                  
                   2.如果使用的是 spark 2.0 之后的版本,启动命令是:需要指定表数据的hdfs存储路径,才能把spark-sql命令操作的数据库也存储到hdfs文件系统中
                    /root/spark/bin/spark-sql \
                    --master spark://NODE1:7077 \
                    --executor-memory 1g \
                    --total-executor-cores 4 \
                    --conf spark.sql.warehouse.dir=hdfs://NODE1:9000/user/hive/warehouse
  
            2.执行成功后的界面:进入到 spark-sql 客户端命令行界面
            3.接下来就可以通过 sql 语句来操作 MySQL数据库中的 hive 表的元数据信息。
                  查看当前 hive 有哪些数据库:show databases;
                 创建新的数据库:create database t_db;    
                使用该数据库:use t_db;


 

            4.使用 /root/spark/bin/spark-sql 命令操作 hive数据库表 之后,便会在同样的当前 /root/spark/bin 目录下生成 spark-warehouse文件夹,
                该文件夹用于存储“使用该命令所创建的”表和表数据的信息。    
              虽然此时 使用spark-sql命令存储数据的目录 和 使用hive命令存储数据的目录 并不是同一个目录,
              但是均可以使用spark-sql命令和hive命令操作访问同一个hive数据库表数据,因为此时hive和spark共用同一份元数据库。

            5.hive命令操作的数据库则在hdfs文件系统中,这是利于提交数据到spark集群中运行的。
              而目前spark-sql命令操作的数据库仍然在本地文件系统下的 /root/spark/bin/spark-warehouse/数据库名/表名,
              这是不利于提交数据到spark集群中运行的,此时仍然没有整合成功。
              解决:要把spark-sql命令操作的数据库也存储到hdfs文件系统中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: CDH(Cloudera's Distribution for Hadoop)是Cloudera公司针对Hadoop生态系统进行的一系列软件包和工具的集成,其中包括Hive on Spark的配置。 Hive是一个建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的查询语言HiveQL,方便用户使用SQL语言对存储在Hadoop中的大型数据集进行查询和分析。Spark是一个快速、通用的数据处理引擎,具有内存计算的特性,能在内存中高效地处理大规模数据。 在CDH中配置Hive on Spark需要进行以下步骤: 1. 确保CDH集群已经正确安装和配置,并且已经启动了Hive服务和Spark服务。 2. 在CDH管理界面中,选择Hive服务,然后点击“配置”选项卡。 3. 在配置页面中,找到“Hive 服务”下的“Ancillary Service Configuration”部分。在“Spark”部分中,填写正确的Spark主节点地址和端口号。 4. 点击“保存并重启”以应用配置更改。 5. 在CDH管理界面中,选择Spark服务,然后点击“配置”选项卡。 6. 在配置页面中,找到“Spark 特定”的部分。在“Spark 实例模式”中选择“Standalone”,表示将使用独立的Spark集群。 7. 在“Spark 主节点地址”中填写正确的Spark主节点的地址。 8. 点击“保存并重启”以应用配置更改。 9. 配置完成后,可以使用HiveQL语句在Hive中使用Spark进行查询和分析数据。在Hive命令行或Hue界面中,编写需要的查询语句并执行。 通过以上步骤,就可以在CDH上成功配置Hive on Spark。这样就可以同时利用HiveSpark的强大功能,实现对大规模数据的高效分析和处理。 ### 回答2: CDH配置Hive on Spark是指在CDH平台上配置使用Spark作为Hive的计算引擎。下面是具体的步骤: 1. 首先,确保已经在CDH平台上安装HiveSpark组件。 2. 在Hive的配置文件中,需要添加以下参数来启用Hive on Sparkhive.execution.engine = spark hive.spark.client.connect.timeout = 300s hive.spark.client.server.connect.timeout = 300s 3. 在Spark的配置文件中,需要增加以下参数来支持Hive on Sparkspark.master = yarn-client spark.deploy.mode = client spark.submit.deployMode = client spark.yarn.queue = default spark.executor.instances = 10 spark.executor.memory = 4G spark.executor.cores = 2 spark.driver.memory = 4G 4. 然后,重启HiveSpark的服务。 5. 运行Hive脚本或者Hive命令时,可以在Hive中使用"hive.execution.engine=spark"设置为Spark引擎,或者在命令行中使用"--engine=spark"参数。 配置完成后,Hive会将相应的作业提交给Spark来执行,利用Spark的分布式计算能力加速Hive查询的执行速度。需要注意的是,配置Hive on Spark需要确保CDH平台中的HiveSpark是兼容的,并且调整Spark的资源配置以满足计算需求。 总之,通过CDH配置Hive on Spark可以充分发挥Spark的并行处理能力,提高Hive查询的执行效率和性能。 ### 回答3: CDH是一种大数据解决方案,用于配置Hive on Spark的步骤如下: 1. 首先,确保已安装CDH集群并启动了HiveSpark组件。如果还没有安装,请按照CDH文档进行安装和配置。 2. 检查HiveSpark的版本兼容性。Hive on Spark需要HiveSpark版本之间的兼容性,查看CDH文档以了解哪些版本适用于您的集群。 3. 在Hive配置文件中启用HiveSpark支持。打开Hive配置文件(hive-site.xml),设置hive.execution.engine为spark。 4. 配置Spark属性。在Spark配置文件(spark-defaults.conf)中,设置spark.master为yarn-client或yarn-cluster,这取决于您的CDH集群配置。还可以通过设置其他属性来优化Spark执行引擎的性能。 5. 启动Hive服务。重启Hive服务以使配置更改生效。您可以使用以下命令重新启动Hive服务: sudo service hive-server2 restart 6. 测试Hive on Spark。使用Hive命令行或其他Hive客户端,运行一些Hive查询并确认它们是否在Spark上执行。 配置Hive on Spark可以提供更好的性能和资源利用率。而且,使用Spark作为执行引擎还可以充分利用Spark提供的丰富的数据处理功能和API。通过使用CDHHive on Spark配置,您可以更好地处理和分析大规模的数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值