zoukankan      html  css  js  c++  java
  • Hive on Spark

    Hive On Spark

    一、概述

    Hive 是一种数据仓库,即是一种sql翻译器,hive可以将sql翻译成mapreduce程序在hadoop中去执行,默认支持原生的Mapreduce引擎。从hive1.1版本以后开始支持Spark。可以将sql翻译成RDD在spark里面执行。Hive支持的spark是那种spark-without-hive,即没有编译支持hive包的spark。

    二、安装版本及软件

    需要安装:scala-2.12、jdk1.8、hive-2.1.1、spark-1.6.3-bin-hadoop2.4-without-hive、hadoop-2.x.本例用的hadoop-2.7.3

    三、安装前的准备

    1、下载软件

    1)下载scala-2.12

    https://downloads.lightbend.com/scala/2.12.3/scala-2.12.3.tgz

           2)下载hive-2.1.1

             http://mirror.bit.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-bin.tar.gz

            3)下载spark-1.6.3-bin-hadoop2.4-without-hive

             http://mirror.bit.edu.cn/apache/spark/spark-1.6.3/spark-1.6.3-bin-hadoop2.4-without-hive.tgz

            4)下载hadoop-2.7.3

              https://hadoop.apache.org/releases.html

    四、  安装

    创建一个目录,将所有的包都解压到该目录下,统一配置。

    做完上述步骤后,按如下方式添加环境变量:

    # cat /etc/profile

    export JAVA_HOME=/usr/local/java

    export PATH=$JAVA_HOME/bin:/usr/local/bin:$PATH

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    export SCALA_HOME=/usr/share/scala/

    export HADOOP_HOME=/da/hadoop-2.7.3/

    export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"

    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    export SPARK_HOME=/da/spark-1.6.3-bin-hadoop2.4-without-hive

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

    export CLASSPATH=.:${JAVA_HOME}/lib:${SCALA_HOME}/lib:${HIVE_HOME}/lib:$CLASSPATH

    # source /etc/profile

    1、  hadoop安装和启动

    1)  设置免密码登录

    # ssh-keygen –t rsa

    一路回车

    会在当前用户的家目录下的.shh目录下生成密钥和公钥(id_rsa、id_rsa.pub)

    在.ssh目录下创建authorithed.keys文件,将id_rsa.pub文件内容copy到authorithed.keys里面:

    #cat id_rsa.pub >authorithed.keys

    并修改权限为600:

    #chmod 600 authorithed.keys

        

    2)  创建需要用到的目录

    #mkdir /da/Hadoop/{tmp,var,dfs}

    #mkdir /da/Hadoop/dfs/{name,data}

         

    3)  修改配置文件

    !修改core-site.xml

      <property> 

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

              <value>/da/hadoop/tmp</value> 

         </property> 

         <property> 

              <name>fs.default.name</name> 

              <value>hdfs://192.168.1.11:9000</value> 

         </property>

    !修改hadoop-env.sh

    将export   JAVA_HOME=${JAVA_HOME}  修改为:

    export JAVA_HOME=/usr/local/java

    !修改hdfs-site.xml

        <property> 

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

          <value>/da/hadoop/dfs/name</value> 

        </property> 

        <property> 

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

          <value>/da/hadoop/dfs/data</value> 

        </property> 

        <property> 

          <name>dfs.replication</name> 

          <value>1</value> 

        </property> 

        <property> 

             <name>dfs.permissions</name> 

             <value>false</value> 

    </property>

       !在该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,然后改名为mapred-site.xml,并进行修改:

         # cp mapred-site.xml.template mapred-site.xml

         # cat mapred-site.xml

          <property> 

          <name>mapred.job.tracker</name> 

          <value>192.168.1.11:49001</value> 

    </property> 

    <property> 

          <name>mapred.local.dir</name> 

          <value>/da/hadoop/var</value> 

    </property> 

    <property> 

           <name>mapreduce.framework.name</name> 

           <value>yarn</value> 

    </property>

    !修改yarn-site.xml

         <property> 

               <name>yarn.resourcemanager.hostname</name> 

               <value>192.168.1.11</value> 

        </property> 

          

        <property> 

               <name>yarn.resourcemanager.address</name> 

               <value>${yarn.resourcemanager.hostname}:8032</value> 

        </property> 

          

          <property> 

               <name>yarn.resourcemanager.scheduler.address</name> 

               <value>${yarn.resourcemanager.hostname}:8030</value> 

          </property> 

          

          <property>    

               <name>yarn.resourcemanager.webapp.address</name> 

               <value>${yarn.resourcemanager.hostname}:8088</value> 

          </property> 

          

          <property> 

               <name>yarn.resourcemanager.webapp.https.address</name> 

               <value>${yarn.resourcemanager.hostname}:8090</value> 

          </property> 

          

          <property> 

               <name>yarn.resourcemanager.resource-tracker.address</name> 

               <value>${yarn.resourcemanager.hostname}:8031</value> 

          </property> 

          

          <property> 

               <name>yarn.resourcemanager.admin.address</name> 

               <value>${yarn.resourcemanager.hostname}:8033</value> 

          </property> 

          

          <property> 

               <name>yarn.nodemanager.aux-services</name> 

               <value>mapreduce_shuffle</value> 

          </property> 

          

          <property> 

               <name>yarn.scheduler.maximum-allocation-mb</name> 

               <value>8182</value>     

          </property> 

          

          <property> 

               <name>yarn.nodemanager.vmem-pmem-ratio</name> 

               <value>3.1</value> 

          </property> 

          

          <property> 

               <name>yarn.nodemanager.resource.memory-mb</name> 

               <value>2048</value> 

           </property> 

          

          <property>  

               <name>yarn.nodemanager.vmem-check-enabled</name> 

               <value>false</value> 

           </property>

    # 内存越大越好,这里只是做测试。

    2、启动hadoop

    如果是第一次启动hadoop,在启动之前需要先进行初始化。

    # hadoop  namenode –format

    !!!初始化操作只进行一次

    接下来进入到sbin目录下:

    # ./start-all.sh

    !!可以直接访问如下地址:

     http://ip:50070、http://ip:50090、http://ip:8088

    2、  安装配置spark

    修改conf文件夹下的如下文件:

    !#cp   spark-env.sh.template   spark-env.sh 

    export SCALA_HOME=/usr/share/scala/

    export JAVA_HOME=/usr/local/java

    export HADOOP_HOME=/da/hadoop-2.7.3/

    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

    export SPARK_HOME=/da/spark-1.6.3-bin-hadoop2.4-without-hive

    export SPARK_MASTER_IP=192.168.1.11

    export SPARK_EXECUTOR_MEMORY=2048m

    export SPARK_DRIVER_MEMORY=5g

    #设置spark 数据临时存放目录,一定要放在法存储的地方,否则数据量太大会报错。
    export SPARK_LOCAL_DIRS=/data/sparktmp

    !#cp   spark-defaults.conf.template   spark-defaults.conf  

       spark.master                     spark://192.168.1.11:7077

    spark.eventLog.enabled           true

    spark.eventLog.dir               hdfs://192.168.1.11:8021/directory

    spark.history.fs.logDirectory file:/data/spark-events

    spark.serializer                 org.apache.spark.serializer.KryoSerializer

    spark.driver.memory             2048M

    spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

    spark.driver.extraJavaOptions -Duser.timezone="Asia/Shanghai"

    spark.executor.cores 6

    spark.executor.memory 12g

    spark.hadoop.validateOutputSpecs false
    spark.ui.reverseProxyUrl  http://spark.eee.com 
    spark.ui.reverseProxy true

    1)       在HDFS上创建目录

    因为上面的配置中让spark将eventLog存到HDFS的directory目录下,所以需要执行hadoop命令,在HDFS上创建directory目录,创建目录命令是:

    #hadoop   fs  -mkdir  -p   /directory 

     #hadoop   fs  -chmod  777  /directory  

    2)  启动spark

    到sbin目录下:

    # ./start-all.sh

    !!!可以访问如下地址:

    http://ip:8080

    3、  配置hive

    1)  创建HDFS目录

     hive的文件存储在hadoop提供的HDFS分布式文件系统里,需要调用hadoop命令,在hdfs上创建几个目录。

    #hadoop   fs   -mkdir  -p   /da/hive/warehouse  

    #hadoop  fs   -chmod   777   /da/hive/warehouse

    #hadoop   fs   -mkdir -p   /tmp/hive

    #hadoop   fs   -chmod 777  /tmp/hive    

    2)       修改配置文件

    !#cp    hive-env.sh.template    hive-env.sh 

      export HADOOP_HOME=/da/hadoop-2.7.3/

      export HIVE_CONF_DIR=/da/apache-hive-2.1.1-bin/conf

      export HIVE_AUX_JARS_PATH=/da/apache-hive-2.1.1-bin/lib

     !#cp  hive-default.xml.template  hive-site.xml 

    <property>
            <name>hive.metastore.uris</name>
            <value>thrift://10.10.89.219:9083</value>
        </property>
        <property>
            <name>hive.server2.thrift.port</name>
            <value>10000</value>
        </property>

       <property>

        <name>hive.execution.engine</name> 

        <value>spark</value> 

    </property>

    <property>

        <name>hive.metastore.schema.verification</name> 

        <value>false</value> 

    </property>

    <property>

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

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

    </property>

    <property>

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

    <value>root</value>

    </property>

     <property>

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

    <value>1qaz*@WSX</value> 

    </property>

     <property> 

                    <name>hive.enable.spark.execution.engine</name> 

                    <value>true</value> 

    </property> 

     <property> 

                    <name>spark.home</name> 

                    <value>/da/spark-1.6.3-bin-hadoop2.4-without-hive</value> 

    </property> 

      <property> 

                    <name>spark.master</name> 

                    <value>spark://192.168.1.11:7077</value> 

    </property> 

    <property> 

            <name>spark.submit.deployMode</name> 

            <value>client</value> 

    </property> 

      

     <property> 

          <name>spark.serializer</name> 

          <value>org.apache.spark.serializer.KryoSerializer</value> 

    </property> 

     <property> 

           <name>spark.eventLog.enabled</name> 

           <value>true</value> 

      </property> 

          

        <property> 

           <name>spark.eventLog.dir</name> 

           <value>hdfs://192.168.1.11:9000/directory</value> 

        </property> 

          

     <property> 

           <name>spark.executor.memory</name> 

           <value>2048m</value> 

      </property>

    3)       将mysql驱动包copy到hive的llib目录下:

     !自己去网上下载mysql-connector-java-5.1.43-bin.jar

    # cp mysql-connector-java-5.1.43-bin.jar  /da/apache-hive-2.1.1-bin /lib

    4)       将/da/spark-1.6.3-bin-hadoop2.4-without-hive/lib目录下的spark-assembly-1.6.3-hadoop2.4.0.jar包拷贝到/da/apache-hive-2.1.1-bin/lib目录下。

    # cp /da/spark-1.6.3-bin-hadoop2.4-without-hive/lib/spark-assembly-1.6.3-hadoop2.4.0.jar /da/apache-hive-2.1.1-bin/lib

    4、  初始化hive元数据库

    进入到hive的bin目录下:

    # ./schematool  -initSchema  -dbType  mysql  

    5、  启动hive,进入hive的bin目录

    启动metastore   server:

    # nohup ./hive  --service  metastore  >>/data/nohup.out  2>&1 &

    启动hive  cli:

    #./hive

     默认启动hive  cli,更多的server使用命令:#hive  --service  --help查看

    6、  创建一张表

    1. >create table  test(id int, name string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE;  
    2. ' '表示此表的内容是以制表符分割的,所以不能使用空格,否则不识别数据。

    添加一些数据到表test里面

    #vim /da/test.txt

    1           test1

    2           test2

    3           test3

    >load data local inpath'/da/test.txt' into table test;  

    7、  对hive on spark进行测试

    >select  count(*)  from  test;

    如果该命令能够正确执行,证明部署成功。

    如果Hive On Spark运行成功,可以在spark的UI界面上查看, Hive中成功调用了Spark集群来执行任务。访问下面的地址:http://ip:8080/  

  • 相关阅读:
    git使用小结
    关于vtordisp知多少?
    虚函数与虚继承寻踪
    最简git Server配置
    StarUML序
    CacheHelper对缓存的控制
    Web Service的一些经验和技巧总结
    月份信息二维坐标图绘制(绘制箭头算法)续
    dynamic与xml的相互转换
    如何将XML与OBJECT进行相互转换(泛型以及通用方法)
  • 原文地址:https://www.cnblogs.com/cuishuai/p/7496228.html
Copyright © 2011-2022 走看看