欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

上才艺!CentOS7从0到1部署Apache Hadoop生态集群

程序员文章站 2022-07-05 18:16:48
...


迄今为止,Hadoop是世界上最多公司使用的大数据平台。尽管已有其他优秀的公司开发出媲美Hadoop组件的软件,比如Spark、Flink 之于 MapReduce,云存储之于 HDFS,K8S 之于 YARN。
但在生态方面,Hadoop独树一帜。

Hadoop的发行版本较多,比较出众的有

  • Cloudera’s Distribution Including Apache Hadoop,简称CDH
  • Hortonworks Data Platform,简称“HDP”
  • Apache Hadoop 最原始的版本,所有发行版均基于这个版本进行改进,是最适合大数据入门学习的版本,也是本文的主题。

目前Cloudera和Hortonworks已合并,预计在2022年推出整合性的新产品。

一、Linux环境准备

1、配置映射(三台主机)

配置映射后可以直接使用映射名访问其他主机,映射类似于DNS服务器,会将便于记忆可读性高的映射名转换为实际的IP进行访问。

vim /etc/hosts

最后面插入IP 映射名,映射名可以不是主机名

192.168.206.132 hadoop1
192.168.206.134 hadoop2
192.168.206.133 hadoop3

修改主机名(可选操作),完成后重启:reboot

[aaa@qq.com ~]# vim /etc/hostname 
[aaa@qq.com ~]# hostname
hadoop1

2、免密操作

免密能帮助我们在开\关服务时节省大量时间,这也是Hadoop节点之间通信、访问的必要基础操作。

主(Hadoop1)节点上:

[aaa@qq.com ~]# ssh-******  #之后按三次回车,会在~/.ssh 生成文件
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:9xezCwJWTfZAOrTPiFeave97f1q+dhINec05PiS1HHc aaa@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|          ..=    |
|         . * o oE|
|          = o +oB|
|         o X .o*+|
|        S * + *+.|
|       . + . ..*.|
|          . + o.o|
|           . +.=+|
|             .B*B|
+----[SHA256]-----+

查看文件

[aaa@qq.com ~]# ll ~/.ssh/
total 12
-rw-------. 1 root root 1675 Jul 19 18:44 id_rsa  #**
-rw-r--r--. 1 root root  394 Jul 19 18:44 id_rsa.pub #公钥
-rw-r--r--. 1 root root  185 Jul 19 18:44 known_hosts  #已连接的记录

复制**到其他主机上:

ssh-copy-id hadoop1  #ssh内回环
ssh-copy-id hadoop2
ssh-copy-id hadoop3

第一次需要输入密码,完成之后可以使用ssh hadoop[1,2,3]无密码登录连接

3、同步节点时间

Hadoop集群对事件非常敏感,zookeeper中以毫秒为单位监听节点心跳,如果时间不统一,可能造成集群异常

(1)选择时区(三台主机)
tzselect  #之后依次选择——>亚洲———>中国———>北京,最后选择1)yes

yes之后会生成shell命令修改时区,我们直接复制粘贴使用

[aaa@qq.com ~]# TZ='Asia/Shanghai'; export TZ
(2)安装ntp服务,配置Hadoop1为服务器
yum install –y ntp

Hadoop1作为 ntp 服务器,修改 ntp 配置文件。(Hadoop1上执行)

[aaa@qq.com ~]# vim /etc/ntp.conf
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 #stratum 设置为其它值也是可以的,其范围为 0~15

重启ntp服务

[aaa@qq.com ~]# /bin/systemctl restart ntpd.service

在其他节点同步时间(两台节点)

[aaa@qq.com ~]# ntpdate hadoop1
19 Jul 19:07:36 ntpdate[13451]: adjust time server 192.168.206.132 offset 0.003229 sec
[aaa@qq.com ~]# 

添加定时任务,每10分钟同步一次(两台节点)

[aaa@qq.com ~]# crontab -e #-e:添加,-l:列出,-r:删除定时任务
*/10 * * * * /usr/sbin/ntpdate hadoop1

4、JDK安装

(1)卸载其他版本JDK

查询有无其他JDK版本,需要卸载掉(三台)

[aaa@qq.com ~]# rpm -qa |grep jdk

一次性全部卸载:

[aaa@qq.com ~]# rpm -qa |grep jdk |xargs rpm -e --nodeps
(2)安装JDK1.8+

