博主将用四篇博客详细讲解如何从零搭建Hadoop+zookeeper+hbase+hive完全分布式环境,本篇主要为搭建Hadoop集群
前期准备
安装包:
新建一个虚拟机(使用VMtools将虚拟机时间和主机时间同步)
将新建software根目录,将jdk、hadoop、hadoop-native、hive、hbase、zookeeper、mysql和java连接数据库jar包引入software目录下
将jdk、hadoop、hive、hbase、zookeeper解压到opt目录下
hadoop-native解压到hadoop/etc/bin和hadoop/etc/bin/native目录下
配置集群环境变量(将整个集群的环境变量一次配置完成)
vi /etc/profile 将下方代码插入文件最后,source /etc/profile 刷新环境变量
java -version、hadoop version、hive version、hbase version 检查环境变量配置是否正确
export JAVA_HOME=/opt/java8
export JRE_HOME=/opt/jdk8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export HADOOP_HOME=/opt/hadoop
export HBASE_HOME=/opt/hbase
export HIVE_HOME=/opt/hive
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin
修改主机名
hostnamectl set-hostname 主机名
修改主机列表
vi /etc/hosts
//将集群内的虚拟机都加入主机列表
配置免密登录
生成免密密钥:ssh-keygen -t rsa -P ""
将生成的免密私钥复制到公钥:cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (>>为追加,若覆盖则用>)
为集群虚拟机添加互信:ssh-copy-id -i .ssh/id_rsa.pub -p22 root@192.168.56.122(或主机名)
免密登录验证:ssh -p 22 root@192.168.56.122(或主机名)
配置单机Hadoop
进入hadoop/etc/hadoop目录下
配置hadoop-env.sh
vi hadoop-env.sh
将JAVA_HOME改为虚拟机的java路径
配置core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.56.110:9000</value> //主机ip
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value> //hadoop临时文件存放目录,此处放在hadoop根目录下
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
配置hdfs-site.xml
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value> //主机名
</property>
</configuration>
配置mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value> //主机名
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value> //主机名
</property>
</configuration>
配置yarn-site.xml
vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- 日志聚集功能使用 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
配置slaves
vi slaves
将集群的主机名添加到slaves中(目前为单机模式只添加单个虚拟机名就可以)
格式化HDFS
hadoop namenode -format
//查看是否有报错日志,有报错根据报错信息检查配置文件
启动Hadoop
start-all.sh
//检查节点数量是否正确
登录网页查看Hadoop
192.168.56.110:50070 //HDFS页面
192.168.56.110:8088 //YARN管理页面
192.168.56.110:19888 //hadoop历史服务界面
检查无误后关闭Hadoop
stop-all.sh
搭建Hadoop集群
将搭建好单机Hadoop的虚拟机复制两个
VMware复制虚拟机时要重新生成MAC地址否则会网卡冲突无法连接网络
修改两个新建虚拟机的IP和主机名
vi /etc/sysconfig/network-scripts/ifcfg-ens33
hostnamectl set-hostname 主机名
修改集群所有虚拟机的主机列表
vi /etc/hosts
//将所有主机名加入主机列表
为集群内所有虚拟机设置免密登录
//将集群内所有虚拟机设置为免密登录
ssh-keygen -t rsa -P ""
//将集群内所有虚拟机私钥复制到公钥
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
//为集群内所有虚拟机添加互信
ssh-copy-id -i /root/.ssh/id_rsa.pub -p22 root@192.168.56.122(或主机名)
//检验集群内虚拟机是否互相之间能免密登录
ssh -p 22 root@192.168.56.110
将集群内所有虚拟机切换到/opt/hadoop/etc/hadoop目录下
配置hdfs-site.xml(每台虚拟机都要配置)
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value> //将数值改为集群虚拟机数量的值
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value> //备用节点主机名
</property>
</configuration>
配置slaves(每台虚拟机都要配置)
vi slaves
//将集群内所有的虚拟机名加入slaves中
格式化HDFS
删除集群内所有虚拟机/opt/hadoop/tmp目录:rm -rf /opt/hadoop/tmp
格式化HDFS:hadoop namenode -format
在集群主节点虚拟机上启动hadoop集群
start-all.sh
//检查节点数量若缺少节点,就停止集群,并删除所欲虚拟机上/opt/Hadoop/tmp文件夹,再重新格式化HDFS,再启动hadoop集群