Hadoop-HA搭建

Hadoop-HA

配置常见参数

网络

编辑网络环境

cmd-->ipconfig
以太网适配器 VMware Network Adapter VMnet8:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::a816:66c5:d60c:cab9%13
   IPv4 地址 . . . . . . . . . . . . : 192.168.84.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :

修改网络信息

vi /etc/sysconfig/network-scripts/ifcfg-ens33

--修改
ONBOOT=yes
BOOTPROTO=static //静态网络IP dhcp 动态获取网络IP
--添加
IPADDR=192.168.84.100
NETMASK=255.255.255.0
GATEWAY=192.168.84.2
DNS1=114.114.114.114
删除------
UUID

重启网卡重新加载配置文件

ip addr
systemctl restart network.service
ping www.baidu.com
ctrl+c 终止命令的执行
可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

防火墙

保护本机的端口不被别人访问
如果端口需要被别人访问到,需要添加端口的防火墙例外

关闭防火墙
本次开机状态下防火墙关闭
systemctl stop firewalld (本次服务内关闭防火墙)
服务器重启后防火墙禁用
systemctl disable firewalld(禁用防火墙服务)

防火墙
防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、
外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术
在centOS7+中 使用firewalld代替以前的 iptables ;
#查看防火墙状态
systemctl status firewalld.service
#临时停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
firewall-cmd --state ##查看防火墙状态,是否是
running
firewall-cmd --reload ##重新载入配置,比如添加规则
之后,需要执行此命令
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的
开启一个端口的正确操作
加密算法
不可逆加密算法
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回
yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
# 添加
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --zone=public --query-port=80/tcp
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent

软件安装限制

操作系统对未知软件的安装有可能拒绝或者警告,我们需要禁用这个功能
vi /etc/selinux/config
SELINUX=disabled

关机

halt
直接拔掉电源
poweroff
直接关闭机器,但是有可能当前虚拟机其他人在使用
shutdown -h now
马上关闭计算机 ,但是可以给其他用户发送消息
reboot
重启虚拟机

修改克隆机配置

网络信息

参考2.4.1的修改网络信息

主机名

vi /etc/hostname
修改完成后需要重启生效
hostname bd16
本次启动中有效,重启虚拟机还是使用原来的名字

YUM安装

yum的作用
可以帮我们管理RPM包
可以帮我们安装软件,
如果软件有其他依赖,会帮我们安装依赖后在安装软件
类似于Maven
yum命令
search 查询命令或者软件
info
查看包的信息
list / list jdk
查询安装的rpm包,或者只查询某一周
更换yum源
首先安装wget
yum install wget -y
将系统原始配置文件失效
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
使用Wget获取阿里yum源配置文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清空以前yum源的缓存
yum clean all
获取阿里云的缓存
yum makecache

日期与时间

时间命令
查看时区
ll /etc/localtime
/etc/localtime -> ../usr/share/zoneinfo/America/Los_Angeles
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
查看当前系统时间
日期自动同步
自动同步时间
yum install ntp -y
ntpdate cn.ntp.org.cn
本地搭建NTP服务
开启本地NTP服务器
service ntpd start
# vi /etc/ntp.conf
#========权限控制============
restrict default kod nomodify notrap nopeer noquery 拒绝IPV4用户
restrict -6 default kod nomodify notrap nopeer noquery 拒绝IPV6用户
restrict 210.72.145.44 授权国家授时中心服务器访问本地NTP
restrict 133.100.11.8 授权133.100.11.8访问本地NTP
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.84.2 mask 255.255.255.0 nomodify 本地网段授权访问
#=========源服务器===========
server cn.ntp.org.cn prefer 指定上级更新时间服务器,优先使用这个地址
#=========差异分析===========
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
客户端同步时间
ntpdate 192.168.84.100
## 启动定时任务
yum install -y ntp
crontab -e
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;

常用软件

yum install man man-pages ntp vim lrzsz zip unzip telnet perl net-tools -y

定时任务