使用rz命令将Windows下的文件传到Linux当前目录中(需安装lrzsz,安装命令:yum install -y lrzsz)
将所有需要的包传入到/usr/local/share中
上才艺!CentOS7从0到1部署Apache Hadoop生态集群
解压JDK

[aaa@qq.com share]# ll
total 678020
-rw-r--r--.  1 root root 149756462 Nov 30  2018 apache-hive-2.1.1-bin.tar.gz
drwxr-xr-x.  2 root root        28 Nov  5  2019 applications
-rw-r--r--.  1 root root 214092195 Nov 22  2018 hadoop-2.7.3.tar.gz
-rw-r--r--.  1 root root 104497899 Nov 28  2018 hbase-1.2.4-bin.tar.gz
drwxr-xr-x.  2 root root         6 Apr 10  2018 info
-rw-r--r--.  1 root root 190890122 Nov 21  2018 jdk-8u171-linux-x64.tar.gz
drwxr-xr-x. 21 root root       243 Nov  5  2019 man
-rw-r--r--.  1 root root  35042811 Nov 28  2018 zookeeper-3.4.10.tar.gz
[aaa@qq.com share]# tar -zxvf ./jdk-8u171-linux-x64.tar.gz  -C /usr/local/  #-C :指定目录

配置环境变量

[aaa@qq.com share]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin

生效环境变量

[aaa@qq.com share]# source /etc/profile
[aaa@qq.com share]# 

查看Java版本或使用jps命令

[aaa@qq.com share]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[aaa@qq.com share]# jps
4995 Jps
[aaa@qq.com share]# 

以上操作可以在三台主机上同步进行,也可以在hadoop1当中完成后传输到hadoop[2,3],命令:scp -r /usr/local/jdk1.8.0_171 hadoop2:/usr/local/,但是配置环境变量需要手动配置,然后source生效

5、端口号操作

hadoop集群需要大量的端口号,如zookeeper的心跳检测端口、选举端口,yarn的资源端口等。为了方便,建议直接关闭防火墙,但是在生产环境中,可以使用端口号操作
添加

firewall-cmd --zone=public --add-port=80/tcp --permanent #–permanent永久生效,没有此参数重启后失效

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone= public --query-port=80/tcp

删除

firewall-cmd --zone= public --remove-port=80/tcp --permanent

此处直接关闭防火墙(三台):

[aaa@qq.com jdk1.8.0_171]# systemctl stop firewalld
[aaa@qq.com jdk1.8.0_171]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[aaa@qq.com jdk1.8.0_171]# 

二、Hadoop集群安装

Hadoop安装的大步骤:解压—>配置环境变量—>修改配置文件—>传输文件到节点—>测试启动

1、zookeeper安装

zookeeper:高性能的分布式应用协调服务框架,可以帮助我们管理集群节点之间的操作,防止出现部分逻辑错误。我个人喜欢先安装它
解压

[aaa@qq.com share]# tar -zxvf ./zookeeper-3.4.10.tar.gz -C /usr/local/

配置环境变量

[aaa@qq.com local]# vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.10
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

[aaa@qq.com local]# source /etc/profile

进入配置目录,开始配置zookeeper

[aaa@qq.com local]# source /etc/profile
[aaa@qq.com local]# cd zookeeper-3.4.10/conf/
[aaa@qq.com conf]# pwd
/usr/local/zookeeper-3.4.10/conf
[aaa@qq.com conf]# ll
total 12
-rw-rw-r--. 1 mysqlroot mysqlroot  535 Mar 23  2017 configuration.xsl
-rw-rw-r--. 1 mysqlroot mysqlroot 2161 Mar 23  2017 log4j.properties
-rw-rw-r--. 1 mysqlroot mysqlroot  922 Mar 23  2017 zoo_sample.cfg
[aaa@qq.com conf]# 

$ZOOKEEPER/conf/下:zoo.cfg

[aaa@qq.com conf]# cp zoo_sample.cfg ./zoo.cfg
[aaa@qq.com conf]# vim zoo.cfg 

具体有效配置如下:

dataDir=/usr/local/zookeeper-3.4.10/zk/data  #数据目录
dataLogDir=/usr/local/zookeeper-3.4.10/zk/dataLog  #日志目录
server.1=hadoop1:2888:2889  #节点:通信端口:选举端口
server.2=hadoop2:2888:2889
server.3=hadoop3:2888:2889

返回到安装目录,创建对应的两个文件目录,并配置myid

