最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(一)

一、准备工作

1. 预备安装包

我将需要的包全部放到百度盘里了 :
链接: https://pan.baidu.com/s/1NHxweoK7zYf5hqP1aLIHAw 提取码: ip4c
hadoop-2.8.5.tar.gz、hbase-2.1.1-bin.tar.gz、apache-hive-2.3.4-bin.tar.gz、jdk-8u102-linux-x64.tar.gz、mysql-community-*.rpm、xshell、xftp、CentOS-7-x86_64-Minimal-1804.ISO、mysql-connector-java-8.0.13.jar

注,mysql不是完全必要,现在的hive都自带derby了,所以可以不用mysql,而且配置起来其实更简单。xshell和xftp用来连接虚拟机的,比较方便。虚拟机的话我用的vmware,这里不上传安装包了,自己解决

2. 安装虚拟机

安装三个一毛一样的虚拟机,然后再windows上安装xshell和xftp。如何安装自行百度,非常简单。

静态地址设置

安装好虚拟机后,要将虚拟机的地址设定为静态地址,否则虚拟机地址定期会变,会造成不必要的麻烦,要想将虚拟机设置为静态地址,首先了解虚拟机的网关掩码啥的。
点击【编辑】、【虚拟网络编辑器】,选中nat模式,然后【nat设置】如图
在这里插入图片描述
在这里插入图片描述

这里面有子网ip子网掩码,网关ip信息,用它们来设置静态ip。
root用户下,做下面这些事情:

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

然后将其修改如下:

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="ens33"
UUID="006888a8-6385-4dda-b8e8-9d6f89b07a4f"
DEVICE="ens33"
ONBOOT="yes"
# 下面四个是新添加的,ipaddr就是我们为虚拟机设置的静态ip,每个主机要设置不同的静态
# ip,并且前只有ip的后面那个8位可以变,就分别设成129,130,131吧
IPADDR=192.168.208.129 
GATEWAY=192.168.208.2
NETMASK=255.255.255.0
DNS1=192.168.208.2

然后重启网络服务

service network restart

可以用ip addr命令查看本机ip如下:

[fay@master ~]$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:96:b6:0a brd ff:ff:ff:ff:ff:ff
    inet 192.168.208.129/24 brd 192.168.208.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::5914:336a:4dde:d580/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以看到192.168.208.129就是配置好的静态ip
然后就用xshell连接三台主机了,利用xftp将预先下载好的安装包上传到其中一个虚拟机上,选中其为master,其它两作为小弟slave1和slave2,这里配置下每台主机的 /etc/hosts文件如下:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.208.129 master
192.168.208.130 slave1
192.168.208.131 slave2

然后每个主机都创建一个用户fay,然后将/opt这个目录的权限给这个用户:chown fay -R /opt,切换到这个用户。创建用户的过程在虚拟机安装的时候就可以设置了(如果是vmware的话),跟着步骤走就好,实在不想搞直接用root也行。后面所有东西都往/opt装。

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

时间同步

三台虚拟机的时间可能不是同步的,这会影响HBASE的使用,所以,建议将三个虚拟机的时间同步,这里有两种方法,可以兼用。
第一种:设置虚拟机
设置虚拟机,找到【选项】==> 【vmwaretools】 ==> 【点击将客户端时间与主机同步】 ==> 【确定】

在这里插入图片描述

在这里插入图片描述

第二种:在虚拟机上安装ntp服务

yum install -y ntpdate
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate -u ntp.api.bz

这里推荐第二种,如果经常挂起虚拟机的话,第一种好像作用不大,第二种的话就可以恢复后来一次

后面操作用 fay 用户

安装java

java是必须的

su fay
tar -zxvf jdk-8u102-linux-x64.tar.gz -C /opt

配置环境变量

vi ~/.bashrc
export JAVA_HOME=/opt/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin

# 退出来
source ~/.bashrc 
# 测试java是否安装成功
java -version

二、Hadoop

免秘钥ssh登录

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

然后尝试下能不能免秘钥 ssh localhost ,如果可以,再将自己的公钥给两个slave

ssh-copy-id fay@slave1
ssh-copy-id fay@slave2

对于其它两个slave,也执行同样的命令,然后将公钥分别交给另外两台机器,至此三台虚拟机间就可以相互无秘钥切换了。