重启crontab,使配置生效
systemctl restart crond.service
通过crontab -l
查看当前的定时任务
查看任务的历史
vim /var/spool/mail/root
清除任务
crontab -r

虚拟机相互免秘钥

##三台主机分别生成秘钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
##host验证
vim /etc/ssh/ssh_config 在最后添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
##将秘钥分别拷贝给自己和别人
ssh-copy-id -i ~/.ssh/id_rsa.pub root@basenode
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03
123456

MYSQL安装

#----------卸载mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
Mysql的下载地址
https://downloads.mysql.com/archives/community/

tar -xvf  mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /opt/service/
mv /opt/service/mysql-8.0.28-linux-glibc2.12-x86_64/ /opt/service/mysql-8.0.28
mkdir -p /opt/service/mysql-8.0.28/logs
touch /opt/service/mysql-8.0.28/logs/mysql-error.log
touch /opt/service/mysql-8.0.28/logs/mysql-slow.log
useradd mysql
chown -R mysql:mysql /opt/service/mysql-8.0.28
yum install -y libaio*
vim /etc/my.cnf
/opt/service/mysql-8.0.28/bin/mysqld --initialize --console --lower-case-table-names=1
cp /opt/service/mysql-8.0.28/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
#----------启动mysql
systemctl start mysqld
cat >>/etc/profile<<'EOF'
export MYSQL_HOME=/opt/service/mysql-8.0.28
export PATH=$MYSQL_HOME/bin:$PATH
EOF
source /etc/profile
#----------查找密码并登陆Mysql
cat /opt/service/mysql-8.0.28/logs/mysql-error.log | grep password
mysql -u root -p
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
#打开远程访问
use mysql;
update user set host = '%' where user = 'root' and host='localhost';
GRANT ALL ON *.* TO 'root'@'%';
flush privileges;

my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /opt/service/mysql-8.0.28
datadir = /opt/service/mysql-8.0.28/data
pid-file = /opt/service/mysql-8.0.28/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思
skip-name-resolve
#设置协议认证方式(重点啊)
default_authentication_plugin=mysql_native_password
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
character-set-server=utf8mb4
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking
back_log = 600
# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
# 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
max_connections = 1000
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
max_connect_errors = 6000
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。
open_files_limit = 65535
# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
table_open_cache = 128
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
# 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);
# 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
max_allowed_packet = 4M
# 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。
# 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
binlog_cache_size = 1M
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
max_heap_table_size = 8M
# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
tmp_table_size = 16M
# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
# 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。
# 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果
read_buffer_size = 2M
# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
read_rnd_buffer_size = 8M
# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
sort_buffer_size = 8M
# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
# 如果不能,可以尝试增加sort_buffer_size变量的大小
join_buffer_size = 8M
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享
thread_cache_size = 8
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
# 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
# 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)
# 根据物理内存设置规则如下:
# 1G  —> 8
# 2G  —> 16
# 3G  —> 32
# 大于3G  —> 64
#query_cache_size = 8M
#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
#query_cache_limit = 2M
#指定单个查询能够使用的缓冲区大小,默认1M
key_buffer_size = 4M
#指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,
# 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,
# 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,
# 至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低
ft_min_word_len = 4
# 分词词汇最小长度,默认4
transaction_isolation = REPEATABLE-READ
# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30 #超过30天的binlog删除
log_error = /opt/service/mysql-8.0.28/logs/mysql-error.log #错误日志路径
slow_query_log = 1
long_query_time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file =/opt/service/mysql-8.0.28/logs/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
lower_case_table_names = 1 #不区分大小写
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
innodb_file_per_table = 1
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
# 独立表空间优点:
# 1.每个表都有自已独立的表空间。
# 2.每个表的数据和索引都会存在自已的表空间中。
# 3.可以实现单表在不同的数据库中移动。
# 4.空间可以回收(除drop table操作处,表空不能自已回收)
# 缺点:
# 单表增加过大,如超过100G
# 结论:
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_open_files = 500
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_buffer_pool_size = 64M
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_write_io_threads = 4
innodb_read_io_threads = 4
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
innodb_thread_concurrency = 0
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
innodb_purge_threads = 1
# InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。
# 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单
# 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1
innodb_flush_log_at_trx_commit = 2
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
# 总结
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_log_buffer_size = 2M
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
innodb_log_file_size = 32M
# 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_log_files_in_group = 3
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
innodb_max_dirty_pages_pct = 90
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%
innodb_lock_wait_timeout = 120 
# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒
bulk_insert_buffer_size = 8M
# 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。
myisam_sort_buffer_size = 8M
# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
myisam_max_sort_file_size = 10G
# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出
myisam_repair_threads = 1
# 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) 
interactive_timeout = 28800
# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
wait_timeout = 28800
# 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,
# 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)
# MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,
# 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,
# 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。
# 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,
# 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。
[mysqldump]
quick
max_allowed_packet = 16M #服务器发送和接受的最大包长度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

