高可用Hadoop大数据部署流程

补充:mp引擎切换为tez、解决yarn 8081端口报错问题

解决hive  comment中文乱码问题:hive-site配置如下

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

<value>jdbc:mysql://10.4.151.58:3306/hive?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;verifyServerCertificate=false</value>    

背景

随着公司业务飞速发展,数据体量急剧上升、运营指标需求多样化、精细化;为解决上述问题和实现合理化、规范化数据管理,提供稳定、可靠和适配的数据服务能力,大数据平台的建设迫在眉睫。

另一方面,在对市场调研之后,由于我司业务处于政务环境网(与公有网进行了全方位隔离),只能通过成熟的云产品进行私有化部署,但价格不菲。例如

阿里云大数据敏捷版本(功能相对不够完善:200万以上/年,持续付费/年)

阿里云大数据企业版本(功能完善:1000万以上/年,持续付费/年)

蚂蚁Oceanbase基础版(仅提供分布式高可用存储:100万左右/年,持续)

其他垂直领域大数据厂商(150万以上/年,持续付费)

因此,无论从解决公司业务问题的角度思考、数据价值输出的角度思考、或者节省经费消耗的角度思考,自研大数据平台建设是具有里程碑意义的一个转折点,基于数据驱动业务,赋能业务!

所用组件

  • hadoop
  • hive
  • yarn
  • squirrle(不错的数据开发可视化客户端,支持mysql hive 等等。。。)
  • zookeepker(高可用)
  • datax(数据集成)
  • dolphinScheduler(本土自研调度平台,欢迎有志之士加入我们,贡献开源)
  • mysql

环境依赖

JDK1.8 以上

CentOS Linux release 7.4.1708 (Core)

psmisc-22.20-15.el7.x86_64

Apache Maven 3.x (Compile DataX)

若无,安装语句:yum install psmisc

安装步骤

Hadoop安装(版本2.7.5)

非高可用版本,但是安装高可用版本,需要在此版本安装成功以后进行

概要

接下来介绍大数据平台Hadoop的分布式环境搭建、以下为Hadoop节点的部署图,将NameNode部署在master1,SecondaryNameNode部署在master2,slave1、slave2、slave3中分别部署一个DataNode节点。

一共需要准备五台服务器,ip对应如下:

服务器ip

Hadoop节点分配

服务器host名

ip1

NameNode    

master1

ip2

SecondaryNameNode

master2

ip3

DataNode

slave1

ip4

DataNode

slave2

ip5

DataNode

slave3

前期准备

(一)关闭所有服务器防火墙

systemctl stop firewalld
systemctl disable firewalld

(二)分别修改五台服务器的/etc/hosts文件,内容如下

ip1 master1
ip2 master2
ip3 slave1
ip4 slave2
ip5 slave3

注:对应修改每个服务器的/etc/hostname文件,里面的内容分别是master1、master2、slave1、slave2、slave3,hostname对应前期准备中的资源分配的host名

(三)分别在各台服务器创建一个普通用户与组

 groupadd hadoop #增加新用户组
 useradd hadoop -m -g hadoop #增加新用户
 passwd hadoop #修改hadoop用户的密码

注:切换至hadoop用户:su hadoop 进行部署,使用root用户部署会存在较多权限问题

(四)每个服务器间的免密码登录配置,分别在各自服务中执行一次

ssh-keygen -t rsa #一直按回车,会生成公私钥
ssh-copy-id hadoop@master1 #拷贝公钥到master1服务器
ssh-copy-id hadoop@master2 #拷贝公钥到master2服务器
ssh-copy-id hadoop@slave1 #拷贝公钥到slave1服务器
ssh-copy-id hadoop@slave2 #拷贝公钥到slave2服务器
ssh-copy-id hadoop@slave3 #拷贝公钥到slave3服务器

注:以上步骤是在hadoop用户下,进行的操作

开始安装

(一)创建hadoop安装目录

mkdir -p /home/hadoop/app/hadoop/{tmp,hdfs/{data,name}}

(二)将安装包解压至/home/hadoop/app/hadoop下

tar zxf tar -zxf hadoop-2.7.5.tar.gz -C /home/hadoop/app/hadoop

(三)配置hadoop的环境变量,修改/etc/profile

JAVA_HOME=/usr/java/jdk1.8.0_131
JRE_HOME=/usr/java/jdk1.8.0_131/jre
HADOOP_HOME=/home/hadoop/app/hadoop/hadoop-2.7.5
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH

(四)刷新环境变量

source /etc/profile

配置Hadoop

