• 部署单机版的hadoop+hive小记


    前言

    在本机模拟器的ubuntu18版本上进行的部署测试,参考的官方文档:

    使用的版本:

    • hadoop: 3.2.1
    • hive: 3.1.2

    全程是使用root账号进行的配置。

    hadoop安装配置

    hadoop使用的是虚拟集群,即单机模拟集群,datanode和namenode在同一个节点。

    1. 下载安装

    在官方下载最新版本压缩包解压到服务器就好

    2. 环境变量配置

    这里用到了这几个变量,我是直接配置在了/etc/profile里。
    这里也有HIVE使用到的变量,一并设置了,后续Hive的时候就不再提这块的内容。

    • export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    • export PDSH_RCMD_TYPE=ssh
      - 这个变量很重要,由于hadoop连接datanode节点,默认会使用pdsh,一开始没有配置的时候怎么也连不上
    • export HIVE_HOME=/root/apache-hive-3.1.2-bin
    • export PATH=$HIVE_HOME/bin:$PATH
    • export HADOOP_HOME=/root/hadoop-3.2.1

    3. SSH配置

    启动SSH服务

    service ssh start
    

    确保可以不用密码就能连接到本机,如果不行的话,生成一下ssh key

      $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      $ chmod 0600 ~/.ssh/authorized_keys
    

    4. 修改配置文件

    其实完全参考官方文档就可以,但是由于Hadoop默认用的是mapreduce框架,我想切换成Yarn,所以需要稍微修改一下,在网上也很好找。

    主要修改这几个文件:

    core-site.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://DESKTOP-61VV394:9000</value>
        </property>
        <!-- 下面这的配置是为了Hive添加的,不加的话,会发现Hive的命令行权限不够,连接不了 -->
    	<property>
    	  <name>hadoop.proxyuser.root.hosts</name>
    	  <value>*</value>
    	</property>
    	<property>
    	  <name>hadoop.proxyuser.root.groups</name>
    	  <value>*</value>
    	</property>
    </configuration>
    
    # hadoop-env.sh
    # 这几个 XXXX_USER在官方文档里没有提到,但是不配置的话,启动hadoop会报错
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export PDSH_RCMD_TYPE=ssh
    export HADOOP_HOME=/root/hadoop-3.2.1
    export YARN_HOME=/root/hadoop-3.2.1
    

    hdfs-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    <!-- 如下两个配置是为了在虚拟机之外也能访问hadoop的UI页面,否则只能在虚拟机本机查看 -->
    <property>
         <name>dfs.http.address</name>
        <value>0.0.0.0:50070</value>
    </property>
    <property>
         <name>dfs.secondary.http.address</name>
         <value>0.0.0.0:50090</value>
    </property>
    </configuration>
    

    mapred-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
            <!-- 通过这个配置,指定使用Yarn作为Hadoop的调度框架 -->
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    <!-- 如下三个配置如果不指定的话,运行mapreduce的时候,会找不到相应的jar路径 -->
    <property>
            <name>yarn.app.mapreduce.am.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
            <name>mapreduce.map.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
            <name>mapreduce.reduce.env</name>
            <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    </configuration>
    

    yarn-site.xml:

    <?xml version="1.0"?>
    <configuration>
    
    <!-- Site specific YARN configuration properties -->
              <!-- NodeManager获取数据的方式是shuffle-->
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
              <!-- 这里配置本机的`hostname` -->
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>DESKTOP-6123456</value>
            </property>
    
    <property>
    

    5.启动hadoop

    进入hadoop目录,格式化namenode

     $ bin/hdfs namenode -format
    

    启动hadoop

     $ sbin/start-all.sh
    

    启动成功后,可以通过jps观察启动进程,应该有5个:

    5233 NameNode
    5462 DataNode
    5994 ResourceManager
    5740 SecondaryNameNode
    6269 NodeManager
    

    6.测试功能

    可以通过最简单的目录命令测试

    $ bin/hdfs dfs -ls
    $ bin/hdfs dfs -mkdir -p /user/root/test
    

    hive安装配置

    这里也是跑的单节点hive

    1. 下载解压

    到官网下载最新的Hive解压即可,没有需要特别主义的

    2. Mysql环境配置

    hive存储一个是用到了hdfs作为数据存储,另外还需要metastore元数据存储。

    默认hive是使用derby的,不需要额外配置,这里我使用的是mysql。具体的mysql安装配置不做介绍。

    主要确保为hive创建一个mysql数据库并授权即可,我这里创建的数据库名是Hive,用户名和密码也都是hive。
    注意需要把mysql的对应连接库jar包(我用的是mysql-connector-java-5.1.45.jar)放置在hive的lib目录下。

    3. 配置文件修改

    # hive-env.sh
    export HIVE_CONF_DIR=/root/apache-hive-3.1.2-bin/conf
    

    hive-site.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- 这个配置不配的话,启动的时候会报Tez启动错误 -->
    <property>
        <name>hive.server2.active.passive.ha.enable</name>
        <value>true</value>
    </property>
    <!-- hive的相关HDFS存储路径配置 -->
     <property>
        <name>hive.exec.scratchdir</name>
        <value>/tmp/hive</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/user/hive/log</value>
    </property>
    <!-- 以下是mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://{mysql服务器地址}:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
    </property>
    <!-- hive UI地址,不配置的话,默认只会在本机可以访问 -->
      <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>0.0.0.0</value>
      </property>
    </configuration>
    

    4. 启动hiveserver2

    进入hive目录,初始化MySql metastore数据

    ./bin/schematool -dbType mysql -initSchema
    

    启动Hiverserver2

    nohup $HIVE_HOME/bin/hiveserver2 &
    

    启动hive自带的命令行工具

    $HIVE_HOME/bin/beeline -u jdbc:hive2://localhost:10000 -n root
    

    然后可以在命令行中测试诸如show tables;等命令

    5. 测试

    这里的测试完全来自官方文档,加载外部数据,以及自定义mapreduce脚本处理数据。

    1. 在上一步的命令行中,创建测试表
    CREATE TABLE u_data (
      userid INT,
      movieid INT,
      rating INT,
      unixtime STRING)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '	'
    STORED AS TEXTFILE;
    
    1. 下载测试数据并解压
    wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
    unzip ml-100k.zip
    
    1. 命令行中,加载测试数据
    LOAD DATA LOCAL INPATH '<path>/u.data'
    OVERWRITE INTO TABLE u_data;
    
    1. 查看数据量,应该有10w条
    SELECT COUNT(*) FROM u_data;
    
    1. 在文件系统中,新建一个python脚本文件

    注意查看自己的python版本,这里的print是python2.x的语法

    import sys
    import datetime
    
    for line in sys.stdin:
      line = line.strip()
      userid, movieid, rating, unixtime = line.split('	')
      weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
      print '	'.join([userid, movieid, rating, str(weekday)])
    
    1. 在命令行中加载这个脚本,并通过这个脚本处理测试数据,存入表中
    CREATE TABLE u_data_new (
      userid INT,
      movieid INT,
      rating INT,
      weekday INT)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '	';
    
    add FILE weekday_mapper.py;
    
    INSERT OVERWRITE TABLE u_data_new
    SELECT
      TRANSFORM (userid, movieid, rating, unixtime)
      USING 'python weekday_mapper.py'
      AS (userid, movieid, rating, weekday)
    FROM u_data;
    
    SELECT weekday, COUNT(*)
    FROM u_data_new
    GROUP BY weekday;
    

  • 相关阅读:
    线程概念简介 什么是线程 多线程上篇(七)
    进程通信概念简介 多线程上篇(六)
    进程同步经典示例 多线程上篇(五)
    进程同步概念简介 多线程上篇(四)
    进程控制概念简介 多线程上篇(三)
    进行概念详解 多线程上篇(二)
    操作系统与程序运行以及进程简介 多线程上篇(一)
    Mybatis动态SQL简单了解 Mybatis简介(四)
    Mybatis sql映射文件浅析 Mybatis简介(三)
    Mybatis配置信息浅析 MyBatis简介(二)
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/14066559.html
Copyright © 2020-2023  润新知