JAVA环境

tar -xzvf  jdk-8u331-linux-x64.tar.gz -C /opt/env
cat >>/etc/profile<<'EOF'
export JAVA_HOME=/opt/env/jdk1.8.0_331
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile

Zookeeper安装

tar -xzvf  zookeeper-3.4.5.tar.gz -C /opt/service
cd /opt/service/zookeeper-3.4.5/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
mkdir /opt/service/zookeeper-3.4.5/data
cd /opt/service/zookeeper-3.4.5/data
touch /opt/service/zookeeper-3.4.5/data/myid
[node01] echo 1 > /opt/service/zookeeper-3.4.5/data/myid
[node02] echo 2 > /opt/service/zookeeper-3.4.5/data/myid
[node03] echo 3 > /opt/service/zookeeper-3.4.5/data/myid
cat >>/etc/profile<<'EOF'
export ZOOKEEPER_HOME=/opt/service/zookeeper-3.4.5
export PATH=$ZOOKEEPER_HOME/bin:$PATH
EOF
source /etc/profile
mkdir -p /opt/service/zookeeper-3.4.5/data

开启集群
 zkServer.sh start
 zkServer.sh status

zoo.cfg

dataDir=/opt/service/zookeeper-3.4.5/data
# the port at which the clients will connect
clientPort=2181
# 设置服务器内部通信的地址和zk集群的节点
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

MAVEN环境

tar -xzvf apache-maven-3.8.6-bin.tar.gz -C -C /opt/env
cat >>/etc/profile<<'EOF'
export MAVEN_HOME=/opt/env/apache-maven-3.8.6
export PATH=$MAVEN_HOME/bin:$PATH
EOF

findbugs安装

tar -zxvf findbugs-3.0.1.tar.gz -C /opt/service/
cat >>/etc/profile<<'EOF'
export FINDBUGS_HOME=/opt/env/apache-maven-3.8.6
export PATH=$FINDBUGS_HOME/bin:$PATH
EOF

Hadoop高可用集群

appache版本hadoop重新编译

  1. 为什么要编译hadoop

    由于appache给出的hadoop的安装包没有提供带C程序访问的接口,所以我们在使用本地库
    (本地库可以用来做压缩,以及支持C程序等等)的时候就会出问题,需要对Hadoop源码包进
    行重新编译

  2. 准备linux环境

    1. JAVA环境
    2. MAVEN环境
  3. 在线安装一些依赖包

    yum install gcc gcc-c++
    yum install autoconf automake libtool curl
    yum install lzo-devel zlib-devel openssl openssl-devel ncurses-devel
    yum install snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst
    
  4. 安装cmake

    #yum卸载已安装cmake 版本低
    yum erase cmake
    tar -zxvf cmake-3.13.5.tar.gz -C /opt/service/
    cd /opt/service/cmake-3.13.5/
    ./configure
    make && make install
    #验证
    # cmake -version      
    cmake version 3.13.5
    
  5. 安装protobuf

    tar -zxvf  protobuf-2.5.0.tar.gz -C /opt/service/
    cd /opt/service/protobuf-2.5.0
    ./configure
    make && make install
    #验证是否安装成功
    protoc --version
    
  6. 安装snappy

    tar -xzvf snappy-1.1.1.tar.gz -C /opt/service/
    cd /opt/service//snappy-1.1.1/
    ./configure
    make && make install
    #验证是否安装
    ls -lh /usr/local/lib |grep snappy
    
  7. 安装zstd

    wget https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz
    tar -xzf zstd-1.4.4.tar.gz -C /opt/service/
    cd /opt/service/zstd-1.4.4/
    make && make install
    
  8. 编译hadoop

    tar -zxvf hadoop-3.1.2-src.tar.gz -C /opt/software/
    cd /opt/software/hadoop-3.1.2-src
    mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib -Dzstd.lib=/usr/local/lib   -Dbundle.zstd=true
    cd /opt/software/hadoop-3.1.2-src/hadoop-dist/target/
    

