Hive on spark的搭建记录 原

    注:Hadoop-2.7.7、Hive-2.1.1、spark-1.6.0-bin-hadoop2.6,操作系统是Ubuntu18  64bit。最近做Hive on spark的任务,记录下。

1、搭建伪分布式的Hadoop

  • 从hadoop下载Hadoop-2.7
  • etc/hadoop/,修改core-site.xml

List-1.1

<configuration>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/software/docker/hadoop/hadoop-2.7.7/data/tmp</value>
</property>	
<property>
      <name>fs.defaultFS</name>
      <value>hdfs://127.0.0.1:9000</value>
</property>
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
</configuration>
  •  /etc/hadoop下,hadoop-env.sh中修改JAVA_HOME,指向JAVA的安装目录。
  • /etc/hadoop下,hdfs-site.xml的文件内容如下

List-1.2

<configuration>
<property>
      <name>dfs.datanode.data.dir</name>
      <value>/opt/software/docker/hadoop/hadoop-2.7.7/data/data</value>
</property>
<property>
      <name>dfs.namenode.name.dir</name>
      <value>/opt/software/docker/hadoop/hadoop-2.7.7/data/name</value>
</property>
<property>
      <name>dfs.replication</name>
      <value>1</value>
</property>
</configuration>
  • cp  mapred-site.xml.template   mapred-site.xml,之后文件mapred-site.xml的内容如下:

List-1.3

<configuration>
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>
</configuration>
  • yarn-site.xml的内容如下:

List-1.4

<configuration>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
</configuration>

    将Hadoop写到环境变量里面,在/etc/profile中加入如下

List-1.5

#hadoop
export HADOOP_HOME=/opt/software/docker/hadoop/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

   启动Hadoop,命令行执行start-dfs.sh和start-yarn.sh,没有报错,之后命令行运行"hadoop  fs  -ls  /"没出错,就ok了。如果报错,可以去看日志文件。

2、安装Hive-2.1.1

  • 从官网下载Hive-2.1.1
  • 在conf下,"cp  hive-default.xml.template   hive-site.xml"
  • 之后修改hive-site.xml,在开始处加入如下

List-2.1

<property>
  <name>system:java.io.tmpdir</name>
  <value>/tmp/hive/java</value>
</property>
<property>
  <name>system:user.name</name>
  <value>${user.name}</value>
</property>
  • 之后"cp  hive-log4j2.properties.template   hive-log4j2.properties",修改hive-log4j2.properties中日志文件的位置,之后我们就可以看Hive的日志(这点很重要,我们可以通过日志看具体报错信息)。
  • 我们使用mysql来存储hive的元信息,所以修改hive-site.xml中javax.jdo.option.ConnectionUserName的值为mysql连接的username,修改javax.jdo.option.ConnectionPassword的值为连接mysql的密码,修改javax.jdo.option.ConnectionURL的值为jdbc:mysql://xxx.xxx.xxx.xxx:3306/hive2。

 将Hive配置到环境变量里面,修改/etc/profile,加入如下内容,之后"source /etc/profile"

List-2.2

#hive
#export HIVE_HOME=/opt/software/docker/hadoop/apache-hive-2.1.1-bin
#export PATH=$HIVE_HOME/bin:$PATH

    之后命令行执行"schematool -initSchema -dbType mysql",没有报错,报错的话,看Hive日志。

    命令行执行hive命令,就进入Hive CLI了,之后可以执行创建表等操作。

3、Hive  on  park

   因为Hive的计算引擎默认是map reduce,比较慢,我们想要将Hive的计算引擎设置为Spark。

   这是最坑的部分。

   要很注意的一点是hive和的版本要和spark的版本对应,可以看这里 。由于上面我们使用的Hive版本2.1.1,所以,我们选用的Spark版本是1.6.0。

    不能使用从apache spark官网下载的bin直接使用,因为那个里面,有与hadoop/hive有关的代码,我们要自己编译。

1、编译Spark1.6.0

github下载spark源码。安装scala,我安装的是2.12,/etc/profile如下

List-3.1.1

#scala
export SCALA_HOME=/opt/software/tool/scala2.12
export PATH=$SCALA_HOME/bin:$PATH

之后进行spark源码目录,使用List-3.1.2中的命令进行打包,之后会看到一个名为"spark-1.6.0-bin-hadoop2-without-hive.tgz"的新文件。

List-3.1.2

./make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.6,parquet-provided"

其实我的Spark伪分布式是用官网下的包安装的,只是用List-3.1.2中lib下的spark-assembly-1.6.0-hadoop2.6.0.jar替换官网二进制安装的spark的lib下的spark-assembly-1.6.0-hadoop2.6.0.jar。

在SPARK_HOME/conf下,"cp  spark-defaults.conf.template  spark-defaults.conf",spark-defaults.conf的内容如下List-3.2:

List-3.2

spark.master                     spark://127.0.0.1:7077
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://127.0.0.1:9000/opt/applogs/spark
spark.serializer                 org.apache.spark.serializer.KryoSerializer
spark.driver.memory              512M
spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

    "cp  spark-env.sh.template  spark-env.sh",之后spark-env.sh内容如下,网上说的SPARK_DIST_CLASSPATH=%(hadoop  classpath)不生效。

