Hadoop install
Step1:集群角色规划
-
角色规划的准则
根据软件工作特性和服务器硬件资源情况合理分配比如依赖内存工作的NameNode是不是部署在大内存机器上?
-
角色规划注意事项
资源上有抢夺冲突的,尽量不要部署在一起工作上需要互相配合的。尽量部署在一起
服务器 | 运行角色 |
---|---|
Spark | namenode datanode resourcemanager nodemanager |
Spark01 | secondarynamenode datanode nodemanager |
Spark02 | datanode nodemanager |
升级操作系统和软件
Centos 7:
yum -y update
升级后建议重启
安装常用软件
yum -y install gcc gcc-c++ autoconf automake cmake ntp ntpdate rsync ssh vim man zip unzip net-tools zlib zlib-devel openssl openssl-devel pcre-devel tcpdump lrzsz
修改主机名
hostnamectl set-hostname hadoop
或者
vim /etc/hostname
Spark
reboot
修改IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens32
网卡 配置文件示例
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="19fba887-d2d4-4c85-9675-d314b44ac4f1"
DEVICE="ens32"
ONBOOT="yes"
IPADDR="192.168.18.2"
PREFIX="24"
GATEWAY="192.168.18.1"
DNS1="223.5.5.5"
IPV6_PRIVACY="no"
保存后
systemctl restart network
或者
service network restart
重启网络服务
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#service iptables stop #关闭防火墙
#chkconfig iptables off #禁止开机启动
vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
# SELINUXTYPE=targeted
SELINUX=disabled
执行下面命令
setenforce 0
创建统一工作目录(3台机器)
mkdir -p /export/servers/ #软件安装路径
mkdir -p /export/data/ #数据存储路径
mkdir -p /export/software/ #安装包存放路径
创建软件安装目录并上传软件,配置环境变量
上传jdk到/export/softwares路径下去,并解压
tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
mv jdk1.8.0_301 jdk8
配置环境变量:
vim ~/.bashrc 或者
vim /etc/profile
在文件末尾:
修改完成之后记得
source /etc/profile 生效
Mysql
卸载mariadb
rpm -qa | grep -i mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
rpm -qa|grep mariadb
下载安装包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.25-1.el7.x86_64.rpm-bundle.tar
下载好的直接传入安装包
mkdir /export/software/
tar xvf mysql-8.0.25-1.el7.x86_64.rpm-bundle.tar -C ../server/
解压安装包到指定目录
tar -xvf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar -C mysql
保留最少安装文件
cd mysql
rm -rf *debug*
装mysql
rpm -ivh *.rpm --force --nodeps
查看是否安装成功
mysqladmin --version
启动mysql
systemctl start mysqld
systemctl enable mysqld
查看初始密码
grep 'temporary password' /var/log/mysqld.log
登录mysql
mysql -h localhost -uroot -p
mysql环境清空屏幕
system clear
修改密码
SHOW VARIABLES LIKE 'validate_password%';
mysql> set global validate_password_policy=LOW
-> ;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
update mysql.user set host = '%',plugin='mysql_native_password' where user='root';
flush privileges;
quit;
重启mysql服务
systemctl restart mysqld
登录mysql
mysql -h 127.0.0.1 -uroot -p
查看字符集
show variables like'%character%';
exit
编辑配置文件修改服务器端字符集
vim /etc/my.cnf
#在[mysqld]下面增加
character-set-server=utf8
重启mysql服务
systemctl restart mysqld
自此Mysql 安装完毕
虚拟机克隆
将之前的一台变成3台
1.打开虚拟机。
修改里面的东西。
1、ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启网络:
service network restart
systemctl restart network
2.hostname主机名
hostnamectl set-hostname Spark
或者
vim /etc/hostname
hadoop
修改完之后 ping 百度和自己的ip测试,能否ping通。
虚拟机重启一下:
集群时间同步(3台机器)
yum -y install ntpdate
ntpdate ntp4.aliyun.com
Hadoop 安装:
tar -zxvf hadoop-3.3.1.tar.gz
mv hadoop-3.3.1 hadoop3
vim ~/.bashrc
export JAVA_HOME=/opt/soft/jdk8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/soft/hadoop3
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
编辑完成后使用source命令使文件~/.bash_profile生效执行以下命令
source ~/.bashrc
source /etc/profile
检查环境变量
printenv
修改如下配置文件
- hadoop-env.sh
- core-site.xml
- hdfs-site.xml
- workers
- mapred-site.xml
- yarn-site.xml
hadoop-env.sh
hadoop-env.sh
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim hadoop-env.sh
#配置JAVA_HOME
export JAVA_HOME=/export/server/jdk8
#设置用户以执行对应角色shell命令
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
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://Spark:9000</value>
</property>
<!--HDFS读取文件的缓冲大小-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 临时文件存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop/datas/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
hdfs-site.xml
<!--配置hdfs文件系统的副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定hdfs文件系统的元数据存放目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/server/hadoop3/datas/namenode/namenodedatas</value>
</property>
<!--对于新文件切分的大小,单位byte。默认是64M,建议是128M。每一个节点都要指定,包括客户端 -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!--NameNode用来处理来自DataNode的RPC请求的线程数量,一般在10~200个之间 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>10</value>
</property>
<!--指定hdfs文件系统的数据块存放目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/server/hadoop3/datas/datanode/datanodeDatas</value>
</property>
<!--配置HDFS的web管理地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>Spark:50070</value>
</property>
<!--指定hdfs文件系统权限是否开启-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--配置secondaryNamenode的web管理地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Spark01:50090</value>
</property>
<!--配置是否打开web管理-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
mapred-site.xml
<!--指定mapreduce运行的框架名-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx512M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx512M</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>256</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>25</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>Spark:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Spark:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/export/server/hadoop3/datas/jobhsitory/intermediateDoneDatas</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/export/server/hadoop3/datas/jobhsitory/DoneDatas</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/export/server/hadoop3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/export/server/hadoop3/</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/export/server/hadoop</value>
</property>
Yarn.site.xml
<!--指定resourcemanager所启动服务的主机名/ip-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Spark</value>
</property>
<!--指定mapreduce的shuffle处理数据方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置resourcemanager内部通讯地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>Spark:8032</value>
</property>
<!--配置resourcemanager的scheduler组件的内部通信地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Spark:8030</value>
</property>
<!--配置resource-tracker组件的内部通信地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Spark:8031</value>
</property>
<!--配置resourcemanager的admin的内部通信地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Spark:8033</value>
</property>
<!--配置yarn的web管理地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Spark:8088</value>
</property>
<!--yarn的聚合日志是否开启-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--聚合日志报错hdfs上的时间-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!--聚合日志的检查时间段-->
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>3600</value>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
</property>
<!--当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)-->
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/export/server/hadoop3/datas/remoteAppLog/remoteAppLogs</value>
</property>
Works
cd /export/server/hadoop-3.1.4/etc/hadoop/
vim works
配置映射信息
vim /etc/hosts
将配置好的hadoop 发送给其他节点
cd /export/server
scp -r hadoop root@Spark01:$PWD
scp -r hadoop root@Spark02:$PWD
配置免密登录:
在3台机器都要敲下面的命令 都会生成
ssh-keygen -t rsa (四个回车)
//执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
在第一台机器 免密3台 分别数3次命令
ssh-copy-id Spark
ssh-copy-id Spark01
ssh-copy-id Spark02
将修改后的环境变量同步其他机器
scp /etc/profile root@Spark01:/etc/
scp /etc/profile root@Spark02:/etc/
重新加载环境变量 验证是否生效(3台机器)
source /etc/profile
hadoop #验证环境变量是否生效
初始化
hdfs namenode -format
在Spark上,使用软件自带的shell脚本一键启动
前提:配置好机器之间的SSH免密登录和workers文件。
HDFS集群
start-dfs.sh
stop-dfs.sh
YARN集群
start-yarn.sh
stop-yarn.sh
Hadoop集群
start-all.sh
stop-all.sh
HDFS 初体验
shell命令操作
hadoop fs -mkdir /Test
hadoop fs -put zookeeper.out /Test
hadoop fs -ls /
MapReduce+YARN 初体验
执行Hadoop官方自带的MapReduce案例
评估圆周率π的值
cd /export/server/hadoop-3.1.4/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.3.1.jar pi 2 4
hadoop jar /export/server/hadoop-3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.1-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
整合Spark3:
mv spark-3.3.0-bin-hadoop3 spark3
vim /etc/profile
export SPARK_HOME=/EXPORT/servers/spark-2.4.5 export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile
修改配置
文件位置:$SPARK_HOME/conf
修改文件:slaves、spark-defaults.conf、spark-env.sh、log4j.properties
more slaves
修改配置文件
1) 进入解压缩后路径的 conf 目录,修改 slaves.template 文件名为 slaves
mv slaves.template slaves
2) 修改 slaves 文件,添加 work 节点
mv spark-env.sh.template spark-env.sh
spark.master spark://Spark:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Spark:9000/spark-eventlog
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 512m
# 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
# HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要,先提前配上
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
# 指定spark老大Master的IP和提交任务的通信端口
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
cd $SPARK_HOME/sbin ./start-all.sh
修改配置文件名称
mv spark-env.sh.template spark-env.sh
修改配置文件
vim spark-env.sh
增加如下内容:
# 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
# HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要,先提前配上
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
# 指定spark老大Master的IP和提交任务的通信端口
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
4.分发
将配置好的将 Spark 安装包分发给集群中其它机器,命令如下:
cd /export/server/
scp -r spark-3.0.1-bin-hadoop2.7 root@node2:$PWD
scp -r spark-3.0.1-bin-hadoop2.7 root@node3:$PWD
创建软连接
ln -s /export/server/spark-3.0.1-bin-hadoop2.7 /export/server/spark
1.集群启动和停止
在主节点上启动spark集群
/export/server/spark/sbin/start-all.sh
在主节点上停止spark集群
/export/server/spark/sbin/stop-all.sh
在主节点上单独启动和停止Master:
start-master.sh
stop-master.sh
在从节点上单独启动和停止Worker(Worker指的是slaves配置文件中的主机名)
start-slaves.sh
stop-slaves.sh
2.jps查看进程
node1:master
node2/node3:worker
3.http://node1:8080/
/export/server/spark/bin/spark-shell --master spark://node1:7077