Hadoop-hdfs

准备安装环境

tar -zxvf hadoop-3.1.2.tar.gz -C /opt/service/

修改集群环境

cd /opt/service/hadoop-3.1.2/etc/hadoop/
vim hadoop-env.sh
##直接在文件的最后添加
export JAVA_HOME=/opt/env/jdk1.8.0_331
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

修改配置文件

 vim core-site.xml
<!--用于定义系统级别的参数,如HDFS URL、Hadoop的临时目录以及用于rack-aware集群中的配置文件的配置等,此中的参数定义会覆盖core-default.xml文件中的默认配置-->
<configuration>
    <!--声明namenode的地址,相当于声明hdfs文件系统。我们可以指定某个ip地址,在ha模式中我们通常指定hdfs集群的逻辑名称-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hdfs-cluster</value>
    </property>
    <!--声明hadoop工作目录的地址-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/service/hadoop-3.1.2/hadoopDatas/tempDatas</value>
    </property>
    <!--在网页界面访问数据使用的用户名。默认值是一个不真实存在的用户,此用户权限很小,不能访问不
同用户的数据。这保证了数据安全。也可以设置为hdfs和hadoop等具有较高权限的用户,但会导致能够登
陆网页界面的人能看到其它用户数据。实际设置请综合考虑。如无特殊需求。使用默认值就好.-->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
    <!--指定zookeeper集群的地址,让zookeeper帮我们管理hdfs集群。-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node01:2181,node02:2181,node03:2181</value>
    </property>
</configuration>
vim hdfs-site.xml
<!--HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置.-->
<configuration>

    <!--指定一个逻辑名称,该名称会自动去帮我们找打真实NameNode节点,这和咱们的keepalive的VIP
有点类似!这个名称咱们可以自定义!但是我们正在引用时千万别引用错了!-->
    <property>
        <name>dfs.nameservices</name>
        <value>hdfs-cluster</value>
    </property>
    <!--上面我们定义了dfs.nameservices的名称,现在我们就用到了,我们把定义的逻辑名称
指向了各个namenode的别名-->
    <property>
        <name>dfs.ha.namenodes.hdfs-cluster</name>
        <value>nn1,nn2</value>
    </property>
    <!--定义远程主机调用的服务器地址。-->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
        <value>node01:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>node02:8020</value>
    </property>
    <!--定义远程主机调用的服务器地址-->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>node01:9870</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>node02:9870</value>
    </property>
    <!--配置JournalNode集群的地址-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/hdfs-cluster</value>
    </property>
    <!--指定JN节点存放编辑日志的目录。-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/service/hadoop-3.1.2/hadoopDatas/tempDatas/qjm</value>
    </property>
    <!--配置故障转移的代理类,这是HDFS客户端找到active NameNode类名的一个代理类,如果你不配置
这个项的话,那么客户端连接active namenode地址时会报错!实际上故障转移就是通过这个代理类来实
现的,我们只需要默认官网的配置即可!不需要手动修改!-->
    <property>
        <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!--指定ha出现故障时的隔离方法!-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
        <value>shell(true)</value>
    </property>
    <!--指定隔离主机的私钥PATH-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--开启自动故障转移功能.-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!--为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。