[aaa@qq.com conf]# cd ../
[aaa@qq.com zookeeper-3.4.10]# mkdir -p ./zk/data
[aaa@qq.com zookeeper-3.4.10]# mkdir -p ./zk/dataLog
#配置myid
[aaa@qq.com zookeeper-3.4.10]# echo 1 > ./zk/data/myid
[aaa@qq.com zookeeper-3.4.10]# cat ./zk/data/myid
1

分发文件到hadoop[2,3],配置/etc/profile并修改myid为对应的数字

[aaa@qq.com zookeeper-3.4.10]# scp -r /usr/local/zookeeper-3.4.10/ hadoop2:/usr/local/ &
[1] 5547
[aaa@qq.com zookeeper-3.4.10]# scp -r /usr/local/zookeeper-3.4.10/ hadoop3:/usr/local/ &
[2] 5549
[1]   Done                    scp -r /usr/local/zookeeper-3.4.10/ hadoop2:/usr/local/
[aaa@qq.com zookeeper-3.4.10]# 

启动,并查看状态

[aaa@qq.com zookeeper-3.4.10]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[aaa@qq.com zookeeper-3.4.10]# zkServer.sh status

上才艺!CentOS7从0到1部署Apache Hadoop生态集群
一台为leader,另外两台为follower,至于为什么hadoop3是leader而hadoop1是follower,这和zookeeper的选举机制有关系,有兴趣的小伙伴可以自行了解。

2、Hadoop安装

和zookeeper的安装步骤一致,但是配置的文件较多
解压配置环境变量就演示了,直接上配置文件!
Hadoop的配置文件分为两种:

  • core-default.xml: Hadoop的只读属性
  • core-site.xml: 某个给定hadoop的site-specific的配置。

第一种相当于是Hadoop的默认配置,第二种是开放给用户的配置,第二种配置会覆盖掉第一种配置。我们一般是修改第二种文件。

Hadoop配置文件及意义如下:

文件名 意义
hadoop-env.sh 运行Hadoop所需要的环境变量
yarn-env.sh 运行yarn所需要的环境变量
core-site.xml Hadoop核心全局配置文件,可在其他地方引用
hdfs.site.xml HDFS配置文件,继承自core-site.xml
yarn.site.xml yarn配置文件,继承自core-site.xml
mapred-site.xml MR配置文件,继承自core-site.xml
slaves Hadoop所有从节点列表

到配置文件目录下一个一个修改:

[aaa@qq.com local]# cd hadoop-2.7.3/etc/hadoop/
[aaa@qq.com hadoop]# 
[aaa@qq.com hadoop]# pwd
/usr/local/hadoop-2.7.3/etc/hadoop

[aaa@qq.com hadoop]# ls
capacity-scheduler.xml      httpfs-env.sh            mapred-env.sh
configuration.xsl           httpfs-log4j.properties  mapred-queues.xml.template
container-executor.cfg      httpfs-signature.secret  mapred-site.xml
core-site.xml               httpfs-site.xml          mapred-site.xml.template
hadoop-env.sh               kms-acls.xml             slaves
hadoop-metrics2.properties  kms-env.sh               ssl-client.xml.example
hadoop-metrics.properties   kms-log4j.properties     ssl-server.xml.example
hadoop-policy.xml           kms-site.xml             yarn-env.sh
hdfs-site.xml               log4j.properties         yarn-site.xml

hadoop.env.sh
修改JAVA_HOME为自己的安装目录

# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_171

core-site.xml
Hadoop集群核心配置,如文件系统主机和端口,临时文件夹等

<configuration>
<property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop1:9000</value>
</property>

<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop-2.7.3/hdfs/tmp</value>
        <description>A base for other temporary directories.</description>
</property>

<property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
</property>


<property>
        <name>fs.checkpoint.period</name>
        <value>60</value>
</property>


<property>
        <name>fs.checkpoint.size</name>
        <value>67108864</value>
</property>
</configuration>

hdfs-site.xml
HDFS核心配置,包括备份数量、namenode目录、datanode目录等信息

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>

        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value>
        <final>true</final>

        </property>

        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value>
                <final>true</final>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop1:9001</value>
        </property>

        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>

        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
</configuration>

yarn-site.xml
RM提供客户端访问的地址,RM的NodeManager的地址,资源调度模型,可用内存最大最小等

<configuration>