然后解压hadoop,然后进入etc/hadoop文件夹下修改配置文件

tar -zxvf hadoop-2.8.5.tar.gz -C /opt
cd /opt/hadoop-2.8.5/etc/hadoop/

修改core-site.xml,这些xml文件,有些有,有些是带template或者default字段,将其copy成我说的文件即可

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
	<property>
		<name>hadoop.tmp.dir</name>
	<value>/home/fay/tmp</value>
	</property>
</configuration>

修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
<property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
</property>
<property>

        <name>dfs.datanode.max.xcievers</name>

        <value>4096</value>

      <dedication> Datanode 有一个同时处理文件的上限,至少要有4096</dedication>
</property>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
</property>
<property>  <!--设置为true,可以在浏览器中IP+port查看-->

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

修改mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
 <property>
    <name>mapreduce.jobhistory.address</name>
    <!--配置实际的主机名和端口-->
    <value>master:10020</value>
  </property>
 
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
  </property>
</configuration>

修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!--日志保存时间 默认保存3-7-->	
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property> <!--ResourceManager 对客户端暴露的地址--> 
<name>yarn.resourcemanager.address</name> 
<value>master:8032</value> 
	</property> 
	<property> <!--ResourceManager 对ApplicationMaster暴露的地址-->  
		<name>yarn.resourcemanager.scheduler.address</name> 
		<value>master:8030</value> 
	</property> 
	<property> <!--ResourceManager 对NodeManager暴露的地址--> 
		<name>yarn.resourcemanager.resource-tracker.address</name>  
		<value>master:8031</value> 
		</property> 	
	<property> <!--ResourceManager 对管理员暴露的地址--> 
		<name>yarn.resourcemanager.admin.address</name>   
		<value>master:8033</value> 
	</property> 
	<property> <!--ResourceManager 对外web暴露的地址,可在浏览器查看-->   
		<name>yarn.resourcemanager.webapp.address</name> 
		<value>master:8088</value> 
	</property>
</configuration>

修改yarn-env.shhadoop-env.sh

#将这句话放到带有java_home的位置,主要是有时候它就是不认你配置的java_home环境变量
export JAVA_HOME=/opt/jdk1.8.0_102

修改slaves文件

#删掉localhost
slave1
slave2

将hadoop添加到环境变量,修改~/.bashrc

export JAVA_HOME=/opt/jdk1.8.0_102
export HADOOP_HOME=/opt/hadoop-2.8.5
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后 source ~/.bashrc

另外两台机器就简单了,直接copy过去就好

scp -r /opt fay@slave1:/
scp -r /opt fay@slave2:/

理论上这一步没问题,但是你之前/opt权限没配置好就权限不足,那就弄好权限。
然后把环境变量文件也直接copy过去

scp ~/.bashrc fay@slave1:/home/fay/
scp ~/.bashrc fay@slave2:/home/fay/

两台机器上分别 source ~/.bashrc
然后在master节点上 初始化namenode:

hdfs namenode -format

然后启动hadoop

start-dfs.sh
start-yarn.sh

master节点上输入jps,看到如下显示:

[fay@master hadoop-2.8.5]$ jps
35184 SecondaryNameNode
34962 NameNode
35371 ResourceManager
35707 Jps

两个slave节点:

[fay@slave1 ~]$ jps
16289 Jps
16035 DataNode
16152 NodeManager

到这里hadoop基本已经安装好了,当然你可能没那么顺利,可能会有报错,那就根据错误网上找解决方案,如果一次成功只能说明我写的太好了还有你很认真。
测试一下hadoop
在windows浏览器上输入192.168.208.129:8088出现一下界面说明yarn应该问题不大了
在这里插入图片描述
当然还是要跑下hadoop 自带的mapreduce 用例

$ cd /opt/hadoop-2.8.5
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/fay
$ hdfs dfs -put etc/hadoop input
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep input output 'dfs[a-z.]+'
# 没有报java错误,那就ok,在output目录查看下输出结果:
$ hdfs dfs -cat output/*

好了以上你都没问题,hadoop本身应该就没问题了。后面继续更新hbase和hive的安装

HBase以及Hive的安装配置,请参考最详细的Hadoop+Hbase+Hive完全分布式环境搭建教程(二)

猜你喜欢

转载自blog.csdn.net/Fei20140908/article/details/83999521