而只有一个节点的伪分布式环境中其仅用
保存一个副本即可,这可以通过dfs.replication属性进行定义。它是一个软件级备份。-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>
vim workers
node01
node02
node03

拷贝分发软件

scp -r /opt/service/hadoop-3.1.2/ node02:/opt/service/
scp -r /opt/service/hadoop-3.1.2/ node03:/opt/service/

修改环境变量

cat >>/etc/profile<<'EOF'
export HADOOP_HOME=/opt/service/hadoop-3.1.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
EOF
source /etc/profile

将环境变量拷贝到其他主机

scp /etc/profile node02:/etc/profile
scp /etc/profile node03:/etc/profile

重新加载三台服务器的环境变量

source /etc/profile

压缩算法

使用hadoop checknative来查看hadoop支持的各种压缩算法

isa安装

 git clone https://github.com/01org/isa-l.git
 yum install -y yasm
 一、下载NASM软件包 
到NSAM官网上选择最新的稳定版NASM软件包下载
https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/
tar -xvf nasm-2.14.02.tar.gz /opt/env
./configure
make
make install
vim /etc/profil
export NASM_HOME=/opt/env/nasm-2.14.02
export PATH=$NASM_HOME/bin:$PATH
source /etc/profil
nasm -version
make -f Makefile.unx
cp bin/libisal.so bin/libisal.so.2 /lib64 (其他机器)
 #验证是否正确启用了 isa-l 库
  hadoop checknative

安装lzo

wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz -C /opt/service/
cd /opt/service/lzo-2.10
./configure
make && make install
编译hadoop-lzo源码
wget https://github.com/twitter/hadoop-lzo/archive/master.zip
unzip master.zip
cd hadoop-lzo-master
#vim pom.xml
#<hadoop.current.version>3.1.2</hadoop.current.version>
vim /etc/profile
export C_INCLUDE_PATH=/opt/service/lzo-2.10/include
export LIBRARY_PATH=/opt/service/lzo-2.10/lib 
source /etc/profile
mvn package -Dmaven.test.skip=true
cd target/
cp hadoop-lzo-0.4.21-SNAPSHOT.jar  /opt/service/hadoop-3.1.2/share/hadoop/common/
cd native/Linux-amd64-64
tar -cBf - -C lib . | tar -xBvf - -C ~
cp ~/libgplcompression* $HADOOP_HOME/lib/native/
cd /opt/service/hadoop-3.1.2/share/hadoop/common/
scp -r hadoop-lzo-0.4.21-SNAPSHOT.jar node02:$PWD
scp -r hadoop-lzo-0.4.21-SNAPSHOT.jar node03:$PWD
cd /opt/service/hadoop-3.1.2/etc/hadoop
vim core-site.xml
<!--HDFS的相关设定,如文件副本的个数、块大小及是否使用强制权限等,此中的参数定义会覆盖hdfs-default.xml文件中的默认配置.-->
<configuration>

    <!--指定一个逻辑名称,该名称会自动去帮我们找打真实NameNode节点,这和咱们的keepalive的VIP
    有点类似!这个名称咱们可以自定义!但是我们正在引用时千万别引用错了!-->
    <property>
        <name>dfs.nameservices</name>
        <value>hdfs-cluster</value>
    </property>
    <!--上面我们定义了dfs.nameservices的名称,现在我们就用到了,我们把定义的逻辑名称
    指向了各个namenode的别名-->
    <property>
        <name>dfs.ha.namenodes.hdfs-cluster</name>
        <value>nn1,nn2</value>
    </property>
    <!--定义远程主机调用的服务器地址。-->
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn1</name>
        <value>node01:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hdfs-cluster.nn2</name>
        <value>node02:8020</value>
    </property>
    <!--定义远程主机调用的服务器地址-->
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn1</name>
        <value>node01:9870</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hdfs-cluster.nn2</name>
        <value>node02:9870</value>
    </property>
    <!--配置JournalNode集群的地址-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/hdfs-cluster</value>
    </property>
    <!--指定JN节点存放编辑日志的目录。-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/service/hadoop-3.1.2/hadoopDatas/tempDatas/qjm</value>
    </property>
    <!--配置故障转移的代理类,这是HDFS客户端找到active NameNode类名的一个代理类,如果你不配置
    这个项的话,那么客户端连接active namenode地址时会报错!实际上故障转移就是通过这个代理类来实
    现的,我们只需要默认官网的配置即可!不需要手动修改!-->
    <property>
        <name>dfs.client.failover.proxy.provider.hdfs-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!--指定ha出现故障时的隔离方法!-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
        <value>shell(true)</value>
    </property>
    <!--指定隔离主机的私钥PATH-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <!--开启自动故障转移功能.-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <!--为了数据可用性及冗余的目的,HDFS会在多个节点上保存同一个数据块的多个副本,其默认为3个。
    而只有一个节点的伪分布式环境中其仅用
    保存一个副本即可,这可以通过dfs.replication属性进行定义。它是一个软件级备份。-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <!--算法-->
    <property>
        <name>io.compression.codecs</name>
        <value>
            org.apache.hadoop.io.compress.GzipCodec,
            org.apache.hadoop.io.compress.DefaultCodec,
            org.apache.hadoop.io.compress.BZip2Codec,
            org.apache.hadoop.io.compress.SnappyCodec,
            com.hadoop.compression.lzo.LzoCodec,
            com.hadoop.compression.lzo.LzopCodec
        </value>
    </property>
    <property>
        <name>io.compression.codec.lzo.class</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