(一)配置core-site.xml

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/core-site.xml
<configuration>
    <property>
        <!-- 配置HDFS的NameNode所在节点服务器 -->
        <name>fs.defaultFS</name>
        <value>hdfs://master1:9000</value>
    </property>
    <property>
        <!-- 配置Hadoop的临时目录 -->
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/app/hadoop/tmp</value>
    </property>
    
        <property>    
        <!-- 配置hive2连接用户权限 -->
      <name>hadoop.proxyuser.root.hosts</name>     
      <value>*</value>
     </property> 
    <property>     
      <name>hadoop.proxyuser.root.groups</name>    
      <value>*</value> 
    </property>
    <property>     
      <name>hadoop.proxyuser.hadoop.hosts</name>     
      <value>*</value> 
    </property> 
    <property>     
      <name>hadoop.proxyuser.hadoop.groups</name>     
      <value>*</value> 
    </property>
</configuration>

默认配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/core-default.xml

(二)配置hdfs-site.xml

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <!-- 配置HDFS的DataNode的备份数量 -->
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/app/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/app/hadoop/hdfs/data</value>
    </property>
   
    <property>
        <!-- 配置HDFS的权限控制 -->
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    <property>
        <!-- 配置SecondaryNameNode的节点地址 -->
        <name>dfs.namenode.secondary.http-address</name>
        <value>master2:50090</value>
    </property>
</configuration>

默认配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

(三)配置mapred-site.xml

$ cp /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml.template /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml
$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <!-- 配置MR运行的环境 -->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

默认配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

(四)配置yarn-site.xml

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <property>
      <!-- 配置ResourceManager的服务节点 -->
        <name>yarn.resourcemanager.hostname</name>
        <value>master1</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master1:8032</value>
    </property>
    
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master1:8088</value>
    </property>
    
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>8192</value>
        <description>该节点上YARN可使用的物理内存总量,默认是8192(MB)</description>  
    </property>
    
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>3072</value>
        <description>单个容器/调度器可申请的最少物理内存量,提示物理内存溢出,提高这个值</description> 
    </property>
    
    <property>
      <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
    </property>

    
</configuration>

默认配置地址:http://hadoop.apache.org/docs/r2.7.5/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

(五)配置slaves

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/slaves
slave1
slave2
slave3

slaves文件中配置的是DataNode的所在节点服务

(六)配置hadoop-env

修改hadoop-env.sh文件的JAVA_HOME环境变量,操作如下:

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_131

(七)配置yarn-env

修改yarn-env.sh文件的JAVA_HOME环境变量,操作如下:

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/yarn-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_131

(八)配置mapred-env

修改mapred-env.sh文件的JAVA_HOME环境变量,操作如下:

$ vi /home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop/mapred-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_131

(九)将master1中配置好的hadoop分别远程拷贝至maser2、slave1 、slave2、slave3服务器中

$ scp -r /home/hadoop/app/hadoop hadoop@master2:/home/hadoop/app/
$ scp -r /home/hadoop/app/hadoop hadoop@slave1:/home/hadoop/app/
$ scp -r /home/hadoop/app/hadoop hadoop@slave2:/home/hadoop/app/
$ scp -r /home/hadoop/app/hadoop hadoop@slave3:/home/hadoop/app/

集群测试

hdfs测试

(一)在master1节点中初始化Hadoop集群

$ hadoop namenode -format

(二)启动Hadoop集群

$ start-dfs.sh
$ start-yarn.sh

(三)验证集群是否成功

浏览器中访问50070的端口,如下证明集群部署成功

节点状态地址:master1:50070

yarn资源地址:master1:8088

image

mapreduce测试

(一)新建hdfs文件夹

hadoop fs -mkdir /input

(二)新建测试文件,输入一些英文字母即可

vi word_test.txt

(三)将 word_test.txt

hadoop fs -put  /home/hadoop/app/hadoop/hadoop-2.7.5/share/hadoop/mapreduce/word_test.txt /input

(四)进入 wordcount测试脚本路径

cd /home/hadoop/app/hadoop/hadoop-2.7.5/share/hadoop/mapreduce

(五)运行hadoop wordcount测试脚本

 hadoop jar hadoop-mapreduce-examples-2.7.5.jar wordcount /input/word_test.txt /output

注意:/output 不能在hdfs上存在

(六)运行成功

image.png

(七)查看结果

 hadoop fs -cat  /output/part-r-00000

image.png

Hadoop安装注意事项

一、需要打开所有服务器的端口,保证机器之间的互通,若集群无法启动,首先查看防火墙、端口连接等情况

二、hadoop namenode -format  HDFS初始化命令会清楚文件系统,慎用

三、若使用了HDFS文件格式化的命令,需要在五台机器上,重新使用hadoop创建文件的命令,分别创建文件