<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>hadoop1:18040</value>
        </property>

        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>hadoop1:18030</value>
        </property>

        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>hadoop1:18088</value>
        </property>

        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>hadoop1:18025</value>
        </property>

        <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>hadoop1:18141</value>
        </property>

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

mapred-site.xml
map运行模式,有local(本地),yarn,classic

[aaa@qq.com hadoop]# cp ./mapred-site.xml.template mapred-site.xml
[aaa@qq.com hadoop]# vim mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

log4j.properties
日志设置文件,不做探讨

selave
从节点列表,可包括Hadoop1

hadoop2
hadoop3

然后分发文件到两个节点,scp -r /usr/local/hadoop-2.7.3/ hadoop2:/usr/local/–>配置环境变量–>生效
直接一次性启动所有节点(主节点)

[aaa@qq.com hadoop]# pwd
/usr/local/hadoop-2.7.3/etc/hadoop
[aaa@qq.com hadoop]# cd ../..
[aaa@qq.com hadoop-2.7.3]# ./sbin/start-all.sh 

[aaa@qq.com hadoop-2.7.3]# jps
5569 QuorumPeerMain
7027 SecondaryNameNode
6854 DataNode
7191 ResourceManager
7511 Jps
6717 NameNode
7310 NodeManager
[aaa@qq.com hadoop-2.7.3]# 

查看从节点的启动进程

[aaa@qq.com local]# jps
15477 DataNode
15592 NodeManager
15753 Jps
4493 QuorumPeerMain
进程名 values
QuorumPeerMain zookeeper运行进程
SecondaryNameNode namenode守护进程
NameNode HDFS的主节点运行进程
DataNode HDFS从节点的运行进程,是实际保存数据的进程
ResourceManager yarn主节点运行进程
NodeManager yarn从节点运行进程

3、Hbase安装

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
== 解压–>配置环境变量跳过 ==
修改配置文件conf/hbase-env.sh

export HBASE_MANAGES_ZK=false
export JAVA_HOME=/usr/java/jdk1.8.0_171
export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/Hadoop

一个分布式运行的 Hbase 依赖一个 zookeeper 集群。所有的节点和客
户端都必须能够访问 zookeeper。默认的情况下 Hbase 会管理一个 zookeep 集群,即 Hbase 默认自带一个 zookeep 集群。这个集群会随着 Hbase 的启动而启动。而在实际的商业项目中通常自己管理一个 zookeeper 集群更便于优化配置ᨀ高集群 工 作 效 率 , 但 需 要 配 置 Hbase 。 需 要 修 改 conf/hbase-env.sh 里 面 的HBASE_MANAGES_ZK 来切换。这个值默认是 true 的,作用是让 Hbase 启动的时候同时也启动 zookeeper.在本实验中,我们采用独立运行 zookeeper 集群的方式,故将其属性值改为 false。

配置conf/hbase-site.xml

<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://hadoop1:9000/hbase</value>
	</property>
	
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
	
	<property>
		<name>hbase.master</name>
		<value>hdfs://hadoop1:6000</value>
	</property>

	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>hadoop1,hadoop2,hadoop3</value>
	</property>

	<property>
		<name>hbase.zookeeper.property.dataDir</name>
		<value>/usr/local/zookeeper-3.4.10</value>
	</property>
</configuration>

要想运行完全分布式模式,加一个属性 hbase.cluster.distributed
设置为 true 然后把 hbase.rootdir 设置为 HDFS 的 NameNode 的位置
hbase.rootdir:这个目录是 region server 的共享目录,用来持久化 Hbase。URL 需要是’完全正确’的,还要包含文件系统的 scheme
hbase.cluster.distributed :Hbase 的运行模式。false 是单机模式,true是分布式模式。

配置 conf/regionservers
列出了希望运行的全部 HRegionServer

hadoop2
hadoop3

复制hdfs-site.xml和core-site.xml文件到./conf目录
Hbase依赖于HDFS,故需要将core和hdfs配置文件复制到当前目录中

[aaa@qq.com hbase-1.2.4]# cp /usr/local/hadoop-2.7.3/etc/hadoop/hdfs-site.xml /usr/local/hbase-1.2.4/conf/
[aaa@qq.com hbase-1.2.4]# cp /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml /usr/local/hbase-1.2.4/conf/

分发文件到hadoop2–>配置环境变量

在hadoop1上启动Hbase(保证 hadoop 和 zookeeper 已开启):

bin/start-hbase.sh