</configuration>
scp -r core-site.xml node02:$PWD
scp -r core-site.xml node03:$PWD

三台服务器启动Zookeeper

zkServer.sh start
zkServer.sh status

三台服务器启动JournalNode

hdfs --daemon start journalnode

格式化NameNode

node01# hdfs namenode -format
node01# hdfs --daemon start namenode
node02# hdfs namenode -bootstrapStandby
node01# hdfs zkfc -formatZK
node01# start-dfs.sh

测试集群

  • http://node01:9870
  • http://node02:9870
hdfs dfs -mkdir -p /test
node01# hdfs dfs -put zookeeper-3.4.5.tar.gz /test/
node01# hdfs dfs -D dfs.blocksize=1048576 -put zookeeper-3.4.5.tar.gz /test/

关闭集群

node01#stop-dfs.sh

访问Hadoop集群

Java访问

  • window系统的环境变量配置

    • 解压hadoop-3.1.2.tar.gz,将解压后的文件夹存放到自己软件目录

      • 例如:D:\software\hadoop-3.1.2
    • 解压winutils-master.zip,找到3.1.2版本

      • 将所有的文件覆盖到D:\software\hadoop-3.1.2\bin目录
    • 将winutils.exe和hadoop.dll文件拷贝到 C:\Windows\System32目录下

    • 环境变量

      • 将Hadoop添加到环境变量
        • HADOOP_HOME–>D:\software\hadoop-3.1.2
        • HADOOP_USER_NAME–>root
        • %HADOOP_HOME%\bin;%HADOOP_HOME%\sbin;
      • JDK的版本也设置的和服务器版本一致
      • 修改当前Window的hosts文件
        • C:\Windows\System32\drivers\etc\hosts
        • 192.168.58.101 node01
          192.168.58.102 node02
          192.168.58.103 node03
      • 拷贝Hadoop的配置文件
        • core-site.xml
          hdfs-site.xml
          mapred-site.xml
          yarn-site.xml

Hadoop-yarn

切换工作目录

cd /opt/service/hadoop-3.1.2/etc/hadoop/

修改配置文件

 vim mapred-site.xml