mkdir -p /home/hadoop/app/hadoop/{tmp,hdfs/{data,name}}

Hadoop安装(HA高可用)

概要

在Hadoop 2.0.0之前,一个Hadoop集群只有一个NameNode,那么NameNode就会存在单点故障的问题。幸运的是Hadoop 2.0.0之后解决了这个问题,即支持NameNode的HA高可用。NameNode的高可用是通过集群中冗余两个NameNode,并且这两个NameNode分别部署到不同的服务器中,其中一个NameNode处于Active状态,另外一个处于Standby状态,如果主NameNode出现故障,那么集群会立即切换到另外一个NameNode来保证整个集群的正常运行。

Zookeeper安装(版本3.6.0)

NN

DN

ZK

ZKFC

JN

master1

master2

slave1

slave2

slave3

注:Hadoop版本: Hadoop 2.7.5,与前文的hadoop一样

NN(NameNode 名称节点)、DN(DataNode 数据节点)、ZK(Zookeeper)、ZKFC(ZKFailoverController)、JN(JournalNode 元数据共享节点)、RM(ResourceManager 资源管理器)、DM(DataManager 数据节点管理器)

开始安装

首先在slave1中安装zookeeper

(一)解压zookeeper安装包

tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz

(二)进入zookeeper conf目录

cd zookeeper-3.6.0/conf

(三)重命名文件

cp zoo_sample.cfg zoo.cfg

(四)修改zoo.cfg配置文件

 vim zoo.cfg 

image.png

  上面红色框住的内容即是我们修改的内容:

  ①、tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime

  ②、dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。

  ③、client:监听客户端连接的端口。

  ④、initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

  ⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

  ⑥、server.A=B:C:D

    A:其中 A 是一个数字,表示这个是服务器的编号;

    B:是这个服务器的 ip 地址;

    C:Leader选举的端口;

    D:Zookeeper服务器之间的通信端口。

  我们需要修改的第一个是 dataDir ,在指定的位置处创建好目录。

  第二个需要新增的是 server.A=B:C:D 配置,其中 A 对应下面我们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。

(五)在 上一步 dataDir 指定的目录下,创建 myid 文件

然后在该文件添加上一步 server 配置的对应 A 数字。

  比如我们上面的配置:

dataDir=/home/hadoop/apache-zookeeper-3.6.0-bin/data

  然后下面配置是:

server.1=ip1:2888:3888
server.2=ip2:2888:3888
server.3=ip3:2888:3888

  那么就必须在10.4.151.60 机器的的/home/hadoop/apache-zookeeper-3.6.0-bin/data 目录下创建 myid 文件,然后在该文件中写上 1即可。

  image.png

  后面的机器依次在相应目录创建myid文件,写上相应配置数字即可。

(六)环境变量配置

#set zookeeper environment
export ZK_HOME=/home/hadoop/apache-zookeeper-3.6.0-bin
export PATH=$PATH:$ZK_HOME/bin

(七)环境变量生效

source /etc/profle

 启动命令:

zkServer.sh start

停止命令:

zkServer.sh stop

  重启命令:

zkServer.sh restart

  查看集群节点状态:

zkServer.sh status

成功后状态

image.png

注意事项:1、三个节点需要同时起zk的任务,在全部任务起来之后,才能查看节点状态,不然会报错

2、推荐使用现在的3.6.0的版本,因为其他版本可能存在版本问题,比如3.4.9

Hadoop-HA模式安装

HA模式需要在前文hadoop安装成功之后,Zookeeper安装之后之后,才能够去配置和部署。

配置修改

(一)修改hdfs-site.xml,内容如下:

<configuration>
    <!--HDFS HA的逻辑服务名称配置-->
    <property>
      <name>dfs.nameservices</name>
      <value>masters</value>
    </property>
    
    <!--NameNode的唯一标识服务名,注意这里namenodes.masters中的masters必须是上面的dfs.nameservices中的逻辑服务名,下面同理-->
    <property>
        <name>dfs.ha.namenodes.masters</name>
        <value>master1,master2</value>
    </property>
    
    <!--NameNode的rpc监听地址-->
    <property>
      <name>dfs.namenode.rpc-address.masters.master1</name>
      <value>master1:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.masters.master2</name>
      <value>master2:8020</value>
    </property>
    
    <!--NameNode的http地址配置-->
    <property>
      <name>dfs.namenode.http-address.masters.master1</name>
      <value>master1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.masters.master2</name>
      <value>master2:50070</value>
    </property>
    
    <!--NameNode的edits文件的共享地址配置,及JournalNodes的节点配置-->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://slave1:8485;slave2:8485;slave3:8485/masters</value>
    </property>
    
    <!--指定JournalNode在本地磁盘存放数据的位置-->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/home/hadoop/app/hadoop-HA/data/journal</value>
    </property>
    
    <!--配置将由DFS客户端使用的Java类的名称,以确定哪个NameNode当前正在服务于客户端请求-->
    <property>
      <name>dfs.client.failover.proxy.provider.masters</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>
    
    <!--HA切换时的免密登录的秘钥访问路径配置-->
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    
    <!--开启NameNode失败自动切换-->
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    
    <!--配置HDFS的DataNode的备份数量-->
    <property>
      <name>dfs.replication</name>
      <value>3</value>
    </property>
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/home/hadoop/app/hadoop-HA/data/hdfs/name</value>
    </property>
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/home/hadoop/app/hadoop-HA/data/hdfs/data</value>
    </property>
    
    <!--HDFS访问是否开启权限控制-->
    <property>
      <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>
</configuration>

(二)修改core-site.xml文件,内容如下:

<configuration>
    <!--这里的masters值需与hdfs-site.xml中的dfs.nameservices配置项的值相同-->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://masters</value>
    </property>
    
    <!-- 配置hadoop的临时目录 -->
    <property>
       <name>hadoop.tmp.dir</name>
       <value>/home/hadoop/app/hadoop-HA/data/tmp</value>
    </property>
    
    <!--Zookeeper服务配置-->
    <property>
       <name>ha.zookeeper.quorum</name>
       <value>slave1:2181,slave2:2181,slave3:2181</value>
    </property>
    <!--表示客户端连接服务器失败尝试的次数-->
    <property>
       <name>ipc.client.connect.max.retries</name>
       <value>10</value>
    </property>
    
    <!--表示客户端每次连接服务器需要等待的毫秒数,默认1s,如不配置则使用start-dfs.sh启动可能会导致NameNode连接JournalNode超时,如果单独一个个节点启动则无需此配置项-->
    <property>
       <name>ipc.client.connect.retry.interval</name>
       <value>10000</value>
    </property>
</configuration>

(三)修改slaves文件,内容如下:

slave1
slave2
slave3

(四)创建文件夹,五台机器都需要建立

mkdir -p /home/hadoop/app/hadoop-HA/data/tmp
mkdir -p /home/hadoop/app/hadoop-HA/data/hdfs/data
mkdir -p mkdir -p /home/hadoop/app/hadoop-HA/data/hdfs/name
/home/hadoop/app/hadoop-HA/data/journal

初始化集群和启动

(一)分别启动三个JournalNode

hadoop-daemon.sh start journalnode

(二)在其中一个NameNode节点中初始化NameNode,这里选择master1上的NameNode

hdfs namenode -format

(三)启动第2步初始化好的NameNode服务

hadoop-daemon.sh start namenode

(四)在master2服务器中运行下面命令来同步master1上的NameNode的元数据

hdfs namenode -bootstrapStandby

(五)在其中一个NameNode节点中初始化ZKFC的状态,这里选择master1上的NameNode

hdfs zkfc -formatZK

(六)启动Hadoop的HA集群

start-dfs.sh

测试是否切换成功

(一)通过浏览器中查看 http:master1:50070 和 http:master2:50070 可以确定哪个NameNode处理激活状态

image

image

(二)如上图master2的状态为active,则通过kill杀死master2中的NameNode进程,然后查看master1中的NameNode是否由standby状态转换为了active状态,是的话说明切换成功!

:在测试Hadoop的HA切换中,发现切换失败,在kill掉NameNode的节点中查看日志:

vi hadoop-2.7.5/logs/hadoop-hadoop-zkfc-master2.log

发现报错:PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8020 via ssh: bash: fuser: 未找到命令

解决办法:缺少psmisc依赖包,每个NameNode节点服务器上安装即可:

yum install psmisc

Hive安装

在安装Hive之前,需要保证你的Hadoop集群已经正常启动,且是在hadoop用户下进行安装,用root权限安装会出现权限问题

另外,需要提前安装mysql数据库

开始安装

(一)解压Hive安装包

tar zxvf apache-hive-2.3.8-bin.tar.gz -C /home/hadoop

(二)配置hive环境变量

vi  /etc/profile
#HIVE
export HIVE_HOME=/home/hadoop/hive-2.3.8
export HIVE_CONF_DIR=$HIVE_HOME/conf
PATH=$HIVE_HOME/bin:$PATH

(三)生效配置环境

source  /etc/profile

(四)创建hive-site.xml

cd $HIVE_CONF_DIR
cp hive-default.xml.template  hive-site.xml