[aaa@qq.com hbase-1.2.4]# jps
5569 QuorumPeerMain
7027 SecondaryNameNode
6854 DataNode
7191 ResourceManager
9193 Jps
6717 NameNode
7310 NodeManager
8990 HMaster

从节点查看jps

[aaa@qq.com local]# jps
15477 DataNode
16566 Jps
15592 NodeManager
4493 QuorumPeerMain
16429 HRegionServer

访问Hbase Web管理界面查看
上才艺!CentOS7从0到1部署Apache Hadoop生态集群

4、数据仓库:Mysql+metastore+hive cli

hive有三种运行模式:

  • 本地单用户模式,hive+derby(自带的数据库)
  • 本地多用户模式,hive+mysql
  • 远程多用户模式,hive+mysql+服务器

本次演示的是远程多用户模式,使用hadoop3安装MySQL,Hadoop2做metastore服务器,hadoop1当hive客户端

(1)hadoop3:mysql安装
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-community-server

启动服务

systemctl daemon-reload #重载配置
systemctl start mysqld  #开启服务
systemctl enable mysqld  #开机启动

安装完毕后,/var/log/mysqld.log 文件中会自动生成一个随机的密码,我们需要先取得这个随机密码,以用于登录 MySQL 服务端:

grep /var/log/mysqld.log  #获取初密码
mysql -uroot -p  #登陆 MySQL

MySQL密码设置

set global validate_password_policy=0;
set global validate_password_length=4;
alter user 'root'@'localhost' identified by '123456';

密码强度分级如下:
0 为 low 级别,只检查长度;
1 为 medium 级别(默认),符合长度为 8,且必须含有数字,大小写,特殊
字符;
2 为 strong 级别,密码难度更大一些,需要包括字典文件。
密码长度最低长为 4,当设置长度为 1、2、3 时,其长度依然为 4。

MySQL远程登录设置

mysql -uroot -p123456
create user 'root'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;

到此,hadoop3配置完毕

(2)hadoop2:hive metastore

解压–>配置环境变量
配置文件hive-env.sh
hadoop的环境变量

[aaa@qq.com conf]# mv ./hive-env.sh.template  hive-env.sh
[aaa@qq.com conf]# vim ./hive-env.sh 

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/usr/local/hadoop-2.7.3

修改 hive-site.xml 文件
hive核心配置,连接地址,MySQL驱动地址等

<configuration>
<!-- Hive 产生的元数据存放位置-->
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive_remote/warehouse</value>
        </property>
        
<!-- 数据库连接 JDBC 的 URL 地址-->
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://192.168.206.133:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
        </property>

<!-- 数据库连接 driver,即 MySQL 驱动-->
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>
                <value>com.mysql.jdbc.Driver</value>
        </property>

<!-- MySQL 数据库用户名-->
        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>root</value>
        </property>

<!-- MySQL 数据库密码-->
        <property>
                <name>javax.jdo.option.ConnectionPassword</name>
                <value>123456</value>
        </property>

        <property>
                <name>hive.metastore.schema.verification</name>
                <value>false</value>
        </property>

        <property>
                <name>datanucleus.schema.autoCreateAll</name>
                <value>true</value>
        </property>
</configuration>

复制MySQL的驱动包

[aaa@qq.com lib]# pwd
/usr/local/hive-2.1.1/lib

[aaa@qq.com lib]# ls | grep mysql
mysql-connector-java-5.1.46-bin.jar

Hadoop需要运行在Java平台上,而MySQL则不是,故需要将MySQL的驱动包复制到hadoop2,用于hadoop2的hive和hadoop3的MySQL通信(我是直接下载的驱动包,rz传到./lib下)

至此,hadoop2配置完毕

(3)hive client

首先解决版本冲突和 jar 包依赖问题

[aaa@qq.com conf]# scp /usr/local/hive-2.1.1/lib/jline-2.12.jar /usr/local/hadoop-2.7.3/share/hadoop/yarn/lib/

由于客户端需要和 Hadoop 通信,所以需要更改 Hadoop 中 jline 的版本。即保留一个高版本的 jline jar 包,从 hive 的 lib 包中拷贝到 Hadoop 中 lib 位置

修改 hive-env.sh
和metastore不同,客户端只需要配置少部分内容

<configuration>

<!-- Hive 产生的元数据存放位置-->
        <property>
                <name>hive.metastore.warehouse.dir</name>
                <value>/user/hive_remote/warehouse</value>
        </property>

