Hadoop集群配置
Hadoop集群配置
内容
实验环境及软件:
- VMware Workstation15
- CentOS 7.0或8.0
- Hadoop-2.7.3
- JDK
步骤:
-
启动至少两台虚拟客户机
自己安装俩或以上CentOS虚拟机,HadoopMaster和HadoopSlave注意,所有虚拟机创建的用户名应该相同,Hadoop通过主机名分辨不同的结点,不同结点主机名应该不同,但用户名建议相同(可以减少需要修改的配置),如果不做配置,Hadoop文件系统会默认读取操作系统的用户作为Hadoop的用户名
-
Linux系统配置
-
Hadoop配置部署
-
启动Hadoop集群
Linux系统配置
-
下载拷贝软件包和数据包
可以通过U盘、vmtools、共享文件夹、直接在虚拟机内下载等方式获取,需要注意的是,之后的静态IP配置可能导致暂时通不了外网等情况,建议优先下载到Master服务器。Hadoop的版本建议使用2.6.0左右,如果需要使用java插件跑MapReduce,慎重选择高版本Hadoop,Hadoop的eclipse插件在2014年已经停止更新,最后版本为2.6.0。对于新版本的Hadoop而言,插件所需要jar依赖包在版本和数量上已经发生了一些变化,即使可以通过修改插件源文件配置进行适配,也很可能在使用过程中产生问题。当然,也可以采用idea上的HadoopIntellijPlugin(适配3.2.1版本,没用过):
https://github.com/fangyuzhong2016/HadoopIntellijPlugin
原Hadoop的eclipse插件:
-
配置自动时钟同步
这一步是为了能集群内所有服务器都用同一个时间,防止相互之间的日志出错。
自动时钟同步通过'crontab命令+ntpdate'或chrony实现。
crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令。而crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
参考:https://www.runoob.com/linux/linux-comm-crontab.htmlNTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
从CentOS7.2开始,CentOS支持chrony(网络时间协议(NTP)的通用实现),而从CentOS8开始,不再支持ntp,只能使用chrony。
安装过程可参考:https://blog.csdn.net/weixin_42758707/article/details/94738761
https://www.cnblogs.com/liushui-sky/p/9203657.html
https://www.cnblogs.com/jhxxb/p/11526098.html
https://blog.csdn.net/gaofei0428/article/details/103644371通过这些网站可知,crontab+ntpdate会定时即刻同步时间,会产生时间上的跳跃,在有其他定时程序的情况下可能会出错。
chrony的使用方法:
首先修改时间源服务器:
打开chrony配置文件
vim /etc/chrony.conf将第三行的地址改为:
server us.pool.ntp.org iburst打开并开机自动启动chrony守护服务
systemctl start chronyd.service systemctl enable chronyd.service -
配置节点主机名和网络
这一步是为了能识别集群中的各个节点,将不同的节点用不同的主机名标识,如:namenode用master,而datanode用slave1、slave2、slave3等等
-
配置各节点主机名
CentOS6下:
vim /etc/sysconfig/network内容修改:
NETWORKING=yes HOSTNAME=相应主机名CentOS7、8下:
vim /etc/hostname直接修改主机名,所有的节点主机名应不同,可以为:master、slave1、slave2、slave3等等。
-
配置网络环境
这一步是为了让集群内节点相互正常访问,分为配置静态IP和关闭防火墙。
由于我们是通过主机名来标识,如果采用DHCP,可能会有节点的IP变化,导致与所设置的主机名对应IP不一致,无法正常使用,所以要配置静态IP,具体方法建议百度。
另外是关闭防火墙(简单粗暴):
systemctl stop firewalld.service systemctl disable firewalld.service systemctl status firewalld.service依次为停止、禁止启动、查看防火墙状态。
配置hosts列表:
vim /etc/hosts将其中添加 ip 主机名对:
节点ip ip对应的主机名之后可以ping相应主机名进行测试。
-
安装JDK
Hadoop是基于java的,JDK自然不必多说,之后使用MapReduce编程也需要用到。
将JDK解压并放在/usr/java目录下:
mkdir /usr/java mv jdkgz压缩文件 /usr/java/ cd /usr/java tar –xvf /usr/java/jdkgz压缩文件配置java用户下的环境变量
vim /home/用户名/.bash_profile添加以下内容:
export JAVA_HOME=/usr/java/jdk文件夹名/ export PATH=$JAVA_HOME/bin:$PATH通过:
source .bash_profile终端内生效,或者重启虚拟机永久生效
然后可以通过java版本命令查看是否安装成功:
java -version -
免密钥登录设置
Hadoop集群相互访问时要通过ssh远程登录到其他节点,为了避免每次访问都需要输入密码,我们需要设置免密登录。
在Master节点的用户主目录下,用以下命令生成ssh下的rsa密钥
ssh-keygen -t rsa会生成一个.ssh的隐藏文件夹,里面有一个rsa密钥文件和一个rsa.pub的公钥文件:
cd .ssh ls -l将公钥文件复制为另一个suthorized_keys用于免密钥登录的身份认证文件,修改其权限为仅创建者读写
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 authorized_keys然后将免密文件发送到各slave节点上
scp authorized_keys 用户名@相应节点名:~/同样地,在各slave节点用户主目录生成密钥文件,并将从master节点得到的authorized_keys文件移动到.ssh目录:
ssh-keygen -t rsa mv authorized_keys ~/.ssh/通过ssh远程连接验证免密登录:
ssh 节点主机名
-
至此,Hadoop需要的Linux环境基本搭建完成。
Hadoop配置部署及启用
-
文件拷贝
在自定义用户主目录下,解压hadoop压缩包:
# 以下将压缩包移动到主目录 # cp hadoop压缩包 ~/ # cd ~ tar -zxvf hadoop压缩包 # 查看hadoop文件 cd hadoop文件夹 -
属性配置
-
配置JDK环境路径
vim /home/用户名/hadoop-2.5.2/etc/hadoop/hadoop-env.sh去掉其中的JAVA_HOME的注释并修改路径为之前安装的JDK路径
# The java implomentation to use ..... export JAVA_HOME=/usr/java/jdk... -
配置核心组件core-site.xml
vim /home/用户名/hadoop-2.5.2/etc/hadoop/core-site.xml<configuration> <property> <name>fs.default.name</name> /*2.0后用fs.defaultFS代替*/ <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/dhx/hadoopdata</value> </property> </configuration>-
hadoop分布式文件系统文件存放位置都是基于hadoop.tmp.dir目录的,namenode的名字空间存放地方就是{hadoop.tmp.dir}/dfs/name,datanode数据块的存放地方就是{hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。
-
fs.default.name,设置namenode所在主机,端口号是9000
-
core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置
-
-
配置文件系统hdfs-site.xml
vim /home/用户名/hadoop-版本号/etc/hadoop/hdfs-site.xml<configuration> <!-- appoint HDFS transcript counts --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- appoint blocksize --> <property> <name>dfs.block.size</name> <value>64M</value> </property> </configuration>dfs.replication,设置数据块的复制次数,默认是3,如果slave节点数少于3,则写成相应的1或者2
-
配置计算框架mapred-site.xml
vim /home/用户/hadoop-版本号/etc/hadoop/mapred-site.xml<configuration> <property> <name>mapred. job.tracker</name> //2.0 后 mapreduce.framework.name <value>master:9001</value> //2.0 后 yarn </property> </configuration>mapred.job.tracker,设置jobtracker所在机器,端口号9001,对于2.0以后的hadoop而言,多了一个yarn框架,因此要改成yarn
-
配置yarn-site.xml
vim /home/用户/hadoop-版本号/etc/hadoop/yarn-site.xml<property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> -
配置主节点masters(2.0后不需要设置):
vim /home/用户/hadoop-版本号/etc/hadoop/masters添加master主机名
-
配置从节点slaves(3.0改为workers):
vim /home/用户/hadoop-版本号/etc/hadoop/slaves添加所有datanode的主机名(按行分割)
-
将该hadoop文件复制到slave节点:
scp -r hadoop-版本号 slave:~/
-
-
启动Hadoop文件系统
-
格式化文件系统:
由于尚未配置用户下的hadoop环境变量,需要手动在文件中启用脚本(或者在配置完环境变量后再格式化):cd /home/用户名/hadoop-版本号/bin/ ./hdfs namenode -format在datanode中:
cd /home/用户名/hadoop-版本号/bin/ ./hdfs datanode -format -
配置Hadoop的用户环境变量,主目录下:
vim .bash_profileexport HADOOP_HOME=/home/用户名/hadoop-版本号 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH环境生效:
source .bash_profile启动hadoop:
cd ~/hadoop-版本号 bin/start-all.sh查看进程:
jps -
WebUI查看集群是否安装成功:
在HadoopMaster上启动Fixefox浏览器,在浏览器地址栏中输入http://master:50070/,检查namenode和datanode是否正常。
在HadoopMaster上启动Fixefox浏览器,在浏览器地址栏中输入http://master:50030/,检查JobTracker和TaskTracker是否正常,在hadoop3.0以后,一些默认端口已经改变,可以百度查询。 -
运行PI实例检查集群是否成功
cd /home/用户/hadoop-版本号 hadoop jar ~/hadoop-版本号/share/hadoop/mapreduce/hadoop-mapreduce-examples-版本号.jar pi 10 10结果为一个不准确的圆周率数
-

浙公网安备 33010602011771号