<configuration>
    <!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 指定mapreduce jobhistory地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node01:10020</value>
    </property>
    <!-- 任务历史服务器的web地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node01:19888</value>
    </property>
    <!-- 配置运行过的日志存放在hdfs上的存放路径 -->
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/opt/service/hadoop-3.1.2/history/done</value>
    </property>
    <!-- 配置正在运行中的日志在hdfs上的存放路径 -->
    <property>
        <name>mapreudce.jobhistory.intermediate.done-dir</name>
        <value>/opt/service/hadoop-3.1.2/history/done/done_intermediate</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>
            /opt/service/hadoop-3.1.2/etc/hadoop,
            /opt/service/hadoop-3.1.2/share/hadoop/common/*,
            /opt/service/hadoop-3.1.2/share/hadoop/common/lib/*,
            /opt/service/hadoop-3.1.2/share/hadoop/hdfs/*,
            /opt/service/hadoop-3.1.2/share/hadoop/hdfs/lib/*,
            /opt/service/hadoop-3.1.2/share/hadoop/mapreduce/*,
            /opt/service/hadoop-3.1.2/share/hadoop/mapreduce/lib/*,
            /opt/service/hadoop-3.1.2/share/hadoop/yarn/*,
            /opt/service/hadoop-3.1.2/share/hadoop/yarn/lib/*
        </value>
    </property>
</configuration>
vim yarn-site.xml
<configuration>
    <!-- 开启RM高可用 -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- 指定RM的cluster id -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yarn-cluster</value>
    </property>
    <!-- 指定RM的名字 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 分别指定RM的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node01</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node03</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>node01:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>node03:8088</value>
    </property>
    <!-- 指定zk集群地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node01:2181,node02:2181,node03:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 开启日志聚合 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    <!-- 启用自动恢复 -->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
    <property>
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <!-- Whether virtual memory limits will be enforced for containers. -->
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>3</value>
    </property>
</configuration>

拷贝到其他节点

scp yarn-site.xml mapred-site.xml node02:$PWD
scp yarn-site.xml mapred-site.xml node03:$PWD

开启集群

[123]zkServer.sh start
node01# start-dfs.sh
node01# start-yarn.sh
node01# mr-jobhistory-daemon.sh start historyserver
http://node01:8088/cluster 查看yarn集群
http://node01:19888/jobhistory 查看历史完成的任务

hive安装

下载

http://archive.apache.org/dist/hive/
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/service/
cd /opt/service/apache-hive-3.1.2-bin/

修改配置文件

配置hive-env.sh

cd conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/opt/service/hadoop-3.1.2/
export HIVE_CONF_DIR=/opt/service/apache-hive-3.1.2-bin/conf
export HIVE_AUX_JARS_PATH=/opt/service/apache-hive-3.1.2-bin/lib

创建hive-site.xml

 cp hive-default.xml.template hive-site.xml
 vim hive-site.xml
 #删除多余的配置文件
<Configuration>
    <!-- 数据库相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 美化打印数据 -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
    <!-- hive server -->
    <property>
        <name>hive.server2.webui.host</name>
        <value>node01</value>
    </property>
    <property>
        <name>hive.server2.webui.port</name>
        <value>10002</value>
    </property>
    <!-- 数据存储位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/opt/service/apache-hive-3.1.2-bin/warehouse</value>
    </property>
</Configuration>

修改core-site.xml

cd /opt/service/hadoop-3.1.2/etc/hadoop/
vim core-site.xml
#后面添加配置信息
<!--该参数表示可以通过httpfs接口hdfs的ip地址限制-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--通过httpfs接口访问的用户获得的群组身份-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

配置日志组件

#创建文件目录
mkdir -p /opt/service/apache-hive-3.1.2-bin/logs
cd conf
cp hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties
property.hive.log.dir = /opt/service/apache-hive-3.1.2-bin/logs

添加驱动包

cp mysql-connector-java-8.0.28.jar /opt/service/apache-hive-3.1.2-bin/lib/

Guava包

#首先要删除hadoop中的guava-*.jar包
rm -rf /opt/service/hadoop-3.1.2/share/hadoop/common/lib/guava-*.jar
rm -rf /opt/service/hadoop-3.1.2/share/hadoop/hdfs/lib/guava-*.jar

将Hive的Guava拷贝给Hive

cp /opt/service/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/service/hadoop-3.1.2/share/hadoop/common/lib/
cp /opt/service/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/service/hadoop-3.1.2/share/hadoop/hdfs/lib/

配置环境变量

vim /etc/profile
export HIVE_HOME=/opt/service/apache-hive-3.1.2-bin
export PATH=$HIVE_HOME/bin:$PATH
source /etc/profile

拷贝到其他节点

hive文件夹

scp -r /opt/service/apache-hive-3.1.2-bin node02:/opt/service
scp -r /opt/service/apache-hive-3.1.2-bin node03:/opt/service

环境变量

 scp /etc/profile root@node02:/etc/profile
  scp /etc/profile root@node03:/etc/profile
 [1,2,3] source /etc/profile 

core-stie.xml

 scp /opt/service/hadoop-3.1.2/etc/hadoop/core-site.xml root@node02:/opt/service/hadoop-3.1.2/etc/hadoop/
  scp /opt/service/hadoop-3.1.2/etc/hadoop/core-site.xml root@node03:/opt/service/hadoop-3.1.2/etc/hadoop/

jar包[2,3]

#首先要删除hadoop中的guava-*.jar包
rm -rf /opt/service/hadoop-3.1.2/share/hadoop/common/lib/guava-*.jar
rm -rf /opt/service/hadoop-3.1.2/share/hadoop/hdfs/lib/guava-*.jar
cp /opt/service/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/service/hadoop-3.1.2/share/hadoop/common/lib/
cp /opt/service/apache-hive-3.1.2-bin/lib/guava-*.jar /opt/service/hadoop-3.1.2/share/hadoop/hdfs/lib/

客户端配置文件

#选取node03为客户端节点
[23] vim /opt/service/apache-hive-3.1.2-bin/conf/hive-site.xml
<Configuration>
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <!-- 美化打印数据 -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
    <!-- 数据存储位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/opt/service/apache-hive-3.1.2-bin/warehouse</value>
    </property>
    <!--指定hive.metastore.uris的port.为了启动metastore服务的时候不用指定端口-->
    <!--hive ==service metastore -p 9083 & | hive ==service metastore-->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node01:9083</value>
    </property>
</Configuration>

启动集群

#启动Zookeepe
[1,2,3]zkServer.sh start
[1,2,3]zkServer.sh status
#启动Hdfs+Yarn
[1]start-all.sh
#初始化数据库
[1] schematool -dbType mysql -initSchema
#启动Hive
[1] hive --service metastore
[1]nohup hive --service metastore > /dev/null 2>&1 &
[1] hive
#启动HiveServer2
[1]hiveserver2
[1]nohup hiveserver2 > /dev/null 2>&1 &
[3]beeline -u jdbc:hive2://node01:10000 -n root

Hive的三种交互方式

第一种交互方式

shell交互Hive,用命令hive启动一个hive的shell命令行,在命令行中输入sql或者命令来和Hive交互。

服务端启动metastore服务:nohup hive --service metastore > /dev/null 2>&1 &
进入命令:hive
退出命令行:quit;

第二种交互方式

Hive启动为一个服务器,对外提供服务,其他机器可以通过客户端通过协议连接到服务器,来完成访问
操作,这是生产环境用法最多的

hadoop fs -chmod -R 777 /lzj
服务端启动hiveserver2服务:nohup hiveserver2 > /dev/null 2>&1 &
需要稍等一下,启动服务需要时间:
进入命令:1)先执行beeline,在执行! connect jdbc:hive2://node01:10000
2)或者直接执行 beeline -u jdbc:hive2://node01:10000 -n root
退出命令行:!exit

第三种交互方式

使用 –e 参数来直接执行hql的语句

bin/hive -e "show databases;"

使用 –f 参数通过指定文本文件来执行hql的语句

vim hive.sql
use myhive;
select * from test;

保存退出

hive -f hive.sql

特点:执行完sql后,回到linux命令行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值