(五)由于hive-site.xml目录有如下默认配置

 <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>
 <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. </description>
  </property>

(六)创建相应目录

hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -mkdir -p /tmp/hive
 hdfs dfs -chmod -R 777 /tmp/hive
 hdfs dfs -ls /

配置Hive本地临时目录

将 hive-site.xml 文件中的 ${system:java.io.tmpdir} 替换为hive的本地临时目录,例如我使用的是 /usr/local/hive-2.3.8/tmp ,如果该目录不存在,需要先进行创建,并且赋予读写权限。

cd $HIVE_HOME
mkdir tmp/
chmod -R 777 tmp/
cd $HIVE_CONF_DIR
vim hive-site.xml

(八)在vim命令模式下执行如下命令完成替换

:%s#${system:java.io.tmpdir}#/usr/local/hive-2.3.8/tmp#g

将原来配置

<property>
    <name>hive.exec.local.scratchdir</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

替换为:

<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive-2.3.8/tmp/${system:user.name}</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

配置Hive用户名

将 hive-site.xml 文件中的 ${system:user.name} 替换为操作Hive的账户的用户名,例如我的是 hadoop 。

在vim命令模式下执行如下命令完成替换:

:%s#${system:user.name}#hadoop#g

将初始配置

<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive-2.3.8/tmp/${system:user.name}</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

替换为:

<property>
    <name>hive.exec.local.scratchdir</name>
    <value>/usr/local/hive-2.3.8/tmp/hadoop</value>
    <description>Local scratch space for Hive jobs</description>
  </property>

修改Hive数据库配置

在 hive-site.xml 中,与Hive数据库相关的配置有如下几个:

属性名称

描述

javax.jdo.option.ConnectionDriverName

数据库的驱动类名称

javax.jdo.option.ConnectionURL

数据库的JDBC连接地址

javax.jdo.option.ConnectionUserName

连接数据库所使用的用户名

javax.jdo.option.ConnectionPassword

连接数据库所使用的密码

将原始配置改为mysql数据库配置

 <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://master1:3306/hive?createDatabaseIfNotExist=true</value>
    <description>
      JDBC connect string for a JDBC metastore.
      To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
      For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
    </description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    <description>Username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root@123</value>
    <description>password to use against metastore database</description>
  </property>

此外,还需要将MySQL的驱动包拷贝到Hive的lib目录下:

 cp /home/hadoop/mysql-connector-java-5.1.43.jar $HIVE_HOME/lib/

配置hive-env.sh

cd $HIVE_CONF_DIR
cp hive-env.sh.template hive-env.sh
vim hive-env.sh

将hive-env.sh内容设置为如下:

export HADOOP_HOME=/home/hadoop/app/hadoop/hadoop-2.7.5
export HIVE_CONF_DIR=/home/hadoop/hive-2.3.8/conf
export HIVE_AUX_JARS_PATH=/home/hadoop/hive-2.3.8/lib

Hive数据库初始化

cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql

数据库初始化完成之后,会在MySQL数据库里生成如下metadata表用于存储Hive的元数据信息


image

启动Hive

cd $HIVE_HOME/bin
./hive

测试Hive

在Hive所在主机上新建一个 user_sample.txt 用来保存测试数据,内容如下:

1. 0612,Terry,M,22
2. 0613,Sherry,F,22
3. 0614,Smith,M,25
4. 0615,Tracy,F,24
5. 0616,Lucy,F,19
6. 0617,Sherry,F,23

执行新建库、表以及导入数据测试

hive> create database user_test;
OK
Time taken: 5.633 seconds
# 切换数据库
hive> use user_test;
OK
Time taken: 0.021 seconds
# 创建数据表测试
hive> create table user_sample
( 
user_num bigint, 
user_name string, 
user_gender string, 
user_age int
) row format delimited fields terminated by ','; 
OK
Time taken: 0.645 seconds
# 从本地主机上加载数据到hive
hive> load data local inpath '/home/hadoop/user_sample.txt' into table user_sample;
Loading data to table user_test.user_sample
OK
Time taken: 0.589 seconds
# 查看加载内容
hive> select * from user_sample;
OK
612    Terry    M    22
613    Sherry    F    22
614    Smith    M    25
615    Tracy    F    24
616    Lucy    F    19
617    Sherry    F    23
Time taken: 0.173 seconds, Fetched: 6 row(s)

DataX安装

开始安装

(一)确保环境依赖满足条件

Linux
 JDK(1.8以上,推荐1.8)
 Python(推荐Python2.6.X或者python2.7也可以)
 Apache Maven 3.x (Compile DataX)

(二)下载datax安装包