List-3.3

export JAVA_HOME=/opt/software/tool/jdk1.8
export HADOOP_HOME=/opt/software/docker/hadoop/hadoop-2.7.7
export SCALA_HOME=/opt/software/tool/scala2.12
export HADOOP_CONF_DIR=/opt/software/docker/hadoop/hadoop-2.7.7/etc/hadoop
export SPARK_MASTER_IP=mjduan-host
export SPARK_WORKER_MEMORY=3072M
export SPARK_DIST_CLASSPATH=$(/opt/software/docker/hadoop/hadoop-2.7.7/bin/hadoop classpath);

要修改Hive的hive-site.xml:

将hive.execution.engine的值改为spark。

在hdfs上新建目录/yarn,并将List-3.1.2中得到的spark-assembly-1.6.0-hadoop2.6.0.jar放到hdfs的/yarn目录下;在hdfs上新建目录/opt/applogs/spark。

之后在hive-site.xml中加入如下List-3.4:

List-3.4

</property>
    <property>
    <name>spark.master</name>
    <value>spark://127.0.0.1:7077</value>
  </property>
  <property>
    <name>spark.eventLog.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>spark.eventLog.dir</name>
    <value>hdfs://127.0.0.1:9000/opt/applogs/spark</value>
  </property>
<property>
    <name>spark.executor.memory</name>
    <value>512M</value>
</property>
<property>
    <name>spark.serializer</name>
    <value>org.apache.spark.serializer.KryoSerializer</value>
</property>
<property>
  <name>spark.yarn.jars</name>
  <value>hdfs://hdfs:9000/yarn/spark-assembly-1.6.0-hadoop2.6.0.jar</value>
</property>
<property> 
<name>hive.enable.spark.execution.engine</name> 
<value>true</value> 
</property>
<property>
<name>spark.home</name>
<value>/opt/software/docker/hadoop/spark-1.6.0-bin-hadoop2.6</value>
</property>
<property>
<name>spark.executor.extraJavaOptions</name>
<value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"</value>
</property>

    之后重启Hive;进入SPARK_HOME/sbin,执行./start-all.sh,可以查看日志,日志中有Spark的UI界面地址。

    命令行执行hive,进入hive  CLI,执行命令"set  hive.execution.engine;"可以看到当前正在使用的计算引擎。在hive  CLI中创建表、插入数据,没有报错,基本ok了。

4、Hive支持update/delete操作

    默认情况下,Hive中我们执行update/delete语句,会报错List-4.1中的错误,我们要修改hive-site.xml文件,怎么修改参考这篇。之后重启hive,如果要对表中的数据进行update/delete,那么建的表是"clustered by xxxxx..."这种的,不然会报

List-4.1

 Attempt to do update or delete using transaction manager that does not support these operations

List-4.2

 Attempt to do update or delete on table default.test that does not use an AcidOutputFormat or is not bucketed

Reference:

    涉及的东西很多,到处搜。

  1. https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
  2. https://www.cnblogs.com/breg/p/5552342.html
  3. http://www.aboutyun.com/thread-22954-1-1.html

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维经验分享

tomcat shutdown.sh结束不了,Could not contact localhost:8005

使用./shutdown.sh关闭Tomcat,有时会关闭成功,有时会出现关闭错误;

23240
来自专栏运维经验分享

CentOS7修改MongoDB默认数据存储路径

这里, 一定是 /var/lib/mongo,而不是/var/lib/mongo/,多了个斜杠,rsync将转储目录复制到安装点,而不是转移成一个包含内容mon...

36120
来自专栏运维经验分享

Jenkins的安装和使用(Centos7)

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/it_lihongmin/article/details/8...

14420
来自专栏运维经验分享

linux 下执行shutdown.sh命令不能关闭tomcat进程的解决方法

版权声明:欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置标出原文地址。 https://blog.csdn.net/wohiusdashi/ar...

50530
来自专栏运维经验分享

org.apache.catalina.startup.Catalina stopServer SEVERE

在测试nginx反向代理 时在同一个liunx上配置了三个tomcat7,startup.sh时正常启动。shutdown.sh时报错如下:

60130
来自专栏运维经验分享

Tomcat shutdown.sh不能关掉tomcat进程的解决方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Diaochengrui1989/article/detail...

71220
来自专栏Jimoer

在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。

  今天在写服务器的perl脚本的时候,在完成一版脚本打算通过crontab来测试一下呢,因为直接执行脚本文件是没有问题的,但是当配置到crontab定期执行时...

18120
来自专栏程序生活

大数据入门与实战-HDFS的常用操作

与start对应的stop为停止相关的进程,比如sbin/hadoop-daemon.sh stop namenode

9320
来自专栏运维经验分享

grep与egrep

个人觉得egrep比较好用,感觉改良了grep的一些不可以直接操作的东西,但是总体来说还是没太大区别的,都是一个过滤工具。

31320
来自专栏大数据实战演练

使用zkcli.sh来管理SolrCloud配置文件

Solr官方提供了一个Zookeeper插件 – zkcli.sh,使用该工具,可以实现将本地文件上传到zookeeper的Znode上。

20920

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励