<!--- 使用本地服务连接 Hive,默认为 true-->
        <property>
                <name>hive.metastore.local</name>
                <value>false</value>
        </property>

<!-- 连接服务器-->
        <property>
                <name>hive.metastore.uris</name>
                <value>thrift://hadoop2:9083</value>
        </property>
</configuration>         

至此,hadoop1配置完毕

(4)启动hive

hadoop2:

[aaa@qq.com hive-2.1.1]# ./bin/hive --service metastore

启动效果:
上才艺!CentOS7从0到1部署Apache Hadoop生态集群
hadoop1:

[aaa@qq.com conf]# hive
hive> SHOW DATABASES;
OK
datadb
default
Time taken: 0.976 seconds, Fetched: 2 row(s)
hive> 

三、集群测试

1、MR测试

hadoop内自带了一些jar包,可以直接使用测试

[root@hadoop1 mapreduce]# pwd
/usr/local/hadoop-2.7.3/share/hadoop/mapreduce
[root@hadoop1 mapreduce]# ls
hadoop-mapreduce-client-app-2.7.3.jar              hadoop-mapreduce-client-shuffle-2.7.3.jar
hadoop-mapreduce-client-common-2.7.3.jar           hadoop-mapreduce-examples-2.7.3.jar
hadoop-mapreduce-client-core-2.7.3.jar             lib
hadoop-mapreduce-client-hs-2.7.3.jar               lib-examples
hadoop-mapreduce-client-hs-plugins-2.7.3.jar       mysql57-community-release-el7-8.noarch.rpm
hadoop-mapreduce-client-jobclient-2.7.3.jar        sources
hadoop-mapreduce-client-jobclient-2.7.3-tests.jar
(1)计算圆周率

测试圆周率的计算
格式:hadoop jar jar包名 函数 函数参数
第一个10表示多少次map,第二个10表示每次mar的个数

[aaa@qq.com mapreduce]# hadoop jar hadoop-mapreduce-examples-2.7.3.jar pi 10 10

运行结果(部分)

Estimated value of Pi is 3.20000000000000000000
(2)词频统计

同样也是自带的包内包含的功能,不过需要基于HDFS操作
我已经提前将word.txt传到hdfs的/data目录下,里面是下载的一篇纯英文的长小说,直接上才艺

[aaa@qq.com mapreduce]# hdfs dfs -ls /data
Found 3 items
-rw-r--r--   2 root supergroup     690577 2020-07-19 01:07 /data/word.txt
[aaa@qq.com mapreduce]# hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /data/word.txt /data/outs

注意:wordcount后面的两个目录均是HDFS下的目录

查看一下

[aaa@qq.com mapreduce]# hdfs dfs -ls /data/outs/
Found 2 items
-rw-r--r--   2 root supergroup          0 2020-07-19 22:06 /data/outs/_SUCCESS
-rw-r--r--   2 root supergroup     186577 2020-07-19 22:06 /data/outs/part-r-00000
[aaa@qq.com mapreduce]# hdfs dfs -cat /data/outs/part-r-00000

也可以在Web界面查看目录
上才艺!CentOS7从0到1部署Apache Hadoop生态集群

2、Hive分析

(1)导入到Hive

本地导入

hive> LOAD DATA LOCAL INPATH "/home/hadoopUser/data/test1.txt"
    > INTO TABLE test1;

HDFS导入

hive> LOAD DATA INPATH "/input/test1.txt"
    > OVERWRITE INTO TABLE test1;
(2)从Hive导出

到本地:

insert overwrite local directory '/data/hive/export/student_info' select * from default.student 

不过我听说这种方式会清空文件夹里的内容,建议使用INTO导出到本地的方式

这里使用了OVERWRITE关键字,因此之前的内容(如果是非分区表,就是之前表中的内容)将会被覆盖掉。
这里如果没有使用OVERWRITE关键字或者使用INTO关键字替换掉它的话,那么Hive将会以追加的方式写入数据而不会覆盖掉之前已经存在的内容。

shell中导出到本地

bin/hive -e "select * from default.student_info ;" > /data/hive/export/local/student_info

~~ 其他的一些方法就不一一罗列了,大家有兴趣的自行了解~~
原创内容,进制复制盗用!欢迎讨论交流.

参考连接:yarn-site.xml配置文件
参考链接:core-site.xml配置文件
参考链接:centos7 添加端口