https://github.com/alibaba/DataX/blob/master/userGuid.md

(三)解压文件夹

tar -zxvf datax.tar.gz  -C /opt/datax/

(四)进入bin目录,开始自检

python datax.py ../job/job.json

示例

(一)mysql2hive的配置

{
    "job": {
        "content": [{
            "reader": {
                "name": "mysqlreader",
                "parameter": {
                    "column": [
                        "user_id",
                        "user_name",
                        "phone",
                        "id_card",
                        "company_no",
                        "del_flag",
                        "create_by",
                        "create_time",
                        "update_by",
                        "update_time"
                    ],
                    "connection": [{
                        "jdbcUrl": [
                            "jdbc:mysql://10.4.151.21:3307/test"
                        ],
                        "table": [
                            "biz_user"
                        ]
                    }],
                    "password": "",
                    "username": "",
                    "where": ""
                }
            },
            "writer": {
                "name": "hdfswriter",
                "parameter": {
                    "column": [{
                            "name": "user_id",
                            "type": "BIGINT"
                        },
                        {
                            "name": "user_name",
                            "type": "STRING"
                        },
                        {
                            "name": "phone",
                            "type": "STRING"
                        },
                        {
                            "name": "id_card",
                            "type": "STRING"
                        },
                        {
                            "name": "company_no",
                            "type": "STRING"
                        },
                        {
                            "name": "del_flag",
                            "type": "STRING"
                        },
                        {
                            "name": "create_by",
                            "type": "STRING"
                        },
                        {
                            "name": "create_time",
                            "type": "TIMESTAMP"
                        },
                        {
                            "name": "update_by",
                            "type": "STRING"
                        },
                        {
                            "name": "update_time",
                            "type": "TIMESTAMP"
                        }
                    ],
                    "defaultFS": "hdfs://master1:8020",
                    "fieldDelimiter": "\t",
                    "fileName": "20200311",
                    "fileType": "text",
                    "path": "/user/hive/warehouse/finance/biz_user",
                    "writeMode": "append"
                }
            }
        }],
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

(二)在datax/bin 目录下运行

python datax.py mysql2hive.json

(三)  HA模式下同步配置

在同步任务的json配置中加入如下配置,可解决datax只能在namenode(active)进行同步的问题

"defaultFS": "hdfs://masters",
					"hadoopConfig":{
					 "dfs.nameservices": "masters",  
					 "dfs.ha.namenodes.masters": "master1,master2",  
					 "dfs.namenode.rpc-address.masters.master1": "master1:8020",
					 "dfs.namenode.rpc-address.masters.master2": "master2:8020",
					 "dfs.client.failover.proxy.provider.masters": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
					},

Mysql安装

开源资源包

📎apache-zookeeper-3.6.0-bin.tar.gz

SQuirrel客户端安装(windowa)

开始安装

(一)下载客户端安装包

(二)安装好客户端

开始配置

Hive驱动配置

(一)新建驱动程序

注意:名字:随便起

 地址示例:按安装hive的配置进行配置

image.png

(二)附加类路径

1、增加两个驱动包

2、列出驱动程序会把hive的驱动列出来

image.png

(三)连接

1、确保Hive已经运行起了服务 hiveservece2,具体可以到/hive/bin/路径下去启动

2、用户、密码不用输入,因为之前在配置的时候用"*"代替,表示空值;输入其他字符后会报错

3、完成连接

image.png

使用hive client

(一)确定使用哪个数据库(如 use finance;)

(二)运行sql时如果报错,/tmp  路径没有权限,解决方法如下

vi /ect/profile
在 profile中 增加如下配置:export HADOOP_USER_NAME=hadoop
source /ect/profile 生效配置,对集群所有机器都运行
##下列语句仅master上运行就可以##
hdfs fs -chmod -R 777 /tmp

DophinScheduler安装

用户权限配置

# 配置sudo免密
sed -i '$ahadoop  ALL=(ALL)  NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers

# 修改目录权限,使得部署用户对dolphinscheduler-bin目录有操作权限
chown -R hadoop:hadoop dolphinscheduler-bin

 注意:
 - 因为任务执行服务是以 sudo -u {linux-user} 切换不同linux用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。初学习者不理解的话,完全可以暂时忽略这一点
 - 如果发现/etc/sudoers文件中有"Default requiretty"这行,也请注释掉
 - 如果用到资源上传的话,还需要给该部署用户分配操作`本地文件系统或者HDFS或者MinIO`的权限

数据库初始化

  • 进入数据库,默认数据库是PostgreSQL,如选择MySQL的话,后续需要添加mysql-connector-java驱动包到DolphinScheduler的lib目录下
mysql -uroot -p
  • 进入数据库命令行窗口后,执行数据库初始化命令,设置访问账号和密码。注: {user} 和 {password} 需要替换为具体的数据库用户名和密码
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> flush privileges;

  • 创建表和导入基础数据
    • 修改 conf 目录下 datasource.properties 中的下列配置
vi conf/datasource.properties
    • 如果选择 MySQL,请注释掉 PostgreSQL 相关配置(反之同理), 还需要手动添加 [ mysql-connector-java 驱动 jar ] 包到 lib 目录下,这里下载的是mysql-connector-java-5.1.47.jar,然后正确配置数据库连接相关信息
# postgre
  #spring.datasource.driver-class-name=org.postgresql.Driver
  #spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
  # mysql
  spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  spring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true     需要修改ip,本机localhost即可
  spring.datasource.username=xxx                        需要修改为上面的{user}值
  spring.datasource.password=xxx                        需要修改为上面的{password}值
    • 修改并保存完后,执行 script 目录下的创建表及导入基础数据脚本
sh script/create-dolphinscheduler.sh

注意: 如果执行上述脚本报 ”/bin/java: No such file or directory“ 错误,请在/etc/profile下配置 JAVA_HOME 及 PATH 变量

修改运行参数

  • 修改 conf/env 目录下的 dolphinscheduler_env.sh 环境变量(以相关用到的软件都安装在/opt/soft下为例)
export HADOOP_HOME=/home/hadoop/app/hadoop/hadoop-2.7.5
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop/hadoop-2.7.5/etc/hadoop
export JAVA_HOME=/home/hadoop/jdk1.8.0_271
export HIVE_HOME=/home/hadoop/hive-2.3.8
export DATAX_HOME=/home/hadoop/datax/bin/datax.py
export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$DATAX_HOME:$PATH
  • 注: 这一步非常重要,例如 JAVA_HOME 和 PATH 是必须要配置的,没有用到的可以忽略或者注释掉;如果找不到dolphinscheduler_env.sh, 请运行 ls -a
  • 将jdk软链到/usr/bin/java下(仍以 JAVA_HOME=/opt/soft/java 为例)
sudo ln -s /home/hadoop/jdk1.8.0_271/bin/java /usr/bin/java

修改一键部署配置文件 conf/config/install_config.conf中的各参数,特别注意以下参数的配置

# 这里填 mysql or postgresql
dbtype="mysql"
# 数据库连接地址
dbhost="localhost:3306"
# 数据库名
dbname="dolphinscheduler"
# 数据库用户名,此处需要修改为上面设置的{user}具体值
username="xxx"    
# 数据库密码, 如果有特殊字符,请使用\转义,需要修改为上面设置的{password}具体值
password="xxx"
#Zookeeper地址,单机本机是localhost:2181,记得把2181端口带上
zkQuorum="localhost:2181"
#将DS安装到哪个目录,如: /opt/soft/dolphinscheduler,不同于现在的目录
installPath="/opt/soft/dolphinscheduler"
#使用哪个用户部署,使用第3节创建的用户
deployUser="hadoop"
# 邮件配置,以qq邮箱为例
# 邮件协议
#mailProtocol="SMTP"
# 邮件服务地址
#mailServerHost="smtp.qq.com"
# 邮件服务端口
#mailServerPort="25"
# mailSender和mailUser配置成一样即可
# 发送者
#mailSender="xxx@qq.com"
# 发送用户
#mailUser="xxx@qq.com"
# 邮箱密码
#mailPassword="xxx"
# TLS协议的邮箱设置为true,否则设置为false
#starttlsEnable="true"
# 开启SSL协议的邮箱配置为true,否则为false。注意: starttlsEnable和sslEnable不能同时为true
#sslEnable="false"
# 邮件服务地址值,参考上面 mailServerHost
#sslTrust="smtp.qq.com"
# 业务用到的比如sql等资源文件上传到哪里,可以设置:HDFS,S3,NONE,单机如果想使用本地文件系统,请配置为HDFS,因为HDFS支持本地文件系统;如果不需要资源上传功能请选择NONE。强调一点:使用本地文件系统不需要部署hadoop
resourceStorageType="HDFS"
# 这里以保存到本地文件系统为例
#注:但是如果你想上传到HDFS的话,NameNode启用了HA,则需要将hadoop的配置文件core-site.xml和hdfs-site.xml放到conf目录下,本例即是放到/opt/dolphinscheduler/conf下面,并配置namenode cluster名称;如果NameNode不是HA,则修改为具体的ip或者主机名即可
defaultFS="hdfs://localhost:8020"    #hdfs://{具体的ip/主机名}:8020
# 如果没有使用到Yarn,保持以下默认值即可;如果ResourceManager是HA,则配置为ResourceManager节点的主备ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是单ResourceManager请配置yarnHaIps=""即可
# 注:依赖于yarn执行的任务,为了保证执行结果判断成功,需要确保yarn信息配置正确。
yarnHaIps="localhost"
# 如果ResourceManager是HA或者没有使用到Yarn保持默认值即可;如果是单ResourceManager,请配置真实的ResourceManager主机名或者ip
singleYarnIp="yarnIp1"
# 资源上传根路径,支持HDFS和S3,由于hdfs支持本地文件系统,需要确保本地文件夹存在且有读写权限
resourceUploadPath="/dolphinscheduler"
# 具备权限创建resourceUploadPath的用户
hdfsRootUser="hadoop"
#在哪些机器上部署DS服务,本机选localhost
ips="localhost"
#ssh端口,默认22
sshPort="22"
#master服务部署在哪台机器上
masters="localhost"
#worker服务部署在哪台机器上,并指定此worker属于哪一个worker组,下面示例的default即为组名
workers="localhost:hadoop"
#报警服务部署在哪台机器上
alertServer="master1"
#后端api服务部署在在哪台机器上
apiServers="localhost"

注:如果打算用到资源中心功能,请执行以下命令:

sudo mkdir /data/dolphinscheduler
sudo chown -R dolphinscheduler:dolphinscheduler /data/dolphinscheduler

一键部署

  • 切换到部署用户,执行一键部署脚本
    sh install.sh
注意:
第一次部署的话,在运行中第3步`3,stop server`出现5次以下信息,此信息可以忽略
sh: bin/dolphinscheduler-daemon.sh: No such file or directory
  • 脚本完成后,会启动以下5个服务,使用jps命令查看服务是否启动(jpsjava JDK自带)
MasterServer         ----- master服务
    WorkerServer         ----- worker服务
    LoggerServer         ----- logger服务
    ApiApplicationServer ----- api服务
    AlertServer          ----- alert服务

如果以上服务都正常启动,说明自动部署成功

部署成功后,可以进行日志查看,日志统一存放于logs文件夹内

logs/
    ├── dolphinscheduler-alert-server.log
    ├── dolphinscheduler-master-server.log
    |—— dolphinscheduler-worker-server.log
    |—— dolphinscheduler-api-server.log
    |—— dolphinscheduler-logger-server.log

登录系统

启停服务

  • 一键停止集群所有服务
    sh ./bin/stop-all.sh
  • 一键开启集群所有服务
    sh ./bin/start-all.sh
  • 启停Master
sh ./bin/dolphinscheduler-daemon.sh start master-server
sh ./bin/dolphinscheduler-daemon.sh stop master-server
  • 启停Worker
sh ./bin/dolphinscheduler-daemon.sh start worker-server
sh ./bin/dolphinscheduler-daemon.sh stop worker-server
  • 启停Api
sh ./bin/dolphinscheduler-daemon.sh start api-server
sh ./bin/dolphinscheduler-daemon.sh stop api-server
  • 启停Logger
sh ./bin/dolphinscheduler-daemon.sh start logger-server
sh ./bin/dolphinscheduler-daemon.sh stop logger-server
  • 启停Alert
sh ./bin/dolphinscheduler-daemon.sh start alert-server
sh ./bin/dolphinscheduler-daemon.sh stop alert-server

出现图中情况,说明引擎切换成功


集群停止、启动过程
停止集群过程
1. 登录10.4.151.58服务器
2. 切换hadoop用户:su – Hadoop 密码:hadoop
3. 在任意目录下,都可停止集群服务:sh stop-all.sh
4. 进入dolphinscheduler/bin 目录: cd /home/hadoop/dolphinscheduler-bin/bin
5. 在步骤3所处路径下,停止dolphinscheduler服务: sh stop-all.sh
6. jps 查看服务情况,若全部停止之后,jps显示无服务
7. 切换root用户:su – root 密码:root@123
8. 停止mysql服务:service mysql stop
启动集群过程
1. 分别登录60、62、63服务器,启动zk:zkServer.sh start,当三台服务器启动完成之后,成功后状态
注意事项:1、三个节点需要同时起zk的任务,在全部任务起来之后,才能查看节点状态,不然会报错
2. 登录10.4.151.58服务器,切换root用户
3. 启动mysql服务:service mysql start
4. 切换hadoop用户,启动hadoop集群:start-all.sh
5. 进入dolphinscheduler目录,启动dolphinscheduler服务:sh start-all.sh
6. jps查看服务
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值